diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..ea6e20f
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,14 @@
+# http://editorconfig.org
+root = true
+
+[*]
+charset = utf-8
+indent_style = space
+indent_size = 2
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.md]
+insert_final_newline = false
+trim_trailing_whitespace = false
diff --git a/.env b/.env
new file mode 100644
index 0000000..b866baa
--- /dev/null
+++ b/.env
@@ -0,0 +1,10 @@
+VUE_FILE_PATH = 'https://zyypacs-code.oss-cn-shanghai.aliyuncs.com'
+
+
+OSS_REGION = 'oss-cn-shanghai'
+
+OSS_BUCKET = 'zyypacs-code'
+
+OSS_ACCESS_KEY_ID = 'mpXG7Nu6zTpsDrI1'
+
+OSS_ACCESS_KEY_SECRET = 'yNINcEb099SkNfF6vYKaoP8TZNI3xZ'
diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000..1b31e81
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,49 @@
+ENV = 'development'
+NODE_ENV = 'development'
+
+# base public path
+VUE_APP_BASE_PATH = '/'
+
+VUE_APP_IS_TEST = false
+
+# base api
+VUE_APP_BASE_API = 'http://123.56.94.154:7050'
+
+VUE_CLI_BABEL_TRANSPILE_MODULES = false
+
+# 是否开启登陆限制 true:是 false:否
+VUE_APP_LOGIN_FOR_PERMISSION = false
+
+# 是否开启长时间无操作锁定弹框 true:是 false:否
+VUE_APP_LOCK_FOR_PERMISSION = false
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOCK_FOR_TIME = 60
+
+# 是否开启长时间无操作登出 true:是 false:否
+VUE_APP_LOGOUT_FOR_PERMISSION = false
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOGOUT_FOR_TIME = 1800
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_PERMISSION = false
+
+# 密码校验规则
+VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
+
+# 是否开启文档签署验证 true:是 false:否
+VUE_APP_WORD_FOR_PERMISSION = false
+
+
+# dicom文件地址
+# VUE_APP_DICOM_PATH = 'http://123.56.94.154:7050'
+VUE_APP_DICOM_PATH = 'https://zyypacs.oss-cn-shanghai.aliyuncs.com'
+
+VUE_APP_DICOM_USA_PATH = 'https://zyypacs-usa.oss-us-west-1.aliyuncs.com'
+
+VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
+
+VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs'
+
+VUE_APP_OSS_PATH = '/test/dist'
diff --git a/.env.prod b/.env.prod
new file mode 100644
index 0000000..4f77756
--- /dev/null
+++ b/.env.prod
@@ -0,0 +1,41 @@
+# just a flag
+ENV = 'production'
+NODE_ENV = 'production'
+#process.env.NODE_ENV
+# base public path
+VUE_APP_BASE_PATH = '/'
+
+# 是否开启登陆限制 true:是 false:否
+VUE_APP_LOGIN_FOR_PERMISSION = true
+
+# 是否开启长时间无操作锁定弹框 true:是 false:否
+VUE_APP_LOCK_FOR_PERMISSION = true
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOCK_FOR_TIME = 900
+
+# 是否开启长时间无操作登出 true:是 false:否
+VUE_APP_LOGOUT_FOR_PERMISSION = true
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOGOUT_FOR_TIME = 1800
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_PERMISSION = true
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
+
+# 是否开启文档签署验证 true:是 false:否
+VUE_APP_WORD_FOR_PERMISSION = true
+
+# dicom文件地址
+# VUE_APP_DICOM_PATH = 'http://101.132.193.237:7080'
+VUE_APP_DICOM_PATH = 'https://zyypacs-prod.oss-cn-shanghai.aliyuncs.com'
+
+VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
+
+VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-prod'
+
+
+VUE_APP_OSS_PATH = '/study_prod/dist'
diff --git a/.env.production b/.env.production
new file mode 100644
index 0000000..716b971
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,48 @@
+# just a flag
+ENV = 'production'
+NODE_ENV = 'production'
+# base public path
+VUE_APP_BASE_PATH = '/'
+
+VUE_APP_IS_TEST = true
+
+# 是否开启登陆限制 true:是 false:否
+VUE_APP_LOGIN_FOR_PERMISSION = false
+
+# 是否开启长时间无操作锁定弹框 true:是 false:否
+VUE_APP_LOCK_FOR_PERMISSION = false
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOCK_FOR_TIME = 900
+
+# 是否开启长时间无操作登出 true:是 false:否
+VUE_APP_LOGOUT_FOR_PERMISSION = false
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOGOUT_FOR_TIME = 1800
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_PERMISSION = true
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
+
+# 是否开启文档签署验证 true:是 false:否
+VUE_APP_WORD_FOR_PERMISSION = true
+
+
+
+# dicom文件地址
+# VUE_APP_DICOM_PATH = 'http://123.56.94.154:7050'
+
+VUE_APP_DICOM_PATH = 'https://zyypacs.oss-cn-shanghai.aliyuncs.com'
+#VUE_APP_DICOM_PATH = 'http://123.56.94.154:7000'
+#VUE_APP_DICOM_PATH = 'https://zyypacs-mdc.oss-cn-shanghai.aliyuncs.com'
+
+VUE_APP_DICOM_USA_PATH = 'https://zyypacs-usa.oss-us-west-1.aliyuncs.com'
+
+VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
+
+VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs'
+
+VUE_APP_OSS_PATH = '/study_test/dist'
diff --git a/.env.prop b/.env.prop
new file mode 100644
index 0000000..79660db
--- /dev/null
+++ b/.env.prop
@@ -0,0 +1,34 @@
+# just a flag
+ENV = 'prop'
+NODE_ENV = 'prop'
+
+# 是否开启登陆限制 true:是 false:否
+VUE_APP_LOGIN_FOR_PERMISSION = true
+
+# 是否开启长时间无操作锁定弹框 true:是 false:否
+VUE_APP_LOCK_FOR_PERMISSION = true
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOCK_FOR_TIME = 900
+
+# 是否开启长时间无操作登出 true:是 false:否
+VUE_APP_LOGOUT_FOR_PERMISSION = true
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOGOUT_FOR_TIME = 1800
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_PERMISSION = true
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
+
+# 是否开启文档签署验证 true:是 false:否
+VUE_APP_WORD_FOR_PERMISSION = true
+
+# dicom文件地址
+VUE_APP_DICOM_PATH = 'http://123.56.94.154:7020'
+
+VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
+
+VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs'
diff --git a/.env.uat b/.env.uat
new file mode 100644
index 0000000..960cf15
--- /dev/null
+++ b/.env.uat
@@ -0,0 +1,41 @@
+# just a flag
+ENV = 'production'
+NODE_ENV = 'production'
+# base public path
+VUE_APP_BASE_PATH = '/'
+
+# base public path
+VUE_APP_BASE_PATH = '/'
+
+# 是否开启登陆限制 true:是 false:否
+VUE_APP_LOGIN_FOR_PERMISSION = true
+
+# 是否开启长时间无操作锁定弹框 true:是 false:否
+VUE_APP_LOCK_FOR_PERMISSION = true
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOCK_FOR_TIME = 900
+
+# 是否开启长时间无操作登出 true:是 false:否
+VUE_APP_LOGOUT_FOR_PERMISSION = true
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOGOUT_FOR_TIME = 1800
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_PERMISSION = true
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
+
+# 是否开启文档签署验证 true:是 false:否
+VUE_APP_WORD_FOR_PERMISSION = true
+
+# dicom文件地址
+VUE_APP_DICOM_PATH = 'https://zyypacs-uat.oss-cn-shanghai.aliyuncs.com'
+
+VUE_APP_OSS_CONFIG_REGION = 'oss-cn-shanghai'
+
+VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-uat'
+
+VUE_APP_OSS_PATH = '/study_uat/dist'
diff --git a/.env.usa b/.env.usa
new file mode 100644
index 0000000..7df52bb
--- /dev/null
+++ b/.env.usa
@@ -0,0 +1,40 @@
+# just a flag
+ENV = 'production'
+NODE_ENV = 'production'
+# base public path
+VUE_APP_BASE_PATH = '/'
+
+# 是否开启登陆限制 true:是 false:否
+VUE_APP_LOGIN_FOR_PERMISSION = false
+
+# 是否开启长时间无操作锁定弹框 true:是 false:否
+VUE_APP_LOCK_FOR_PERMISSION = false
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOCK_FOR_TIME = 900
+
+# 是否开启长时间无操作登出 true:是 false:否
+VUE_APP_LOGOUT_FOR_PERMISSION = false
+
+# 无操作锁定弹框判断时间 单位:秒
+VUE_APP_LOGOUT_FOR_TIME = 1800
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_PERMISSION = false
+
+# 是否开启密码正则验证 true:是 false:否
+VUE_APP_PASSWORD_FOR_REGULAR = ^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[-_.@^+\$!%#*?&\$~])[A-Za-z0-9-~_.@^+\$~!%#*?&]{8,32}$
+
+# 是否开启文档签署验证 true:是 false:否
+VUE_APP_WORD_FOR_PERMISSION = false
+
+# dicom文件地址
+VUE_APP_DICOM_PATH = 'https://zyypacs-usa.oss-us-west-1.aliyuncs.com'
+
+VUE_APP_DICOM_USA_PATH = 'https://zyypacs-usa.oss-us-west-1.aliyuncs.com'
+
+VUE_APP_OSS_CONFIG_REGION = 'oss-us-west-1'
+
+VUE_APP_OSS_CONFIG_BUCKET = 'zyypacs-usa'
+
+VUE_APP_OSS_PATH = '/usa/dist'
diff --git a/.eslintrc.js b/.eslintrc.js
new file mode 100644
index 0000000..1e265fd
--- /dev/null
+++ b/.eslintrc.js
@@ -0,0 +1,278 @@
+module.exports = {
+ root: true,
+ parserOptions: {
+ parser: "babel-eslint",
+ sourceType: "module"
+ },
+ globals: {
+ "zzSessionStorage": true
+ },
+ env: {
+ browser: true,
+ node: true,
+ es6: true
+ },
+ extends: ["plugin:vue/recommended", "eslint:recommended"],
+
+ // add your custom rules here
+ //it is base on https://github.com/vuejs/eslint-config-vue
+ rules: {
+ "vue/max-attributes-per-line": [
+ 2,
+ {
+ singleline: 10,
+ multiline: {
+ max: 1,
+ allowFirstLine: false
+ }
+ }
+ ],
+ "vue/singleline-html-element-content-newline": "off",
+ "vue/multiline-html-element-content-newline": "off",
+ "vue/name-property-casing": ["error", "PascalCase"],
+ "vue/no-v-html": "off",
+ "accessor-pairs": 2,
+ "arrow-spacing": [
+ 2,
+ {
+ before: true,
+ after: true
+ }
+ ],
+ "block-spacing": [2, "always"],
+ "brace-style": [
+ 2,
+ "1tbs",
+ {
+ allowSingleLine: true
+ }
+ ],
+ camelcase: [
+ 0,
+ {
+ properties: "always"
+ }
+ ],
+ "comma-dangle": [2, "never"],
+ "comma-spacing": [
+ 2,
+ {
+ before: false,
+ after: true
+ }
+ ],
+ "comma-style": [2, "last"],
+ "constructor-super": 2,
+ curly: [2, "multi-line"],
+ "dot-location": [2, "property"],
+ "eol-last": 2,
+ eqeqeq: ["error", "always", { null: "ignore" }],
+ "generator-star-spacing": [
+ 2,
+ {
+ before: true,
+ after: true
+ }
+ ],
+ "handle-callback-err": [2, "^(err|error)$"],
+ indent: [
+ 2,
+ 2,
+ {
+ SwitchCase: 1
+ }
+ ],
+ "jsx-quotes": [2, "prefer-single"],
+ "key-spacing": [
+ 2,
+ {
+ beforeColon: false,
+ afterColon: true
+ }
+ ],
+ "keyword-spacing": [
+ 2,
+ {
+ before: true,
+ after: true
+ }
+ ],
+ "new-cap": [
+ 2,
+ {
+ newIsCap: true,
+ capIsNew: false
+ }
+ ],
+ "new-parens": 2,
+ "no-array-constructor": 2,
+ "no-caller": 2,
+ "no-console": "off",
+ "no-class-assign": 2,
+ "no-cond-assign": 2,
+ "no-const-assign": 2,
+ "no-control-regex": 0,
+ "no-delete-var": 2,
+ "no-dupe-args": 2,
+ "no-dupe-class-members": 2,
+ "no-dupe-keys": 2,
+ "no-duplicate-case": 2,
+ "no-empty-character-class": 2,
+ "no-empty-pattern": 2,
+ "no-eval": 2,
+ "no-ex-assign": 2,
+ "no-extend-native": 2,
+ "no-extra-bind": 2,
+ "no-extra-boolean-cast": 2,
+ "no-extra-parens": [2, "functions"],
+ "no-fallthrough": 2,
+ "no-floating-decimal": 2,
+ "no-func-assign": 2,
+ "no-implied-eval": 2,
+ "no-inner-declarations": [2, "functions"],
+ "no-invalid-regexp": 2,
+ "no-irregular-whitespace": 2,
+ "no-iterator": 2,
+ "no-label-var": 2,
+ "no-labels": [
+ 2,
+ {
+ allowLoop: false,
+ allowSwitch: false
+ }
+ ],
+ "no-lone-blocks": 2,
+ "no-mixed-spaces-and-tabs": 2,
+ "no-multi-spaces": 2,
+ "no-multi-str": 2,
+ "no-multiple-empty-lines": [
+ 2,
+ {
+ max: 1
+ }
+ ],
+ "no-native-reassign": 2,
+ "no-negated-in-lhs": 2,
+ "no-new-object": 2,
+ "no-new-require": 2,
+ "no-new-symbol": 2,
+ "no-new-wrappers": 2,
+ "no-obj-calls": 2,
+ "no-octal": 2,
+ "no-octal-escape": 2,
+ "no-path-concat": 2,
+ "no-proto": 2,
+ "no-redeclare": 2,
+ "no-regex-spaces": 2,
+ "no-return-assign": [2, "except-parens"],
+ "no-self-assign": 2,
+ "no-self-compare": 2,
+ "no-sequences": 2,
+ "no-shadow-restricted-names": 2,
+ "no-spaced-func": 2,
+ "no-sparse-arrays": 2,
+ "no-this-before-super": 2,
+ "no-throw-literal": 2,
+ "no-trailing-spaces": 2,
+ "no-undef": 2,
+ "no-undef-init": 2,
+ "no-unexpected-multiline": 2,
+ "no-unmodified-loop-condition": 2,
+ "no-unneeded-ternary": [
+ 2,
+ {
+ defaultAssignment: false
+ }
+ ],
+ "no-unreachable": 2,
+ "no-unsafe-finally": 2,
+ "no-unused-vars": [
+ 2,
+ {
+ vars: "all",
+ args: "none"
+ }
+ ],
+ "no-useless-call": 2,
+ "no-useless-computed-key": 2,
+ "no-useless-constructor": 2,
+ "no-useless-escape": 0,
+ "no-whitespace-before-property": 2,
+ "no-with": 2,
+ "one-var": [
+ 2,
+ {
+ initialized: "never"
+ }
+ ],
+ "operator-linebreak": [
+ 2,
+ "after",
+ {
+ overrides: {
+ "?": "before",
+ ":": "before"
+ }
+ }
+ ],
+ "padded-blocks": [2, "never"],
+ quotes: [
+ 2,
+ "single",
+ {
+ avoidEscape: true,
+ allowTemplateLiterals: true
+ }
+ ],
+ semi: [2, "never"],
+ "semi-spacing": [
+ 2,
+ {
+ before: false,
+ after: true
+ }
+ ],
+ "space-before-blocks": [2, "always"],
+ "space-before-function-paren": [2, "never"],
+ "space-in-parens": [2, "never"],
+ "space-infix-ops": 2,
+ "space-unary-ops": [
+ 2,
+ {
+ words: true,
+ nonwords: false
+ }
+ ],
+ "spaced-comment": [
+ 2,
+ "always",
+ {
+ markers: [
+ "global",
+ "globals",
+ "eslint",
+ "eslint-disable",
+ "*package",
+ "!",
+ ","
+ ]
+ }
+ ],
+ "template-curly-spacing": [2, "never"],
+ "use-isnan": 2,
+ "valid-typeof": 2,
+ "wrap-iife": [2, "any"],
+ "yield-star-spacing": [2, "both"],
+ yoda: [2, "never"],
+ "prefer-const": 2,
+ //"no-debugger": process.env.NODE_ENV === "production" ? 2 : 0,
+ "object-curly-spacing": [
+ 2,
+ "always",
+ {
+ objectsInObjects: false
+ }
+ ],
+ "array-bracket-spacing": [2, "never"]
+ }
+};
diff --git a/.gitignore b/.gitignore
index a19f004..60883be 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,11 +1,18 @@
-# ---> Vue
-# gitignore template for Vue.js projects
-#
-# Recommended template: Node.gitignore
-
-# TODO: where does this rule come from?
-docs/_book
-
-# TODO: where does this rule come from?
-test/
+.DS_Store
+node_modules/
+dist/
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+package-lock.json
+tests/**/coverage/
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+.eslintignore
+/.eslintignore
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..d1e1072
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1 @@
+MIT License
diff --git a/README-zh.md b/README-zh.md
new file mode 100644
index 0000000..e472d1d
--- /dev/null
+++ b/README-zh.md
@@ -0,0 +1,7 @@
+
+# 安装依赖
+npm install
+
+# 启动服务
+npm run dev
+
diff --git a/README.en.md b/README.en.md
new file mode 100644
index 0000000..eb5d053
--- /dev/null
+++ b/README.en.md
@@ -0,0 +1,36 @@
+# zhizhun
+
+#### Description
+{**When you're done, you can delete the content in this README and update the file with details for others getting started with your repository**}
+
+#### Software Architecture
+Software architecture description
+
+#### Installation
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Instructions
+
+1. xxxx
+2. xxxx
+3. xxxx
+
+#### Contribution
+
+1. Fork the repository
+2. Create Feat_xxx branch
+3. Commit your code
+4. Create Pull Request
+
+
+#### Gitee Feature
+
+1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md
+2. Gitee blog [blog.gitee.com](https://blog.gitee.com)
+3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore)
+4. The most valuable open source project [GVP](https://gitee.com/gvp)
+5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help)
+6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
diff --git a/babel.config.js b/babel.config.js
new file mode 100644
index 0000000..94f2654
--- /dev/null
+++ b/babel.config.js
@@ -0,0 +1,10 @@
+module.exports = {
+ presets: [
+ '@vue/cli-plugin-babel/preset',
+ '@babel/preset-env'
+ ],
+ plugins: [
+ '@babel/plugin-proposal-optional-chaining',
+ '@babel/plugin-proposal-nullish-coalescing-operator'
+ ]
+}
diff --git a/eamil.html b/eamil.html
new file mode 100644
index 0000000..8dec1a9
--- /dev/null
+++ b/eamil.html
@@ -0,0 +1,49 @@
+
+
+
+
+ Title
+
+
+
+
+
+ 石原里美:
+
+
+ 您参与的临床试验项目【Tsadad】,独立影像评估相关工作将在网上进行。项目及账号信息为:
+
+
+
+ 项目编号: 【内部项目编号】
+
+
+ 试验方案号: 【试验方案号】
+
+
+ 试验名称: 【试验名称】
+
+
+ 用户名: 【用户名】
+
+
+ 密码: 【***】(您已有账号, 若忘记密码,请通过邮箱找回)
+
+
+ 角色: 【用户类型】
+
+
+ 系统登录地址: 【登录网址】
+
+
+
+
+
+ 查看并确认
+
+
+
+
+
diff --git a/i18n.xlsx b/i18n.xlsx
new file mode 100644
index 0000000..b049e0f
Binary files /dev/null and b/i18n.xlsx differ
diff --git a/i18nGenerate.js b/i18nGenerate.js
new file mode 100644
index 0000000..b9ef96a
--- /dev/null
+++ b/i18nGenerate.js
@@ -0,0 +1,50 @@
+/* eslint-disable */
+let xlsx = require('node-xlsx')
+let fs = require('fs')
+if (!fs.existsSync('./i18n.xlsx')) {
+ console.log('缺少国际化文件\,请检查')
+ return
+}
+let sheets = xlsx.parse('./i18n.xlsx')
+let xfsheets = xlsx.parse('./xfi18n.xlsx')
+let varoptions = process.argv
+let lang = varoptions[2].split('=')[1]
+let keyCol = parseInt(varoptions[3].split('=')[1]) - 1
+let valCol = parseInt(varoptions[4].split('=')[1]) - 1
+
+async function init () {
+ try {
+ if (!fs.existsSync('./src/lang')) {
+ fs.mkdirSync('./src/lang')
+ } else {
+ }
+ let txt = '/* eslint-disable */\nexport default {\n'
+ let xftxt = '/* eslint-disable */\nexport default {\n'
+ sheets[0].data.forEach((v, i) => {
+ if (!i) return
+ if (!v[keyCol]) return
+ txt += `\t\t'${v[keyCol]}': \`${v[valCol]}\`,\n`
+ })
+ xfsheets[0].data.forEach((v, i) => {
+ if (!i) return
+ if (!v[keyCol]) return
+ xftxt += `\t\t'${v[keyCol]}': \`${v[valCol]}\`,\n`
+ })
+ txt = txt + '}'
+ xftxt = xftxt + '}'
+ fs.writeFileSync(`./src/lang/${lang}.js`, txt, {
+ encoding: 'utf8'
+ })
+ fs.writeFileSync(`./src/lang/xf${lang}.js`, xftxt, {
+ encoding: 'utf8'
+ })
+ console.log(`${lang}语言国际化配置生成成功`)
+ } catch (e) {
+ console.log(e)
+ }
+}
+
+init()
+
+
+
diff --git a/jsconfig.json b/jsconfig.json
new file mode 100644
index 0000000..2a892f4
--- /dev/null
+++ b/jsconfig.json
@@ -0,0 +1,6 @@
+{
+ "compilerOptions":{
+ "experimentalDecorators":true,
+ "jsx": "preserve"
+ }
+}
\ No newline at end of file
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..7d59d22
--- /dev/null
+++ b/package.json
@@ -0,0 +1,116 @@
+{
+ "name": "EICS",
+ "version": "1.0.0",
+ "scripts": {
+ "dev": "vue-cli-service serve --open",
+ "build": "vue-cli-service build",
+ "build:prod": "vue-cli-service build --mode prod",
+ "build:uat": "vue-cli-service build --mode uat",
+ "build:usa": "vue-cli-service build --mode usa",
+ "pre": "vue-cli-service build --mode pre",
+ "i18n": "npm run i18n:zh && npm run i18n:en",
+ "i18n:zh": "node i18nGenerate.js lang=zh keyCol=5 valCol=6",
+ "i18n:en": "node i18nGenerate.js lang=en keyCol=5 valCol=7"
+ },
+ "dependencies": {
+ "@cornerstonejs/calculate-suv": "^1.1.0",
+ "@cornerstonejs/core": "^1.27.4",
+ "@cornerstonejs/dicom-image-loader": "^1.27.4",
+ "@cornerstonejs/streaming-image-volume-loader": "1.23.2",
+ "@cornerstonejs/tools": "^1.27.4",
+ "@ffmpeg/core": "^0.10.0",
+ "@ffmpeg/ffmpeg": "^0.10.1",
+ "@microsoft/signalr": "^6.0.8",
+ "@riophae/vue-treeselect": "0.4.0",
+ "ali-oss": "^6.17.1",
+ "axios": "0.18.1",
+ "babel-eslint": "7.2.3",
+ "copy-webpack-plugin": "^4.5.2",
+ "core-js": "^3.8.3",
+ "cornerstone-core": "^2.3.0",
+ "cornerstone-math": "^0.1.8",
+ "cornerstone-tools": "^6.0.8",
+ "cornerstone-wado-image-loader": "^3.1.2",
+ "dcmjs": "^0.29.8",
+ "dicom-parser": "^1.8.9",
+ "dicomedit": "^0.1.0",
+ "echarts": "^4.8.0",
+ "element-ui": "^2.15.8",
+ "exceljs": "^4.1.0",
+ "file-saver": "^2.0.5",
+ "hammerjs": "^2.0.8",
+ "html2canvas": "^1.4.1",
+ "js-md5": "^0.7.3",
+ "jszip": "^3.7.1",
+ "moment": "^2.27.0",
+ "node-polyfill-webpack-plugin": "^2.0.1",
+ "node-sass": "^4.14.1",
+ "normalize.css": "7.0.0",
+ "nprogress": "0.2.0",
+ "path-to-regexp": "2.4.0",
+ "pdfobject": "^2.2.8",
+ "popper.js": "^1.16.1",
+ "sass-loader": "^8.0.0",
+ "screenfull": "^4.2.0",
+ "sortablejs": "^1.15.0",
+ "v-viewer": "^1.6.4",
+ "vcrontab": "^0.3.5",
+ "vue": "^2.6.11",
+ "vue-clipboard2": "^0.3.1",
+ "vue-contextmenujs": "^1.3.13",
+ "vue-count-to": "^1.0.13",
+ "vue-i18n": "^8.7.0",
+ "vue-pdf": "^4.3.0",
+ "vue-puzzle-vcode": "^1.1.10",
+ "vue-router": "3.0.6",
+ "vue-seamless-scroll": "^1.1.21",
+ "vuedraggable": "^2.24.3",
+ "vuex": "3.1.0",
+ "webpack-aliyun-oss": "^0.4.9"
+ },
+ "devDependencies": {
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6",
+ "@babel/plugin-proposal-optional-chaining": "^7.21.0",
+ "@vue/cli-plugin-babel": "~4.5.4",
+ "@vue/cli-plugin-eslint": "~4.5.4",
+ "@vue/cli-service": "~4.5.4",
+ "autoprefixer": "^9.5.1",
+ "aws-sdk": "^2.1532.0",
+ "babel-eslint": "^10.1.0",
+ "chalk": "2.4.2",
+ "connect": "3.6.6",
+ "eslint": "^6.7.2",
+ "eslint-plugin-vue": "^6.2.2",
+ "html-webpack-plugin": "3.2.0",
+ "minio": "^7.1.3",
+ "node-xlsx": "^0.21.0",
+ "runjs": "^4.3.2",
+ "script-ext-html-webpack-plugin": "2.1.3",
+ "script-loader": "0.7.2",
+ "serve-static": "^1.13.2",
+ "svg-sprite-loader": "4.1.3",
+ "svgo": "1.2.2",
+ "vue-template-compiler": "^2.6.11"
+ },
+ "eslintConfig": {
+ "root": true,
+ "env": {
+ "node": true
+ },
+ "extends": [
+ "plugin:vue/essential"
+ ],
+ "parserOptions": {
+ "parser": "babel-eslint"
+ },
+ "rules": {}
+ },
+ "engines": {
+ "node": ">=8.9",
+ "npm": ">= 3.0.0"
+ },
+ "browserslist": [
+ "> 1%",
+ "last 2 versions"
+ ]
+}
diff --git a/postcss.config.js b/postcss.config.js
new file mode 100644
index 0000000..6101901
--- /dev/null
+++ b/postcss.config.js
@@ -0,0 +1,7 @@
+// eslint-disable-next-line no-undef
+module.exports = {
+ 'plugins': {
+ // to edit target browsers: use "browserslist" field in package.json
+ 'autoprefixer': {}
+ }
+}
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000..70e9d37
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..400a6a9
--- /dev/null
+++ b/public/index.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+ <%= webpackConfig.name %>
+ <% if (eval(process.env.VUE_APP_LOGIN_FOR_PERMISSION)) { %>
+
+ <% } else { %>
+
+ <% } %>
+
+
+
+
+
+
+
+
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000..0cfc173
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,199 @@
+
+
+
+
+ i18n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {$set(scope.row, 'Value', e)}" size="mini">
+
+
+
+
+ {$set(scope.row, 'ValueCN', e)}" size="mini">
+
+
+
+
+ 取消
+
+ 保存
+
+
+
+
+
+
+
+
diff --git a/src/api/admin.js b/src/api/admin.js
new file mode 100644
index 0000000..361ec37
--- /dev/null
+++ b/src/api/admin.js
@@ -0,0 +1,279 @@
+import request from '@/utils/request'
+/** =========================user=======================**/
+export function getUserList(param) {
+ return request({
+ url: '/user/getUserList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getUserTypeList() {
+ return request({
+ url: `/UserTypeRole/getUserTypeList/0`,
+ method: 'get'
+ })
+}
+
+export function updateUserState(userId, state) {
+ return request({
+ url: `/user/updateUserState/${userId}/${state}`,
+ method: 'post'
+ })
+}
+
+export function getInstitutionList(typeId) {
+ return request({
+ url: `/institution/getInstitutionList/${typeId}`,
+ method: 'get'
+ })
+}
+
+export function addUser(param) {
+ return request({
+ url: `/user/addUser`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateUser(param) {
+ return request({
+ url: `/user/updateUser`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function getUser(userId) {
+ return request({
+ url: `/user/getUser/${userId}`,
+ method: 'get'
+ })
+}
+
+export function deleteSysUser(userId) {
+ return request({
+ url: `/user/deleteUser/${userId}`,
+ method: 'delete'
+ })
+}
+
+export function getRoleList(userId, pageIndex, pageSize) {
+ return request({
+ url: `/role/getRoleList/${userId}/${pageIndex}/${pageSize}`,
+ method: 'get'
+ })
+}
+
+export function getUserRoles(userId) {
+ return request({
+ url: `/user/getUserRoles/${userId}`,
+ method: 'get'
+ })
+}
+
+export function UpdateUserRole(param) {
+ return request({
+ url: `/role/UpdateUserRole`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function resetPassword(userId) {
+ return request({
+ url: `/user/resetPassword/${userId}`,
+ method: 'get'
+ })
+}
+
+export function modifyPassword(param) {
+ return request({
+ url: `/user/modifyPassword`,
+ method: 'post',
+ data: param
+ })
+}
+
+/** =========================role=======================**/
+export function getRolesList(pageIndex, pageSize) {
+ return request({
+ url: `/role/getRoleList/${pageIndex}/${pageSize}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateRole(param) {
+ return request({
+ url: `/role/addOrUpdateRole`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteRole(roleId) {
+ return request({
+ url: `/role/deleteRole/${roleId}`,
+ method: 'delete'
+ })
+}
+
+export function getRoleMenuFunction(roleId) {
+ return request({
+ url: `/menu/getRoleMenuFunction/${roleId}`,
+ method: 'get'
+ })
+}
+
+export function getRoleFunction(roleId, parentId) {
+ return request({
+ url: `/menu/getRoleFunction/${roleId}/${parentId}`,
+ method: 'get'
+ })
+}
+
+export function updateRoleMenu(param) {
+ return request({
+ url: `/menu/updateRoleMenu`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateRoleFunction(param) {
+ return request({
+ url: `/menu/updateRoleFunction`,
+ method: 'post',
+ data: param
+ })
+}
+/** =========================menu=======================**/
+
+export function getMenuFunction() {
+ return request({
+ url: `/menu/getMenuFunction`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateMenu(param) {
+ return request({
+ url: `/menu/addOrUpdateMenu`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteMenuFunction(menuFunctionId) {
+ return request({
+ url: `/menu/deleteMenuFunction/${menuFunctionId}`,
+ method: 'delete'
+ })
+}
+/** =========================log=======================**/
+
+export function getLogList(param) {
+ return request({
+ url: `/log/getLogList`,
+ method: 'post',
+ data: param
+ })
+}
+
+/** =========================UserType=======================**/
+export function getUserTypeRoleList(param) {
+ return request({
+ url: `/UserTypeRole/getUserTypeRoleList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateUserType(param) {
+ return request({
+ url: `/UserTypeRole/addOrUpdateUserTypeRole`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteUserTypeRole(userTypeRoleId) {
+ return request({
+ url: `/UserTypeRole/deleteUserTypeRole/${userTypeRoleId}`,
+ method: 'delete'
+ })
+}
+
+export function getUserTypeListByUserType(userType) {
+ return request({
+ url: `/UserTypeRole/getUserTypeList/${userType}`,
+ method: 'get'
+ })
+}
+
+export function initSetUserNameAndPwd(params) {
+ return request({
+ url: `/User/initSetUserNameAndPwd?NewUserName=${params.NewUserName}&UserId=${params.UserId}&NewPwd=${params.NewPwd}&access_token=${params.access_token}`,
+ method: 'get'
+ })
+}
+
+export function getPublishLogList(param) {
+ return request({
+ url: `/PublishLog/getPublishLogList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdatePublishLog(param) {
+ return request({
+ url: `/PublishLog/addOrUpdatePublishLog`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePublishLog(publishLogId) {
+ return request({
+ url: `/PublishLog/deletePublishLog/${publishLogId}`,
+ method: 'delete'
+ })
+}
+
+export function getInternationalizationList(param) {
+ return request({
+ url: `/Internationalization/getInternationalizationList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getFrontInternationalizationList() {
+ return request({
+ url: `/Internationalization/getFrontInternationalizationList`,
+ method: 'get'
+ })
+}
+export function addOrUpdateInternationalization(param) {
+ return request({
+ url: `/Internationalization/addOrUpdateInternationalization`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteInternationalization(internationalizationId) {
+ return request({
+ url: `/Internationalization/deleteInternationalization/${internationalizationId}`,
+ method: 'delete'
+ })
+}
+
+export function batchAddInternationalization(param) {
+ return request({
+ url: `/Internationalization/batchAddInternationalization`,
+ method: 'post',
+ data: param
+ })
+}
diff --git a/src/api/attachment.js b/src/api/attachment.js
new file mode 100644
index 0000000..8748283
--- /dev/null
+++ b/src/api/attachment.js
@@ -0,0 +1,58 @@
+import request from '@/utils/request'
+export function uploadFile(file, type, id) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/file/uploadFile/${type}/${id}`,
+ method: 'post',
+ data: formData
+ })
+}
+
+export function deleteAttachment(id, filePath) {
+ return request({
+ url: `/attachment/deleteAttachment`,
+ method: 'delete',
+ data: { Id: id, Path: filePath }
+ })
+}
+
+export function getAttachmentByType(doctorId, type) {
+ return request({
+ url: `/attachment/getAttachmentByType/${doctorId}/${type}`,
+ method: 'get'
+ })
+}
+
+export function saveAttachments(param) {
+ return request({
+ url: `/attachment/saveAttachments`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setOfficial(doctorId, attachmentId, language) {
+ return request({
+ url: `/attachment/setOfficial/${doctorId}/${attachmentId}/${language}`,
+ method: 'post'
+ })
+}
+
+export function uploadNonDoctorFile(file, type, config = {}) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/file/uploadNonDoctorFile/${type}`,
+ method: 'post',
+ data: formData,
+ ...config
+ })
+}
+
+export function setLanguageForResume(doctorId, attachmentId, language) {
+ return request({
+ url: `/attachment/setLanguage/${doctorId}/${attachmentId}/${language}`,
+ method: 'post'
+ })
+}
diff --git a/src/api/dashboard.js b/src/api/dashboard.js
new file mode 100644
index 0000000..7dbedf1
--- /dev/null
+++ b/src/api/dashboard.js
@@ -0,0 +1,56 @@
+import request from '@/utils/request'
+export function getReadingDataByType() {
+ return request({
+ url: '/statistics/getReadingDataByType',
+ method: 'get'
+ })
+}
+
+export function getReadingDataByMonth(monthCount) {
+ const url = `/statistics/getReadingDataByMonth/${monthCount}`
+ return request({
+ url: url,
+ method: 'get'
+ })
+}
+
+export function getReadingDataRank(topCount) {
+ const url = `/statistics/GetReadingDataRank/${topCount}`
+ return request({
+ url: url,
+ method: 'get'
+ })
+}
+
+export function getReviewersByRank() {
+ const url = `/statistics/getReviewersByRank`
+ return request({
+ url: url,
+ method: 'get'
+ })
+}
+
+export function getEnrollDataByQuarter(type, monthCount) {
+ const url = `/statistics/GetEnrollDataByQuarter/${type}/${monthCount}`
+ return request({
+ url: url,
+ method: 'get'
+ })
+}
+
+export function getTrialCountRank(topCount) {
+ const url = `/statistics/getTrialCountRank/${topCount}`
+ return request({
+ url: url,
+ method: 'get'
+ })
+}
+
+export function getLatestWorkLoadList(searchCount) {
+ const url = `/statistics/getLatestWorkLoadList/${searchCount}`
+ return request({
+ url: url,
+ method: 'get'
+ })
+}
+
diff --git a/src/api/dictionary.js b/src/api/dictionary.js
new file mode 100644
index 0000000..fec6388
--- /dev/null
+++ b/src/api/dictionary.js
@@ -0,0 +1,1045 @@
+import request from '@/utils/request'
+import requestDownload from '@/utils/request-download'
+
+function getParams(obj) {
+ let result = '';
+ let item;
+ for (item in obj) {
+ if (obj[item] && String(obj[item])) {
+ result += `&${item}=${obj[item]}`;
+ }
+ }
+ if (result) {
+ result = '?' + result.slice(1);
+ }
+ return result;
+}
+
+export function getDicTree() {
+ return request({
+ url: '/dictionary/getDicTree',
+ method: 'get'
+ })
+}
+
+export function getDictionarySelectList(param) {
+ return request({
+ url: '/dictionary/getDictionarySelectList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateDictionary(param) {
+ return request({
+ url: '/dictionary/addOrUpdateDictionary',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteDictionary(id) {
+ return request({
+ url: `/dictionary/deleteDictionary/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getHospitalPageList(param) {
+ return request({
+ url: '/hospital/getHospitalPageList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateHospital(param) {
+ return request({
+ url: '/hospital/addOrUpdateHospital',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteHospital(hospitalId) {
+ return request({
+ url: `/hospital/deleteHospital/${hospitalId}`,
+ method: 'delete'
+ })
+}
+
+export function getSiteList(param) {
+ return request({
+ url: '/site/getSiteList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateSite(param) {
+ return request({
+ url: '/site/addOrUpdateSite',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteSite(siteId) {
+ return request({
+ url: `/site/deleteSite/${siteId}`,
+ method: 'delete'
+ })
+}
+
+export function getCROPageList(param) {
+ return request({
+ url: '/cro/getCROList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateCro(param) {
+ return request({
+ url: '/cro/addOrUpdateCro',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteCROCompany(croCompanyId) {
+ return request({
+ url: `/cro/deleteCro/${croCompanyId}`,
+ method: 'delete'
+ })
+}
+
+export function getSponsorPageList(param) {
+ return request({
+ url: '/sponsor/getSponsorList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateSponsor(param) {
+ return request({
+ url: '/sponsor/addOrUpdateSponsor',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteSponsor(sponsorId) {
+ return request({
+ url: `/sponsor/deleteSponsor/${sponsorId}`,
+ method: 'delete'
+ })
+}
+
+export function getQaTemplateList(param) {
+ return request({
+ url: '/QATemplate/GetQaTemplateList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateQATemplate(param) {
+ return request({
+ url: '/QATemplate/AddOrUpdateQATemplate',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteQATemplate(qaTemplateId) {
+ return request({
+ url: `/QATemplate/DeleteQATemplate/${qaTemplateId}`,
+ method: 'delete'
+ })
+}
+
+export function getQaTemplateConfigList(qaTemplateId, modalityId) {
+ return request({
+ url: `/QATemplate/GetQATemplateConfigedList/${qaTemplateId}/${modalityId}`,
+ method: 'get'
+ })
+}
+
+export function configQATemplateItem(param) {
+ return request({
+ url: '/QATemplate/ConfigQATemplateItem',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getQATemplateItemList(param) {
+ return request({
+ url: '/QATemplate/GetQATemplateItemList',
+ method: 'post',
+ data: param
+ })
+}
+export function addOrUpdateQATemplateItem(param) {
+ return request({
+ url: '/QATemplate/AddOrUpdateQATemplateItem',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteQATemplateItem(qaTemplateItemId) {
+ return request({
+ url: `/QATemplate/DeleteQATemplateItem/${qaTemplateItemId}`,
+ method: 'delete'
+ })
+}
+
+export function getQCQuestionConfigureList(param) {
+ return request({
+ url: `/QCQuestionConfigure/getQCQuestionConfigureList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateQCQuestionConfigure(param) {
+ return request({
+ url: `/QCQuestionConfigure/addOrUpdateQCQuestionConfigure`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteQCQuestionConfigure(qcQuestionConfigureId) {
+ return request({
+ url: `/QCQuestionConfigure/deleteQCQuestionConfigure/${qcQuestionConfigureId}`,
+ method: 'delete'
+ })
+}
+export function getSystemDocumentList(param) {
+ return request({
+ url: `/SystemDocument/getSystemDocumentList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateSystemDocument(param) {
+ return request({
+ url: `/SystemDocument/addOrUpdateSystemDocument`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteSystemDocument(id) {
+ return request({
+ url: `/SystemDocument/deleteSystemDocument/${id}`,
+ method: 'delete'
+ })
+}
+export function abandonSystemDocument(id) {
+ return request({
+ url: `/SystemDocument/AbandonSystemDocument/${id}`,
+ method: 'delete'
+ })
+}
+
+export function uploadSystemDoc(file) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/TrialDocument/UploadSystemDoc`,
+ method: 'post',
+ data: formData
+ })
+}
+
+export function getCommonDocumentList(param) {
+ return request({
+ url: `/CommonDocument/getCommonDocumentList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateCommonDocument(param) {
+ return request({
+ url: `/CommonDocument/addOrUpdateCommonDocument`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function uploadCommonDoc(file) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/CommonDocument/UploadCommonDoc`,
+ method: 'post',
+ data: formData
+ })
+}
+
+export function DownloadCommonDoc(code) {
+ return requestDownload({
+ url: `/CommonDocument/DownloadCommonDoc?code=${code}`,
+ method: 'get',
+ responseType: 'blob'
+ })
+}
+
+export function DownloadSystemClinicalFile(clinicalDataSystemSetId) {
+ return requestDownload({
+ url: `/CommonDocument/DownloadSystemClinicalFile?clinicalDataSystemSetId=${clinicalDataSystemSetId}`,
+ method: 'get',
+ responseType: 'blob'
+ })
+}
+
+export function getEmailNoticeConfigList(param) {
+ return request({
+ url: `/EmailNoticeConfig/getEmailNoticeConfigList`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteEmailNoticeConfig(id) {
+ return request({
+ url: `/EmailNoticeConfig/deleteEmailNoticeConfig/${id}`,
+ method: 'delete'
+ })
+}
+export function addOrUpdateEmailNoticeConfigList(param) {
+ return request({
+ url: `/EmailNoticeConfig/addOrUpdateEmailNoticeConfig`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getBasicDataSelect(param) {
+ return request({
+ url: `/SystemBasicData/getBasicDataSelect`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSystemBasicDataList(param) {
+ return request({
+ url: `/SystemBasicData/getSystemBasicDataList`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteSystemBasicData(id) {
+ return request({
+ url: `/SystemBasicData/deleteSystemBasicData/${id}`,
+ method: 'delete'
+ })
+}
+export function addOrUpdateSystemBasicData(param) {
+ return request({
+ url: `/SystemBasicData/addOrUpdateSystemBasicData`,
+ method: 'post',
+ data: param
+ })
+}
+export function getChildList(parentId) {
+ return request({
+ url: `/SystemBasicData/getChildList/${parentId}`,
+ method: 'get'
+ })
+}
+
+export function getSystemBasicData(code) {
+ return request({
+ url: `/SystemBasicData/getSystemBasicData/${code}`,
+ method: 'get'
+ })
+}
+
+export function getSystemAnonymizationList(param) {
+ return request({
+ url: `/SystemAnonymization/getSystemAnonymizationList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateSystemAnonymization(param) {
+ return request({
+ url: `/SystemAnonymization/addOrUpdateSystemAnonymization`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteSystemAnonymization(id) {
+ return request({
+ url: `/SystemAnonymization/deleteSystemAnonymization/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getBasicDicList(param) {
+ return request({
+ url: `/Dictionary/getBasicDicList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateBasicDic(param) {
+ return request({
+ url: `/Dictionary/addOrUpdateBasicDic`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDictionaryChildList(id) {
+ return request({
+ url: `/Dictionary/getChildList/${id}`,
+ method: 'get'
+ })
+}
+
+export function getClinicalDataSetList(param) {
+ return request({
+ url: `/ClinicalDataSet/getSystemClinicalDataSystemSetList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateClinicalDataSet(param) {
+ return request({
+ url: `/ClinicalDataSet/addOrUpdateClinicalDataSystemSet`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteClinicalSetData(id) {
+ return request({
+ url: `/ClinicalDataSet/deleteClinicalSystemSetData/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getReadingQuestionCriterionSystemList(param) {
+ return request({
+ url: '/ReadingQuestion/getReadingQuestionCriterionSystemList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function setSystemReadingQuestionCriterionIsIsEnable(param) {
+ return request({
+ url: '/ReadingQuestion/setSystemReadingQuestionCriterionIsIsEnable',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingQuestionSystemList(param) {
+ return request({
+ url: '/ReadingQuestion/getReadingQuestionSystemList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateReadingQuestionSystem(param) {
+ return request({
+ url: '/ReadingQuestion/addOrUpdateReadingQuestionSystem',
+ method: 'post',
+ data: param
+ })
+}
+export function deleteReadingQuestionSystem(readingQuestionSystemId) {
+ return request({
+ url: `/ReadingQuestion/deleteReadingQuestionSystem/${readingQuestionSystemId}`,
+ method: 'delete'
+ })
+}
+
+export function getSystemCriterionOtherQuestion(param) {
+ return request({
+ url: `/ReadingQuestion/getSystemCriterionOtherQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSystemGroupNameList(param) {
+ return request({
+ url: `/ReadingQuestion/getSystemGroupNameList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setSystemReadingQuestionCriterionIsCompleteConfig(param) {
+ return request({
+ url: `/ReadingQuestion/setSystemReadingQuestionCriterionIsCompleteConfig`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingMedicineSystemQuestionList(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/getReadingMedicineSystemQuestionList`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteReadingMedicineSystemQuestion(id) {
+ return request({
+ url: `/ReadingMedicineQuestion/deleteReadingMedicineSystemQuestion/${id}`,
+ method: 'delete'
+ })
+}
+export function addOrUpdateReadingMedicineSystemQuestion(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/addOrUpdateReadingMedicineSystemQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSystemReadingQuestion(param) {
+ return request({
+ url: `/ReadingImageTask/getSystemReadingQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getQCQuestionSelectList(param) {
+ return request({
+ url: `/QCQuestionConfigure/GetQCQuestionSelectList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getQuestionView(param) {
+ return request({
+ url: `/QCQuestionConfigure/getQuestionView`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingMedicineSystemOtherQuestion(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/getReadingMedicineSystemOtherQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getOrganInfoList(param) {
+ return request({
+ url: `/OrganInfo/getOrganInfoList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getOrganPageList(param) {
+ return request({
+ url: `/OrganInfo/getOrganPageList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateOrganInfo(param) {
+ return request({
+ url: `/OrganInfo/addOrUpdateOrganInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteOrganInfo(id) {
+ return request({
+ url: `/OrganInfo/deleteOrganInfo/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getCriterionNidusList(param) {
+ return request({
+ url: `/OrganInfo/getCriterionNidusList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateCriterionNidus(param) {
+ return request({
+ url: `/OrganInfo/addOrUpdateCriterionNidus`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteCriterionNidus(id) {
+ return request({
+ url: `/OrganInfo/deleteCriterionNidus/${id}`,
+ method: 'delete'
+ })
+}
+
+export function copySystemCriterionData(param) {
+ return request({
+ url: `/ReadingQuestion/copySystemCriterionData`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTumorAssessmentList(param) {
+ return request({
+ url: `/ReadingQuestion/getTumorAssessmentList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTumorAssessmentPageList(param) {
+ return request({
+ url: `/ReadingQuestion/getTumorAssessmentPageList`,
+ method: 'post',
+ data: param
+ })
+}
+export function addOrUpdateTumorAssessment(param) {
+ return request({
+ url: `/ReadingQuestion/addOrUpdateTumorAssessment`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteTumorAssessment(id) {
+ return request({
+ url: `/ReadingQuestion/deleteTumorAssessment/${id}`,
+ method: 'delete'
+ })
+}
+export function addOrUpdateReadingQuestionCriterionSystem(param) {
+ return request({
+ url: `/ReadingQuestion/addOrUpdateReadingQuestionCriterionSystem`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteReadingQuestionCriterionSystem(id) {
+ return request({
+ url: `/ReadingQuestion/deleteReadingQuestionCriterionSystem/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getBasicConfigSelect(searchKey) {
+ return request({
+ url: `/Dictionary/getBasicConfigSelect?searchKey=${searchKey}`,
+ method: 'get'
+ })
+}
+
+export function getSystemCriterionSelectList(param) {
+ return request({
+ url: `/ClinicalDataSet/getSystemCriterionSelectList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getAssessType(param) {
+ return request({
+ url: `/ReadingQuestion/getAssessType`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setAssessType(param) {
+ return request({
+ url: `/ReadingQuestion/setAssessType`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setDictionaryFollowVisitUse(param) {
+ return request({
+ url: `/ReadingQuestion/setDictionaryFollowVisitUse`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setDictionaryBaseLineUse(param) {
+ return request({
+ url: `/ReadingQuestion/setDictionaryBaseLineUse`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSystemOncologyInfo(param) {
+ return request({
+ url: `/ReadingQuestion/getSystemOncologyInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setSystemOncologyInfo(param) {
+ return request({
+ url: `/ReadingQuestion/setSystemOncologyInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCriterionDictionaryList(param) {
+ return request({
+ url: `/Dictionary/getCriterionDictionaryList?SystemCriterionId=${param.SystemCriterionId}`,
+ method: 'get'
+ })
+}
+
+export function getTrialCriterionDictionaryList(param) {
+ return request({
+ url: `/Dictionary/getTrialCriterionDictionaryList?TrialCriterionId=${param.TrialCriterionId}`,
+ method: 'get'
+ })
+}
+
+export function setCriterionDictionary(params) {
+ return request({
+ url: `/ReadingQuestion/setCriterionDictionary`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function setSystemGlobalInfo(params) {
+ return request({
+ url: `/ReadingQuestion/setSystemGlobalInfo`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSystemGlobalInfo(params) {
+ return request({
+ url: `/ReadingQuestion/getSystemGlobalInfo`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getCriterionDictionary(params) {
+ return request({
+ url: `/Dictionary/getCriterionDictionary`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addSystemCriterionDictionaryCode(params) {
+ return request({
+ url: `/ReadingQuestion/addSystemCriterionDictionaryCode`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteSystemCriterionDictionary(params) {
+ return request({
+ url: `/ReadingQuestion/deleteSystemCriterionDictionary`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function synchronizeSystemOrgan(params) {
+ return request({
+ url: `/OrganInfo/synchronizeSystemOrgan`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function editCriterionDictionary(params) {
+ return request({
+ url: `/ReadingQuestion/editCriterionDictionary`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSystemClinicalQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getSystemClinicalQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteSystemClinicalQuestion(Id) {
+ return request({
+ url: `/ClinicalQuestion/deleteSystemClinicalQuestion/${Id}`,
+ method: 'post'
+ })
+}
+
+export function addOrUpdateSystemClinicalQuestion(params) {
+ return request({
+ url: `/ClinicalQuestion/addOrUpdateSystemClinicalQuestion`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSystemClinicalOtherQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getSystemClinicalOtherQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSystemClinicalGroupQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getSystemClinicalGroupQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSystemClinicalTableQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getSystemClinicalTableQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialClinicalTableQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getTrialClinicalTableQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteSystemClinicalTableQuestion(id) {
+ return request({
+ url: `/ClinicalQuestion/deleteSystemClinicalTableQuestion/${id}`,
+ method: 'post'
+ })
+}
+
+export function deleteTrialClinicalTableQuestion(id) {
+ return request({
+ url: `/ClinicalQuestion/deleteTrialClinicalTableQuestion/${id}`,
+ method: 'post'
+ })
+}
+
+export function addOrUpdateSystemClinicalTableQuestion(params) {
+ return request({
+ url: `/ClinicalQuestion/addOrUpdateSystemClinicalTableQuestion`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addOrUpdateTrialClinicalTableQuestion(params) {
+ return request({
+ url: `/ClinicalQuestion/addOrUpdateTrialClinicalTableQuestion`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function applySystemClinical(params) {
+ return request({
+ url: `/ClinicalDataSet/applySystemClinical`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialClinicalQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getTrialClinicalQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteTrialClinicalQuestion(id) {
+ return request({
+ url: `/ClinicalQuestion/deleteTrialClinicalQuestion/${id}`,
+ method: 'post'
+ })
+}
+
+export function applyTrialClinical(params) {
+ return request({
+ url: `/ClinicalDataSet/applyTrialClinical`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addOrUpdateTrialClinicalQuestion(params) {
+ return request({
+ url: `/ClinicalQuestion/addOrUpdateTrialClinicalQuestion`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialClinicalOtherQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getTrialClinicalOtherQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialClinicalGroupQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getTrialClinicalGroupQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addBasicDicAndChild(params) {
+ return request({
+ url: `/Dictionary/addBasicDicAndChild`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getClinicalCalculateQuestions(params) {
+ return request({
+ url: `/ClinicalQuestion/getClinicalCalculateQuestions`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialClinicalQuestionCalculateRelation(params) {
+ return request({
+ url: `/ClinicalQuestion/getTrialClinicalQuestionCalculateRelation`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getClinicalQuestionFormList(params) {
+ return request({
+ url: `/ClinicalAnswer/getClinicalQuestionFormList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getClinicalFormInfo(params) {
+ return request({
+ url: `/ClinicalAnswer/getClinicalFormInfo`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function Upload(params, type) {
+ return request({
+ url: `/SystemFile/Upload?fileType=${type}`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialUserIdSelectList(trialId) {
+ return request({
+ url: `/TrialEmailNoticeConfig/getTrialUserIdSelectList?TrialEmailNoticeConfigId=${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getSysEmailNoticeConfigList(params) {
+ return request({
+ url: `/TrialEmailNoticeConfig/getSysEmailNoticeConfigList${getParams(params)}`,
+ method: 'get'
+ })
+}
+
+
+export function batchAddSysEmailConfig(params) {
+ return request({
+ url: `/TrialEmailNoticeConfig/batchAddSysEmailConfig`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteTrialEmailNoticeConfig(trialEmailNoticeConfigId) {
+ return request({
+ url: `/TrialEmailNoticeConfig/deleteTrialEmailNoticeConfig/${trialEmailNoticeConfigId}`,
+ method: 'delete'
+ })
+}
+
+export function addOrUpdateTrialEmailNoticeConfig(params) {
+ return request({
+ url: `/TrialEmailNoticeConfig/addOrUpdateTrialEmailNoticeConfig`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSystemClinicalOtherTableQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getSystemClinicalOtherTableQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialClinicalOtherTableQuestionList(params) {
+ return request({
+ url: `/ClinicalQuestion/getTrialClinicalOtherTableQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteCommonDocument(commonDocumentId) {
+ return request({
+ url: `/CommonDocument/deleteCommonDocument/${commonDocumentId}`,
+ method: 'delete'
+ })
+}
+
diff --git a/src/api/dictionary/checkConfig.js b/src/api/dictionary/checkConfig.js
new file mode 100644
index 0000000..af74b93
--- /dev/null
+++ b/src/api/dictionary/checkConfig.js
@@ -0,0 +1,78 @@
+import request from '@/utils/request'
+
+export function getFrontAuditConfigList(param) {
+ return request({
+ url: '/FrontAuditConfig/getFrontAuditConfigList',
+ method: 'post',
+ data: param
+ })
+}
+export function addOrUpdateFrontAuditConfig(param) {
+ return request({
+ url: `/FrontAuditConfig/addOrUpdateFrontAuditConfig`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteFrontAuditConfig(frontAuditConfigId) {
+ return request({
+ url: `/FrontAuditConfig/deleteFrontAuditConfig/${frontAuditConfigId}`,
+ method: 'delete'
+ })
+}
+
+export function copyOtherToThisItem(param) {
+ return request({
+ url: `/FrontAuditConfig/copyOtherToThisItem`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getAuditConfigChildList(param) {
+ return request({
+ url: `/FrontAuditConfig/getAuditConfigChildList?frontAuditConfigId=${param}`,
+ method: 'get'
+
+ })
+}
+
+export function changeFrontAuditSort(param) {
+ return request({
+ url: `/FrontAuditConfig/changeFrontAuditSort`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getModuleTypeDescriptionList(param) {
+ return request({
+ url: `${param === '' ? '/FrontAuditConfig/getModuleTypeDescriptionList' : '/FrontAuditConfig/getModuleTypeDescriptionList?moduleTypeId=' + param}`,
+ method: 'get'
+ })
+}
+
+export function setInspectionEnumValue(param) {
+ return request({
+ url: `/FrontAuditConfig/SetInspectionEnumValue`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function copyFrontAuditConfigItem(param) {
+ return request({
+ url: `/FrontAuditConfig/copyFrontAuditConfigItem`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function fullyReplicated(param) {
+ return request({
+ url: `/FrontAuditConfig/fullyReplicated`,
+ method: 'post',
+ data: param
+ })
+}
+
diff --git a/src/api/dictionary/dictionary.js b/src/api/dictionary/dictionary.js
new file mode 100644
index 0000000..20c8861
--- /dev/null
+++ b/src/api/dictionary/dictionary.js
@@ -0,0 +1,53 @@
+import request from '@/utils/request'
+
+export function getDictionary(param) {
+ return request({
+ url: '/Dictionary/getDictionary',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getBasicDataSelect(searchKey) {
+ return request({
+ url: `/Dictionary/getBasicDataSelect?searchKey=${searchKey}`,
+ method: 'get'
+ })
+}
+export function getBasicDataSelects(param) {
+ return request({
+ url: `/Dictionary/getBasicDataSelect`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getBasicDataAllSelect(params) {
+ return request({
+ url: params ? `/Dictionary/getBasicDataAllSelect?TrialReadingCriterionId=${params}` : `/Dictionary/getBasicDataAllSelect`,
+ method: 'get'
+ })
+}
+
+export function setCriterionDictionary(params) {
+ return request({
+ url: `/ReadingQuestion/setCriterionDictionary`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getFrontInternationalizationList(params) {
+ return request({
+ url: `/Internationalization/getFrontInternationalizationList`,
+ method: 'get',
+ })
+}
+
+export function batchAddOrUpdateFrontInternationalization(params) {
+ return request({
+ url: `/Internationalization/batchAddOrUpdateFrontInternationalization`,
+ method: 'post',
+ data: params
+ })
+}
diff --git a/src/api/export.js b/src/api/export.js
new file mode 100644
index 0000000..5ff69d8
--- /dev/null
+++ b/src/api/export.js
@@ -0,0 +1,162 @@
+import request from '@/utils/request'
+import requestDownload from '@/utils/request-download'
+
+export function cRCVisitList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/cRCVisitList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getQCChallengeList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getQCChallengeList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getSubjectList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getSubjectList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getSubjectReadingPeriod_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getSubjectReadingPeriod_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getReadingPeriodList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getReadingPeriodList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getDicomAndNoneDicomStudyList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getDicomAndNoneDicomStudyList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getConsistencyVerificationList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getConsistencyVerificationList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getReadingTaskList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getReadingTaskList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getReReadingTaskList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getReReadingTaskList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getMedicalReviewTaskList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getMedicalReviewTaskList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getSelfAnalysisTaskList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getSelfAnalysisTaskList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getGroupAnalysisTaskList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getGroupAnalysisTaskList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getTrialReadingCriterionCanExportDocumentList(param) {
+ return request({
+ url: `/ExcelExport/getTrialReadingCriterionCanExportDocumentList?TrialReadingCriterionId=${param.TrialReadingCriterionId}`,
+ method: 'get'
+ })
+}
+
+export function getOverallTumorEvaluationList_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getOverallTumorEvaluationList_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getEvaluationOfTumorEfficacy_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getEvaluationOfTumorEfficacy_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getDetailedOfEvaluatedLesion_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getDetailedOfEvaluatedLesion_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getStudyUploadMonitor_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getStudyUploadMonitor_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getSubjectProgress_Export(param) {
+ return requestDownload({
+ url: '/ExcelExport/getSubjectProgress_Export',
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
diff --git a/src/api/financials.js b/src/api/financials.js
new file mode 100644
index 0000000..8c1d6be
--- /dev/null
+++ b/src/api/financials.js
@@ -0,0 +1,282 @@
+import request from '@/utils/request'
+export function getMonthlyPaymentList(param) {
+ return request({
+ url: '/financial/getMonthlyPaymentList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReviewersPaymentDetailList(param) {
+ return request({
+ url: '/financial/getReviewersMonthlyPaymentDetail',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getMonthlyPaymentDetailList(paymentId, doctorId, yearMonth) {
+ return request({
+ url: `/financial/getMonthlyPaymentDetailList/${paymentId}/${doctorId}/${yearMonth}`,
+ method: 'post'
+ })
+}
+
+export function getMonthlyPayroll(reviewerIds) {
+ return request({
+ url: `/financial/getLaborPaymentList`,
+ method: 'post',
+ data: reviewerIds
+ })
+}
+
+export function lockMonthlyPayment(param) {
+ return request({
+ url: '/financial/lockMonthlyPayment',
+ method: 'post',
+ data: param
+ })
+}
+
+export function calculateMonthlyPayment(param) {
+ return request({
+ url: '/financial/calculateMonthlyPayment',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getRankPriceList(param) {
+ return request({
+ url: '/rankPrice/getRankPriceList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateRankPrice(param) {
+ return request({
+ url: '/rankPrice/addOrUpdateRankPrice',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteRankPrice(id) {
+ return request({
+ url: `/rankPrice/deleteRankPrice/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getvolumeRewardPriceList(param) {
+ return request({
+ url: '/volumeReward/getvolumeRewardPriceList',
+ method: 'post',
+ data: param
+ })
+}
+// data: {awardPriceList:param}
+export function addOrUpdatevolumeRewardPriceList(param) {
+ return request({
+ url: '/volumeReward/addOrUpdatevolumeRewardPriceList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReviewerPayInfoList(param) {
+ return request({
+ url: '/reviewerPayInfo/getReviewerPayInfoList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getRankDic() {
+ return request({
+ url: '/rankPrice/getRankDic',
+ method: 'get'
+ })
+}
+
+export function addOrUpdateReviewerPayInfo(param) {
+ return request({
+ url: '/reviewerPayInfo/addOrUpdateReviewerPayInfo',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialPaymentPriceList(param) {
+ return request({
+ url: '/trialPaymentPrice/getTrialPaymentPriceList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function uploadTrialSOW(param) {
+ return request({
+ url: '/trialPaymentPrice/uploadTrialSOW',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteTrialSOW(param) {
+ return request({
+ url: '/trialPaymentPrice/deleteTrialSOW',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateTrialPaymentPrice(param) {
+ return request({
+ url: '/trialPaymentPrice/addOrUpdateTrialPaymentPrice',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getRateList(param) {
+ return request({
+ url: '/exchangeRate/getExchangeRateList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateExchangeRate(param) {
+ return request({
+ url: '/exchangeRate/addOrUpdateExchangeRate',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteExchangeRate(id) {
+ return request({
+ url: `/exchangeRate/deleteExchangeRate/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getPaymentAdjustmentList(param) {
+ return request({
+ url: '/paymentAdjustment/getPaymentAdjustmentList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdatePaymentAdjustment(param) {
+ return request({
+ url: '/paymentAdjustment/addOrUpdatePaymentAdjustment',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePaymentAdjustment(id) {
+ return request({
+ url: `/paymentAdjustment/deletePaymentAdjustment/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getReviewerSelectList() {
+ return request({
+ url: '/paymentAdjustment/getReviewerSelectList',
+ method: 'get'
+ })
+}
+
+export function getPaymentHistoryList(param) {
+ return request({
+ url: '/financial/getPaymentHistoryList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getPaymentHistoryDetailList(param) {
+ return request({
+ url: '/financial/getPaymentHistoryDetailList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getRevenuesStatistics(param) {
+ return request({
+ url: '/financial/getRevenuesStatistics',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialRevenuesPriceList(param) {
+ return request({
+ url: '/trialRevenuesPrice/getTrialRevenuesPriceList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateTrialRevenuesPrice(param) {
+ return request({
+ url: '/trialRevenuesPrice/addOrUpdateTrialRevenuesPrice',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReviewerAnalysisList(param) {
+ return request({
+ url: '/financial/getReviewerAnalysisList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialAnalysisList(param) {
+ return request({
+ url: '/financial/getTrialAnalysisList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getRevenuesVerifyList(param) {
+ return request({
+ url: '/trialRevenuesPriceVerification/getRevenuesVerifyList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getAnalysisVerifyList(param) {
+ return request({
+ url: '/trialRevenuesPriceVerification/getAnalysisVerifyList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateEnroll(param) {
+ return request({
+ url: '/Enroll/addOrUpdateEnroll',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialDoctorList(param) {
+ return request({
+ url: '/Enroll/getTrialDoctorList',
+ method: 'post',
+ data: param
+ })
+}
diff --git a/src/api/global.js b/src/api/global.js
new file mode 100644
index 0000000..1b03477
--- /dev/null
+++ b/src/api/global.js
@@ -0,0 +1,57 @@
+import request from '@/utils/request'
+
+export function getAllDictionary() {
+ return request({
+ url: '/dictionary/getAllDictionary',
+ method: 'get'
+ })
+}
+
+export function getHospitalList() {
+ return request({
+ url: '/hospital/getHospitalList',
+ method: 'get'
+ })
+}
+
+export function getAllSponsorList() {
+ return request({
+ url: '/sponsor/getAllSponsorList',
+ method: 'get'
+ })
+}
+
+export function getAllCROList() {
+ return request({
+ url: '/cro/getAllCROList',
+ method: 'get'
+ })
+}
+export function getAllSiteList() {
+ return request({
+ url: '/site/getAllSiteList',
+ method: 'get'
+ })
+}
+
+export function getUserSystemNoticeList(param) {
+ return request({
+ url: '/SystemNotice/getUserSystemNoticeList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getUserNoticeList() {
+ return request({
+ url: '/SystemNotice/getUserNoticeList',
+ method: 'get'
+ })
+}
+
+export function setSystemNoticeHaveRead(systemNoticeId) {
+ return request({
+ url: `/SystemNotice/setSystemNoticeHaveRead/${systemNoticeId}`,
+ method: 'put'
+ })
+}
diff --git a/src/api/joinVerify/index.js b/src/api/joinVerify/index.js
new file mode 100644
index 0000000..e15ca96
--- /dev/null
+++ b/src/api/joinVerify/index.js
@@ -0,0 +1,24 @@
+import request from '@/utils/request'
+
+export function trialExternalUserJoinTrial(param) {
+ return request({
+ url: '/TrialExternalUser/trialExternalUserJoinTrial',
+ method: 'post',
+ data: param
+ })
+}
+
+export function trialSiteSurveyUserJoinTrial(param) {
+ return request({
+ url: '/TrialExternalUser/trialSiteSurveyUserJoinTrial',
+ method: 'post',
+ data: param
+ })
+}
+
+export function joinBasicInfo(param) {
+ return request({
+ url: `/TrialExternalUser/joinBasicInfo?Id=${param.Id}&IsExternalUser=${param.IsExternalUser}`,
+ method: 'post'
+ })
+}
diff --git a/src/api/reading.js b/src/api/reading.js
new file mode 100644
index 0000000..d71b612
--- /dev/null
+++ b/src/api/reading.js
@@ -0,0 +1,220 @@
+import request from '@/utils/request'
+
+export function addBaseLineLesion(param) {
+ return request({
+ url: '/report/addBaseLineLesion',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getBLLineLesion(trialCode, subjectCode, tpCode) {
+ return request({
+ url: `/report/getBLLineLesion/${trialCode}/${subjectCode}/${tpCode}`,
+ method: 'get'
+ })
+}
+
+export function getVisitLineLesion(trialCode, subjectCode, visitNum, tpCode) {
+ return request({
+ url: `/report/getVisitLineLesion/${trialCode}/${subjectCode}/${visitNum}/${tpCode}`,
+ method: 'get'
+ })
+}
+
+export function saveVisitReport(param) {
+ return request({
+ url: '/report/saveVisitReport',
+ method: 'post',
+ data: param
+ })
+}
+
+export function submiteReport(tpId) {
+ return request({
+ url: `/report/submiteReport/${tpId}`,
+ method: 'post'
+ })
+}
+
+export function saveImageLabelList(param) {
+ return request({
+ url: '/study/saveImageLabelList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getStudyInfo(studyId) {
+ return request({
+ url: `/Study/item/${studyId}`,
+ method: 'get'
+ })
+}
+export function getSeriesList(url) {
+ return request({
+ url: url,
+ method: 'get'
+ })
+}
+export function getInstanceList(seriesId) {
+ return request({
+ url: `/instance/list/id/${seriesId}`,
+ method: 'get'
+ })
+}
+export function getImageLabelList(tpCode) {
+ return request({
+ url: `/study/getImageLabelList/${tpCode}`,
+ method: 'get'
+ })
+}
+export function getRelationVisitList(visitNum, tpCode) {
+ return request({
+ url: `/study/getRelationVisitList/${visitNum}/${tpCode}`,
+ method: 'get'
+ })
+}
+export function getAllRelationStudyList(studyId) {
+ return request({
+ url: `/study/getAllRelationStudyList/${studyId}`,
+ method: 'get'
+ })
+}
+export function getTrialListByReviewer(param) {
+ return request({
+ url: `/trial/getTrialListByReviewer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateEnrollStatus(trialId, status) {
+ return request({
+ url: `/trial/updateEnrollStatus/${trialId}/${status}`,
+ method: 'post'
+ })
+}
+
+export function getHistoryVisitRsList(trialId, subjectId, visitNum, globalId, globalCode) {
+ return request({
+ url: `/globalReport/getHistoryVisitRsList/${trialId}/${subjectId}/${visitNum}/${globalId}/${globalCode}`,
+ method: 'get'
+ })
+}
+
+export function getHistoryGlobalRsList(trialId, subjectCode, visitNum, globalId) {
+ return request({
+ url: `/globalReport/getHistoryGlobalRsList/${trialId}/${subjectCode}/${visitNum}/${globalId}`,
+ method: 'get'
+ })
+}
+
+export function AddGlobalReport(param) {
+ return request({
+ url: `/globalReport/AddGlobalReport`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function GetAdReport(adId) {
+ return request({
+ url: `/globalReport/getAdReport/${adId}`,
+ method: 'get'
+ })
+}
+
+export function AddAdjudicationReport(param) {
+ return request({
+ url: `/globalReport/AddAdjudicationReport`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getVisitStudyList(trialId, subjectVisitId, isReading) {
+ return request({
+ url: `/SubjectVisit/getVisitStudyList/${trialId}/${subjectVisitId}/${isReading}`,
+ method: 'get'
+ })
+}
+
+export function uploadPrintscreen(param, subjectId) {
+ return request({
+ url: `/Printscreen/UploadPrintscreen/${subjectId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function claimOrCancelSubject(param) {
+ return request({
+ url: `/ReadingImageTask/claimOrCancelSubject`,
+ method: 'post',
+ data: param
+ })
+}
+export function getPIReadingAuditList(param) {
+ return request({
+ url: `/VisitTask/getPIReadingAuditList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function pIAuditTask(param) {
+ return request({
+ url: `/VisitTask/pIAuditTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function pIAuditTaskEnrollOrPD(param) {
+ return request({
+ url: `/VisitTask/pIAuditTaskEnrollOrPD`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getPIAuditDialogList(param) {
+ return request({
+ url: `/VisitTask/getPIAuditDialogList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function pIAuditTaskReply(param) {
+ return request({
+ url: `/VisitTask/pIAuditTaskReply`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitCustomTag(param) {
+ return request({
+ url: `/ReadingImageTask/submitCustomTag`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteCustomTag(param) {
+ return request({
+ url: `/ReadingImageTask/deleteCustomTag/{id}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCustomTag(param) {
+ return request({
+ url: `/ReadingImageTask/getCustomTag`,
+ method: 'post',
+ data: param
+ })
+}
diff --git a/src/api/research.js b/src/api/research.js
new file mode 100644
index 0000000..01172d7
--- /dev/null
+++ b/src/api/research.js
@@ -0,0 +1,121 @@
+import request from '@/utils/request'
+
+export function sendVerifyCode(param) {
+ return request({
+ url: '/TrialSiteSurvey/sendVerifyCode',
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifySendCode(param) {
+ return request({
+ url: '/TrialSiteSurvey/verifySendCode',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialSurveyInitInfo(trialId) {
+ return request({
+ url: `/TrialSiteSurvey/getTrialSurveyInitInfo/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getSiteSurveyInfo(trialId, id) {
+ return request({
+ url: `/TrialSiteSurvey/getSiteSurveyInfo/${trialId}/${id}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateTrialSiteSurvey(param) {
+ return request({
+ url: '/TrialSiteSurvey/addOrUpdateTrialSiteSurvey',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialSiteUserSurveyList(param) {
+ return request({
+ url: `/TrialSiteUserSurvey/getTrialSiteUserSurveyList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateTrialSiteUserSurvey(trialId, param) {
+ return request({
+ url: `/TrialSiteUserSurvey/addOrUpdateTrialSiteUserSurvey/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteTrialSiteUserSurvey(trialSiteUserSurveyId, trialId) {
+ return request({
+ url: `/TrialSiteUserSurvey/deleteTrialSiteUserSurvey/${trialSiteUserSurveyId}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getTrialSiteEquipmentSurveyList(trialSiteSurveyId) {
+ return request({
+ url: `/TrialSiteEquipmentSurvey/getTrialSiteEquipmentSurveyList/${trialSiteSurveyId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateTrialSiteEquipmentSurvey(trialId, param) {
+ return request({
+ url: `/TrialSiteEquipmentSurvey/addOrUpdateTrialSiteEquipmentSurvey/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteTrialSiteEquipmentSurvey(trialSiteEquipmentSurveyId, trialId) {
+ return request({
+ url: `/TrialSiteEquipmentSurvey/deleteTrialSiteEquipmentSurvey/${trialSiteEquipmentSurveyId}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+// export function trialSurveySubmmit(trialId, trialSiteSurveyId) {
+// const loginUrl = `${location.protocol}//${location.host}/#/login`
+// const joinUrl = `${location.protocol}//${location.host}/#/joinVerify`
+// return request({
+// url: `/TrialSiteSurvey/trialSurveySubmit/${trialId}/${trialSiteSurveyId}/${loginUrl}/${joinUrl}`,
+// method: 'put'
+// })
+// }
+
+export function trialSurveySubmit(param) {
+ return request({
+ url: `/TrialSiteSurvey/trialSurveySubmit`,
+ method: 'post',
+ data: param
+ })
+}
+export function submissionRejection(param) {
+ return request({
+ url: `/TrialSiteSurvey/submissionRejection`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function trialSurveyLock(trialSiteSurveyId, trialId, isLock) {
+ return request({
+ url: `/TrialSiteSurvey/trialSurveyLock/${trialSiteSurveyId}/${trialId}/${isLock}`,
+ method: 'post'
+ })
+}
+
+export function getUserTypeList(userTypeEnum) {
+ return request({
+ url: `/UserTypeRole/getUserTypeList/${userTypeEnum}`,
+ method: 'get'
+ })
+}
diff --git a/src/api/reviewers.js b/src/api/reviewers.js
new file mode 100644
index 0000000..e512273
--- /dev/null
+++ b/src/api/reviewers.js
@@ -0,0 +1,266 @@
+import request from '@/utils/request'
+export function getDoctorSearchList(param) {
+ return request({
+ url: '/doctorList/getDoctorSearchList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function downloadOfficialCV(param, language) {
+ return request({
+ url: `/file/downloadOfficialCV/${language}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getBasicInfo(id) {
+ return request({
+ url: `/doctor/getBasicInfo/${id}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateDoctorBasicInfo(param) {
+ return request({
+ url: '/doctor/addOrUpdateDoctorBasicInfo',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getEmploymentInfo(id) {
+ return request({
+ url: `/doctor/getEmploymentInfo/${id}`,
+ method: 'get'
+ })
+}
+
+export function updateEmploymentInfo(param) {
+ return request({
+ url: `/doctor/updateEmploymentInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSpecialtyInfo(id) {
+ return request({
+ url: `/doctor/getSpecialtyInfo/${id}`,
+ method: 'get'
+ })
+}
+
+export function updateSpecialtyInfo(param) {
+ return request({
+ url: `/doctor/updateSpecialtyInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getEducation(doctorId) {
+ return request({
+ url: `/education/getEducation/${doctorId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateEducationInfo(param) {
+ return request({
+ url: `/education/addOrUpdateEducationInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteEducationInfo(doctorId) {
+ return request({
+ url: `/education/deleteEducationInfo/${doctorId}`,
+ method: 'delete'
+ })
+}
+
+export function addOrUpdatePostgraduateInfo(param) {
+ return request({
+ url: `/education/addOrUpdatePostgraduateInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePostgraduateInfo(doctorId) {
+ return request({
+ url: `/education/deletePostgraduateInfo/${doctorId}`,
+ method: 'delete'
+ })
+}
+
+export function getResearchPublication(doctorId) {
+ return request({
+ url: `/researchPublication/getResearchPublication/${doctorId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateResearchPublication(param) {
+ return request({
+ url: `/researchPublication/addOrUpdateResearchPublication`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialExperience(doctorId) {
+ return request({
+ url: `/trialExperience/getTrialExperience/${doctorId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateTrialExperience(param) {
+ return request({
+ url: `/trialExperience/addOrUpdateTrialExperience`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteTrialExperience(doctorId) {
+ return request({
+ url: `/trialExperience/deleteTrialExperience/${doctorId}`,
+ method: 'delete'
+ })
+}
+
+export function updateOtherExperience(param) {
+ return request({
+ url: `/trialExperience/updateOtherExperience`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateGcpExperience(param) {
+ return request({
+ url: `/trialExperience/updateGcpExperience`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDoctorSowList(doctorId) {
+ return request({
+ url: `/doctor/getDoctorSowList/${doctorId}`,
+ method: 'get'
+ })
+}
+
+export function getDoctorAckSowList(doctorId) {
+ return request({
+ url: `/doctor/getDoctorAckSowList/${doctorId}`,
+ method: 'get'
+ })
+}
+
+export function getAuditState(doctorId) {
+ return request({
+ url: `/doctor/getAuditState/${doctorId}`,
+ method: 'get'
+ })
+}
+
+export function updateAuditResume(param) {
+ return request({
+ url: '/doctor/updateAuditResume',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getVacationList(doctorId, pageIndex, pageSize) {
+ return request({
+ url: `/vacation/getVacationList/${doctorId}/${pageIndex}/${pageSize}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateVacation(param) {
+ return request({
+ url: `/vacation/addOrUpdateVacation`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteVacation(holidayId) {
+ return request({
+ url: `/vacation/deleteVacation/${holidayId}`,
+ method: 'delete'
+ })
+}
+
+export function downloadByAttachmentId(doctorId, attachmentIds) {
+ const param = { attachmentIds: attachmentIds }
+ return request({
+ url: `/file/downloadByAttachmentId/${doctorId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDetail(doctorId) {
+ return request({
+ url: `/doctor/getDetail/${doctorId}`,
+ method: 'get'
+ })
+}
+
+export function getDoctorTrialListByStatus(param) {
+ return request({
+ url: `/trial/getReviewerTrialListByEnrollmentStatus`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addDoctorCriterionFile(param) {
+ return request({
+ url: `/Doctor/addDoctorCriterionFile`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteDoctorCriterionFile(param) {
+ return request({
+ url: `/Doctor/deleteDoctorCriterionFile`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDoctorCriterionFile(param) {
+ return request({
+ url: `/Doctor/getDoctorCriterionFile`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function sendEmialVerifyCode(param) {
+ return request({
+ url: `/TrialSiteSurvey/sendEmialVerifyCode`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyEmialGetDoctorInfo(param) {
+ return request({
+ url: `/TrialSiteSurvey/verifyEmialGetDoctorInfo`,
+ method: 'post',
+ data: param
+ })
+}
diff --git a/src/api/share.js b/src/api/share.js
new file mode 100644
index 0000000..88eeed7
--- /dev/null
+++ b/src/api/share.js
@@ -0,0 +1,15 @@
+import request from '@/utils/request'
+
+export function createImageShare(data) {
+ return request({
+ url: '/imageShare/createImageShare',
+ method: 'post',
+ data
+ })
+}
+export function verifyShareImage(resourceId, password) {
+ return request({
+ url: `/imageShare/verifyShareImage/${resourceId}/${password}`,
+ method: 'get'
+ })
+}
diff --git a/src/api/statistics.js b/src/api/statistics.js
new file mode 100644
index 0000000..bad5e89
--- /dev/null
+++ b/src/api/statistics.js
@@ -0,0 +1,39 @@
+import request from '@/utils/request'
+export function getWorkloadByTrialAndReviewer(param) {
+ return request({
+ url: '/statistics/getWorkloadByTrialAndReviewer',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getEnrollStatByReviewer(param) {
+ return request({
+ url: '/statistics/getEnrollStatByReviewer',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getEnrollStatByTrial(param) {
+ return request({
+ url: '/statistics/getEnrollStatByTrial',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getParticipateTrialStats(param) {
+ return request({
+ url: '/statistics/getParticipateTrialStat',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getParticipateTrialList(userId) {
+ return request({
+ url: `/statistics/getParticipateTrialList/${userId}`,
+ method: 'get'
+ })
+}
diff --git a/src/api/system/login.js b/src/api/system/login.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/api/system/menu.js b/src/api/system/menu.js
new file mode 100644
index 0000000..9fae60a
--- /dev/null
+++ b/src/api/system/menu.js
@@ -0,0 +1,31 @@
+import request from '@/utils/request'
+
+export function addOrUpdateMenu(param) {
+ return request({
+ url: '/Menu/addOrUpdateMenu',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getMenuTree(param) {
+ return request({
+ url: '/Menu/getMenuTree',
+ method: 'get'
+ })
+}
+
+export function getMenuList(param) {
+ return request({
+ url: `/Menu/getMenuList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteMenu(menuId) {
+ return request({
+ url: `/Menu/deleteMenu/${menuId}`,
+ method: 'delete'
+ })
+}
diff --git a/src/api/system/notice.js b/src/api/system/notice.js
new file mode 100644
index 0000000..21657f2
--- /dev/null
+++ b/src/api/system/notice.js
@@ -0,0 +1,33 @@
+import request from '@/utils/request'
+
+export function getSystemNoticeList(param) {
+ return request({
+ url: '/SystemNotice/getSystemNoticeList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateSystemNotice(param) {
+ return request({
+ url: '/SystemNotice/addOrUpdateSystemNotice',
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteSystemNotice(param) {
+ return request({
+ url: `/SystemNotice/deleteSystemNotice/${param.SystemNoticeId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function uploadSystemNoticeDoc(param) {
+ return request({
+ url: `/SystemNotice/UploadSystemNoticeDoc`,
+ method: 'post',
+ data: param
+ })
+}
diff --git a/src/api/system/user.js b/src/api/system/user.js
new file mode 100644
index 0000000..5f25ae0
--- /dev/null
+++ b/src/api/system/user.js
@@ -0,0 +1,29 @@
+import request from '@/utils/request'
+
+export function sendVerificationCode(email) {
+ return request({
+ url: `/User/sendVerificationCode/${email}`,
+ method: 'get'
+ })
+}
+
+export function setNewEmail(newEmail, verificationCode) {
+ return request({
+ url: `/User/setNewEmail/${newEmail}/${verificationCode}`,
+ method: 'put'
+ })
+}
+
+export function setNewPhone(newPhone) {
+ return request({
+ url: `/User/setNewPhone/${newPhone}`,
+ method: 'put'
+ })
+}
+
+export function setNewUserName(newPhone) {
+ return request({
+ url: `/User/setNewUserName/${newPhone}`,
+ method: 'put'
+ })
+}
diff --git a/src/api/trials.js b/src/api/trials.js
new file mode 100644
index 0000000..0c72ec1
--- /dev/null
+++ b/src/api/trials.js
@@ -0,0 +1,3508 @@
+import request from '@/utils/request'
+import requestDownload from '@/utils/request-download'
+
+export function getTrialList(param) {
+ return request({
+ url: '/trial/getTrialList',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialSelect(param) {
+ return request({
+ url: '/trial/getTrialSelect',
+ method: 'get'
+ })
+}
+
+export function getTrialInfo(trialId) {
+ return request({
+ url: `/trial/getTrialInfoAndLockState/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function abandonTrial(trialId, IsDeleted) {
+ return request({
+ url: `/TrialConfig/abandonTrial/${trialId}/${IsDeleted}`,
+ method: 'put'
+ })
+}
+
+export function ifTrialCanOngoing(trialId) {
+ return request({
+ url: `/TrialConfig/ifTrialCanOngoing/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateTrial(param) {
+ return request({
+ url: '/trial/addOrUpdateTrial',
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateTrialStatus(trialId, statusStr) {
+ return request({
+ url: `/trial/updateTrialStatus/${trialId}/${statusStr}`,
+ method: 'post'
+ })
+}
+
+export function uploadReviewerAckSOW(trialId, param) {
+ return request({
+ url: `/doctorWorkload/uploadReviewerAckSOW/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteReviewerAckSOW(trialId, doctorId, attachmentId) {
+ return request({
+ url: `/doctorWorkload/deleteReviewerAckSOW/${trialId}/${doctorId}/${attachmentId}`,
+ method: 'delete'
+ })
+}
+
+export function getTrialInfoAndMaxTrialState(trialId) {
+ return request({
+ url: `/trial/getTrialInfoAndMaxTrialState/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getSelectionReviewerList(param) {
+ return request({
+ url: `/doctorList/getSelectionReviewerList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function selectReviewers(trialId, doctorIdArray) {
+ return request({
+ url: `/enroll/selectReviewers/${trialId}`,
+ method: 'post',
+ data: doctorIdArray
+ })
+}
+
+export function getSubmissionOrApprovalReviewerList(param) {
+ return request({
+ url: `/doctorList/getSubmissionOrApprovalReviewerList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitReviewer(trialId, doctorIdArray, commitState) {
+ return request({
+ url: `/enroll/submitReviewer/${trialId}/${commitState}`,
+ method: 'post',
+ data: doctorIdArray
+ })
+}
+
+export function downloadResume(trialId, language, doctorIdArray) {
+ return request({
+ url: `/enroll/downloadResume/${trialId}/${language}`,
+ method: 'post',
+ data: doctorIdArray
+ })
+}
+
+export function approveReviewer(trialId, doctorIdArray, auditState) {
+ return request({
+ url: `/enroll/approveReviewer/${trialId}/${auditState}`,
+ method: 'post',
+ data: doctorIdArray
+ })
+}
+
+export function getConfirmationReviewerList(param) {
+ return request({
+ url: `/doctorList/getConfirmationReviewerList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function confirmReviewer(params) {
+ return request({
+ url: `/enroll/confirmReviewer`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialEnrollmentWorkloadStats(param) {
+ return request({
+ url: '/doctorWorkload/getTrialEnrollmentWorkloadStats',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDoctorWorkLoadList(param) {
+ return request({
+ url: `/doctorWorkload/getEnrollmentWorkloadStatsDetail`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReviewerWorkLoadListDetail(param) {
+ return request({
+ url: `/doctorWorkload/getReviewerWorkLoadListDetail`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function existWorkLoad(param) {
+ return request({
+ url: `/doctorWorkload/workloadExist`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function workLoadAddOrUpdate(param) {
+ return request({
+ url: `/doctorWorkload/workLoadAddOrUpdate`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialExpeditedState(trialId) {
+ return request({
+ url: `/Trial/getTrialExpeditedState/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function deleteWorkLoad(id, trialId) {
+ return request({
+ url: `/doctorWorkload/deleteWorkLoad/${id}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getMaintenanceList(param) {
+ return request({
+ url: `/trialMaintenance/getMaintenanceUserList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getUserSelectionList(userTypeId, institutionId) {
+ return request({
+ url: `/trialMaintenance/getUserSelectionList/${userTypeId}/${institutionId}`,
+ method: 'get'
+ })
+}
+
+export function AddOrUpdateMaintenanceUser(param) {
+ return request({
+ url: `/trialMaintenance/AddOrUpdateMaintenanceUser`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteMaintenanceUser(id, trialId, isDelete) {
+ return request({
+ url: `/trialMaintenance/deleteMaintenanceUser/${id}/${trialId}/${isDelete}`,
+ method: 'delete'
+ })
+}
+
+export function getSiteCRCList(param) {
+ return request({
+ url: `/trialMaintenance/getSiteCRCList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getInstitutionList(typeId) {
+ return request({
+ url: `/institution/getInstitutionList/${typeId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateSiteCRC(param) {
+ return request({
+ url: `/trialMaintenance/addOrUpdateSiteCRC`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteSiteCRC(id, trialId, isDelete) {
+ return request({
+ url: `/trialMaintenance/deleteSiteCRC/${id}/${trialId}/${isDelete}`,
+ method: 'delete'
+ })
+}
+
+export function getTrialSiteCRCList(trialId, siteId) {
+ return request({
+ url: `/trialMaintenance/getTrialSiteCRCList/${trialId}/${siteId}`,
+ method: 'get'
+ })
+}
+
+export function trialUserListExport(param) {
+ return requestDownload({
+ url: `/ExcelExport/trialUserListExport`,
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function trialSiteUserListExport(param) {
+ return requestDownload({
+ url: `/ExcelExport/trialSiteUserListExport`,
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function trialSiteUserSummaryListExport(param) {
+ return requestDownload({
+ url: `/ExcelExport/trialSiteUserSummaryListExport`,
+ method: 'post',
+ responseType: 'blob',
+ data: param
+ })
+}
+
+export function getVisitStageList(trialId) {
+ return request({
+ url: `/visitPlan/getVisitStageList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateVisitStage(param) {
+ return request({
+ url: `/visitPlan/addOrUpdateVisitStage`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteVisitStage(id, trialId) {
+ return request({
+ url: `/visitPlan/deleteVisitStage/${id}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getAcquisitionSpecificationList(trialId) {
+ return request({
+ url: `/specification/getSpecificationList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateAcquisitionSpecification(param) {
+ return request({
+ url: `/specification/addOrUpdateSpecification`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function uploadTrialFile(file, type, trialId, config = {}) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/TrialConfig/uploadTrialFile/${trialId}/${type}`,
+ method: 'post',
+ data: formData,
+ ...config
+ })
+}
+
+export function deleteAcquisitionSpecification(id, trialId) {
+ return request({
+ url: `/specification/deleteSpecification/${id}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getTrialVisitStageSelect(trialId) {
+ return request({
+ url: `/visitPlan/getTrialVisitStageSelect/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getSubjectList(param) {
+ return request({
+ url: `/subject/getSubjectList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialSiteSelect(trialId) {
+ return request({
+ url: `/trialMaintenance/getTrialSiteSelect/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getSubjectListBySiteId(siteId, trialId) {
+ return request({
+ url: `/subject/getSubjectListBySiteId/${siteId}/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getSubjectVisitSelectList(trialId, siteId, subjectId) {
+ return request({
+ url: `/subjectVisit/getSubjectVisitSelectList/${trialId}/${siteId}/${subjectId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateSubject(param) {
+ return request({
+ url: `/subject/addOrUpdateSubject`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteSubject(trialId, id) {
+ return request({
+ url: `/subject/deleteSubject/${trialId}/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getStudyStatList(trialId, subjectId, siteId) {
+ return request({
+ url: `/study/getStudyStatList/${trialId}/${subjectId}/${siteId}`,
+ method: 'get'
+ })
+}
+
+export function getStudyList(param) {
+ return request({
+ url: `/study/getStudyList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateStudy(param) {
+ return request({
+ url: `/study/addOrUpdateStudy`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteStudy(id, trialId) {
+ return request({
+ url: `/study/deleteStudy/${id}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getSubjectVisitList(trialId, subjectId) {
+ return request({
+ url: `/subjectVisit/getSubjectVisitList/${trialId}/${subjectId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateSubjectVisit(param) {
+ return request({
+ url: `/subjectVisit/addOrUpdateSV`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteSubjectVisit(trialId, id) {
+ return request({
+ url: `/subjectVisit/deleteSV/${trialId}/${id}`,
+ method: 'delete'
+ })
+}
+
+export function updateStudyBinding(param) {
+ return request({
+ url: `/study/updateStudyBinding`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getQaTemplateSelectList() {
+ return request({
+ url: `/QATemplate/GetQaTemplateSelectList`,
+ method: 'get'
+ })
+}
+
+export function getQaTemplateItemsById(qaTemplateId) {
+ return request({
+ url: `/QATemplate/GetQaTemplateItemsById/${qaTemplateId}`,
+ method: 'get'
+ })
+}
+
+export function getQARecordList(studyId) {
+ return request({
+ url: `/QARecord/GetQARecordList/${studyId}`,
+ method: 'get'
+ })
+}
+export function getHistoryTemplateItemHasNoteList(qaRecordId) {
+ return request({
+ url: `/QARecord/GetHistoryTemplateItemHasNoteList/${qaRecordId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateQARecord(param, trialId) {
+ return request({
+ url: `/QARecord/AddOrUpdateQARecord/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteQARecord(qaQARecordId, trialId) {
+ return request({
+ url: `/QARecord/DeleteQARecord/${qaQARecordId}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getQaRecordDialogList(qaRecordId) {
+ return request({
+ url: `/QARecord/GetQaRecordDialogList/${qaRecordId}`,
+ method: 'get'
+ })
+}
+
+export function addQAReply(param, trialId) {
+ return request({
+ url: `/QARecord/AddQAReply/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteQAReplay(qaReplyId, trialId) {
+ return request({
+ url: `/QARecord/DeleteQAReply/${qaReplyId}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getReviewerList(trialId) {
+ return request({
+ url: `/study/GetReviewerList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function studyDistribution(param) {
+ return request({
+ url: `/study/studyDistribution`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateStudyStatus(param, trialId) {
+ return request({
+ url: `/study/updateStudyStatus/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getStudyStatusDetailList(studyId) {
+ return request({
+ url: `/study/getStudyStatusDetailList/${studyId}`,
+ method: 'get'
+ })
+}
+
+export function getQANoticeList(studyId) {
+ return request({
+ url: `/study/getQANoticeList/${studyId}`,
+ method: 'get'
+ })
+}
+
+export function editStudyReviewer(param) {
+ return request({
+ url: `/study/editStudyReviewer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDistributeStudyList(param) {
+ return request({
+ url: `/study/getDistributeStudyList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getWorkloadTPList(param) {
+ return request({
+ url: `/workloadDistribution/getWorkloadTPList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function distributeTP(param) {
+ return request({
+ url: `/workloadDistribution/DistributeTP`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateDistributeTP(tpId, reviewerId, studyId) {
+ return request({
+ url: `/workloadDistribution/UpdateDistributeTP/${tpId}/${reviewerId}/${studyId}`,
+ method: 'post'
+ })
+}
+
+export function getWorkloadADList(param) {
+ return request({
+ url: `/workloadDistribution/getWorkloadADList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function distributeAD(param) {
+ return request({
+ url: `/workloadDistribution/distributeAD`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateDistributeAD(tpId, reviewerId) {
+ return request({
+ url: `/workloadDistribution/updateDistributeAD/${tpId}/${reviewerId}`,
+ method: 'post'
+
+ })
+}
+
+export function getWorkloadGlobalList(param) {
+ return request({
+ url: `/workloadDistribution/getWorkloadGlobalList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function distributeGlobal(param) {
+ return request({
+ url: `/workloadDistribution/distributeGlobal`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateDistributeGlobal(tpId, reviewerId, subjectId, visitNum) {
+ return request({
+ url: `/workloadDistribution/updateDistributeGlobal/${tpId}/${reviewerId}/${subjectId}/${visitNum}`,
+ method: 'post'
+ })
+}
+
+export function getWorkloadDetailList(workloadId) {
+ return request({
+ url: `/workloadDistribution/GetWorkloadDetailList/${workloadId}`,
+ method: 'get'
+ })
+}
+
+export function getWorkloadList(param) {
+ return request({
+ url: `/reading/getWorkloadList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateReviewerReadingType(trialId, doctorId, reviewerReadingType) {
+ return request({
+ url: `/doctorWorkload/updateReviewerReadingType/${trialId}/${doctorId}/${reviewerReadingType}`,
+ method: 'post'
+ })
+}
+
+export function dicomAnonymize(studyId, trialId) {
+ return request({
+ url: `/study/dicomAnonymize/${studyId}/${trialId}`,
+ method: 'post'
+ })
+}
+
+export function verifyStudyAllowUpload(trialId, studyInstanceUid, abandonStudyId) {
+ var url = ''
+ if (abandonStudyId) {
+ url = `/study/verifyStudyAllowUpload/${trialId}/${studyInstanceUid}/${abandonStudyId}`
+ } else {
+ url = `/study/verifyStudyAllowUpload/${trialId}/${studyInstanceUid}`
+ }
+ return request({
+ url: url,
+ method: 'get'
+ })
+}
+
+export function batchVerifyStudyAllowUpload(param) {
+ return request({
+ url: `/study/verifyStudyAllowUpload`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function VerifySignature(userName, password) {
+ return request({
+ url: `/user/VerifySignature/${userName}/${password}`,
+ method: 'get'
+ })
+}
+
+export function getSeriesList(studyId) {
+ return request({
+ url: `/series/list/${studyId}`,
+ method: 'get'
+ })
+}
+
+export function getVisitList(param) {
+ return request({
+ url: `/subjectVisit/getVisitList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function forwardStudy(studyId, trialId) {
+ return request({
+ url: `/study/forwardStudy/${studyId}/${trialId}`,
+ method: 'get'
+ })
+}
+export function deleteTrial(trialId) {
+ return request({
+ url: `/trial/deleteTrial/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getTrialUserScreeningList(param) {
+ return request({
+ url: `/trialMaintenance/getTrialUserScreeningList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addTrialUsers(param) {
+ return request({
+ url: `/trialMaintenance/addTrialUsers`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateTrialUser(param) {
+ return request({
+ url: `/trialMaintenance/updateTrialUser`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function getSiteCRCSimpleList(param) {
+ return request({
+ url: `/trialMaintenance/getSiteCRCSimpleList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialSiteScreeningList(param) {
+ return request({
+ url: `/trialMaintenance/getTrialSiteScreeningList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addTrialSites(param) {
+ return request({
+ url: `/trialMaintenance/addTrialSites`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSiteCRCScreeningList(param) {
+ return request({
+ url: `/trialMaintenance/getSiteCRCScreeningList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function assignSiteCRC(param) {
+ return request({
+ url: `/trialMaintenance/assignSiteCRC`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function editTrialSite(param) {
+ return request({
+ url: `/TrialMaintenance/editTrialSite`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function deleteTrialSite(id, trialId) {
+ return request({
+ url: `/trialMaintenance/deleteTrialSite/${id}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function getTrialVisitPlanConfirmed(trialId) {
+ return request({
+ url: `/trial/getTrialVisitPlanConfirmed/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getTrialQATemplateList(params) {
+ return request({
+ url: `/TrialQATemplate/GetTrialQATemplateList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSystemQATemplateList(modalityId) {
+ return request({
+ url: `/TrialQATemplate/GetSystemQATemplateList/${modalityId}`,
+ method: 'get'
+ })
+}
+
+export function getTemplateItemInitList(params) {
+ return request({
+ url: `/TrialQATemplate/GetTemplateItemInitList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addOrUpdateTrialQATemplate(params) {
+ return request({
+ url: `/TrialQATemplate/AddOrUpdateTrialQATemplate`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteTrialQATemplate(qaTrialTemplateId, trialId) {
+ return request({
+ url: `/TrialQATemplate/DeleteTrialQATemplate/${qaTrialTemplateId}/${trialId}`,
+ method: 'delete'
+ })
+}
+
+export function deleteTrialQATemplateItem(templateItemId) {
+ return request({
+ url: `/TrialQATemplate/deleteTrialQATemplateItem/${templateItemId}`,
+ method: 'delete'
+ })
+}
+
+export function getAuditList(params) {
+ return request({
+ url: `/log/getAuditList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getOptUserList(trialId) {
+ return request({
+ url: `/log/getOptUserList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getTrialModalityList(trialId) {
+ return request({
+ url: `/trial/getTrialModalityList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function enrollBackOrOut(trialId, doctorId, optType, outEnrollTime) {
+ return request({
+ url: `/enroll/enrollBackOrOut/${trialId}/${doctorId}/${optType}`,
+ method: 'post',
+ params: outEnrollTime ? { outEnrollTime: outEnrollTime } : {}
+ })
+}
+
+export function uploadDTF(trialId, siteId, subjectId, subjectVisitId, studyId, file, config = {}) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/file/UploadDTF/${trialId}/${siteId}/${subjectId}/${subjectVisitId}/${studyId}`,
+ method: 'post',
+ data: formData,
+ ...config
+ })
+}
+
+export function getStudyDTFList(trialId, studyId) {
+ return request({
+ url: `/StudyDTF/getStudyDtfList/${trialId}/${studyId}`,
+ method: 'get'
+ })
+}
+
+export function deleteStudyDTF(trialId, studyDTFId) {
+ return request({
+ url: `/StudyDTF/deleteStudyDTF/${trialId}/${studyDTFId}`,
+ method: 'delete'
+ })
+}
+
+export function getTrialConfigInfo(trialId) {
+ return request({
+ url: `/TrialConfig/getTrialConfigInfo/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function configTrial(param) {
+ return request({
+ url: `/TrialConfig/configTrial`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getQuestionTypeList(trialId) {
+ return request({
+ url: `/TrialQATemplate/getQuestionTypeList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getTrialQCQuestionConfigureList(param) {
+ return request({
+ url: `/TrialQCQuestionConfigure/getTrialQCQuestionConfigureList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteTrialQCQuestionConfigure(trialId, id) {
+ return request({
+ url: `/TrialQCQuestionConfigure/deleteTrialQCQuestionConfigure/${trialId}/${id}`,
+ method: 'delete'
+ })
+}
+
+export function batchAddTrialQCQuestionConfigure(trialId, param) {
+ return request({
+ url: `/TrialQCQuestionConfigure/batchAddTrialQCQuestionConfigure/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateTrialQCQuestionConfigure(param) {
+ return request({
+ url: `/TrialQCQuestionConfigure/addOrUpdateTrialQCQuestionConfigure`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function takeOrReleaseQCTask(trialId, subjectVisitId, obtainOrCancel) {
+ return request({
+ url: `/QCOperation/obtainOrCancelQCTask/${trialId}/${subjectVisitId}/${obtainOrCancel}`,
+ method: 'put'
+ })
+}
+export function replaceQCTaskActionUser(trialId, subjectVisitId) {
+ return request({
+ url: `/QCOperation/replaceQCTaskActionUser/${trialId}/${subjectVisitId}`,
+ method: 'put'
+ })
+}
+
+export function verifyReuploadIsCanJump(trialId, qcChallengeId) {
+ return request({
+ url: `/QCOperation/verifyReuploadIsCanJump/${trialId}/${qcChallengeId}`,
+ method: 'get'
+ })
+}
+
+export function currentUserCanQC(subjectVisitId,) {
+ return request({
+ url: `/SubjectVisit/currentUserCanQC/${subjectVisitId}`,
+ method: 'post'
+ })
+}
+
+export function updateSubjectVisitState(trialId, subjectVisitId, postVisitState) {
+ return request({
+ url: `/SubjectVisit/updateSubjectVisitState/${trialId}/${subjectVisitId}/${postVisitState}`,
+ method: 'post'
+ })
+}
+
+export function getCRCVisitList(param) {
+ return request({
+ url: `/QCList/getCRCVisitList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyCRCRequestToQC(param) {
+ return request({
+ url: `/QCOperation/verifyCRCRequestToQC`,
+ method: 'post',
+ data: param
+ })
+}
+export function cRCBulkRequestToQC(param) {
+ return request({
+ url: `/QCOperation/cRCRequestToQC`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCRCChallengeList(param) {
+ return request({
+ url: `/QCList/getCRCChallengeList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getQCVisitList(param) {
+ return request({
+ url: `/QCList/getQCVisitList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getQCChallengeList(param) {
+ return request({
+ url: `/QCList/getQCChallengeList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getVisitQCInfo(subjectVisitId, trialQCProcess, currentQCType) {
+ return request({
+ url: `/QCList/getVisitQCInfo/${subjectVisitId}/${trialQCProcess}/${currentQCType}`,
+ method: 'get'
+ })
+}
+
+export function getQCQuestionAnswerList(trialId, subjectVisitId, trialQCProcess, currentQCType) {
+ return request({
+ url: `/QCList/getQCQuestionAnswerList/${trialId}/${subjectVisitId}/${trialQCProcess}/${currentQCType}`,
+ method: 'get'
+ })
+}
+
+export function getQCQuestionAnswer(param) {
+ return request({
+ url: `/QCList/getQCQuestionAnswer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateQCQuestionAnswerList(trialId, subjectVisitId, trialQCProcess, currentQCType, param) {
+ return request({
+ url: `/QCOperation/addOrUpdateQCQuestionAnswerList/${trialId}/${subjectVisitId}/${trialQCProcess}/${currentQCType}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setSeriesStatus(trialId, subjectVisitId, studyId, seriesId, state) {
+ return request({
+ url: `/QCOperation/setSeriesState/${trialId}/${subjectVisitId}/${studyId}/${seriesId}/${state}`,
+ method: 'put'
+ })
+}
+
+export function getVisitQCStudyAndSeriesList(subjectVisitId) {
+ return request({
+ url: `/QCList/getVisitQCStudyAndSeriesList/${subjectVisitId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateQCChallenge(trialId, trialQCProcess, currentQCType, param) {
+ return request({
+ url: `/QCOperation/addOrUpdateQCChallenge/${trialId}/${trialQCProcess}/${currentQCType}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getHistoryChallengeList(subjectVisitId, trialQCProcess, currentQCType) {
+ return request({
+ url: `/QCList/getHistoryChallengeList/${subjectVisitId}/${trialQCProcess}/${currentQCType}`,
+ method: 'get'
+ })
+}
+
+export function getQCChallengeDialogList(qaChallengeId) {
+ return request({
+ url: `/QCList/getQCChallengeDialogList/${qaChallengeId}`,
+ method: 'get'
+ })
+}
+
+export function addQCChallengeReply(trialId, param) {
+ return request({
+ url: `/QCOperation/addQCChallengeReply/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function qCCheckPassedOrFailed(trialId, subjectVisitId, signCodeId, auditState) {
+ return request({
+ url: `/QCOperation/qCPassedOrFailed/${trialId}/${subjectVisitId}/${signCodeId}/${auditState}`,
+ method: 'post'
+ })
+}
+
+export function closeQCChallenge(param) {
+ return request({
+ url: `/QCOperation/closeQCChallenge`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function getSubjectVisitUploadedStudyList(subjectVisitId) {
+ return request({
+ url: `/QCList/getSubjectVisitUploadedStudyList/${subjectVisitId}`,
+ method: 'get'
+ })
+}
+
+export function deleteStudyList(trialId, subjectVisitId, param) {
+ return request({
+ url: `/QCOperation/deleteStudyList/${trialId}/${subjectVisitId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateModality(trialId, param) {
+ return request({
+ url: `/QCOperation/updateModality/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getConsistencyVerificationList(param) {
+ return request({
+ url: `/QCList/getConsistencyVerificationList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCheckChallengeDialogList(subjectVisitId) {
+ return request({
+ url: `/QCList/getCheckChallengeDialogList/${subjectVisitId}`,
+ method: 'get'
+ })
+}
+
+export function addCheckChallengeReply(trialId, param) {
+ return request({
+ url: `/QCOperation/addCheckChallengeReply/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function closeCheckChallenge(trialId, param) {
+ return request({
+ url: `/QCOperation/closeCheckChallenge/${trialId}`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function setCheckPass(trialId, param) {
+ return request({
+ url: `/QCOperation/setCheckPass/${trialId}`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function checkBack(trialId, signId, subjectVisitId) {
+ return request({
+ url: `/QCOperation/checkBack/${trialId}/${signId}/${subjectVisitId}`,
+ method: 'put'
+ })
+}
+
+export function cRCRequstCheckBack(trialId, subjectVisitId) {
+ return request({
+ url: `/QCOperation/cRCRequstCheckBack/${trialId}/${subjectVisitId}`,
+ method: 'put'
+ })
+}
+
+export function getCRCVisitChallengeAndDialog(subjectVisitId, trialQCProcess) {
+ return request({
+ url: `/QCList/getCRCVisitChallengeAndDialog/${subjectVisitId}/${trialQCProcess}`,
+ method: 'get'
+ })
+}
+
+export function uploadVisitCheckExcel(trialId, file) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/QCOperation/UploadVisitCheckExcel/${trialId}`,
+ method: 'post',
+ data: formData
+ })
+}
+
+export function getSubjectClinicalData(subjectVisitId) {
+ return request({
+ url: `/ClinicalData/getSubjectVisitClinicalData/${subjectVisitId}`,
+ method: 'get'
+ })
+}
+
+export function uploadVisitClinicalData(trialId, subjectVisitId, file) {
+ return request({
+ url: `/ClinicalData/uploadVisitClinicalData/${trialId}/${subjectVisitId}`,
+ method: 'post',
+ data: file
+ })
+}
+
+export function addOrUpdatePreviousHistory(trialId, param) {
+ return request({
+ url: `/ClinicalData/addOrUpdatePreviousHistory/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePreviousHistory(trialId, subjectVisitId, previousHistoryId) {
+ return request({
+ url: `/ClinicalData/deletePreviousHistory/${trialId}/${subjectVisitId}/${previousHistoryId}`,
+ method: 'delete'
+ })
+}
+
+export function addOrUpdatePreviousOther(trialId, param) {
+ return request({
+ url: `/ClinicalData/addOrUpdatePreviousOther/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePreviousOther(trialId, subjectVisitId, previousOtherId) {
+ return request({
+ url: `/ClinicalData/deletePreviousOther/${trialId}/${subjectVisitId}/${previousOtherId}`,
+ method: 'delete'
+ })
+}
+
+export function addOrUpdatePreviousSurgery(trialId, param) {
+ return request({
+ url: `/ClinicalData/addOrUpdatePreviousSurgery/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePreviousSurgery(trialId, subjectVisitId, id) {
+ return request({
+ url: `/ClinicalData/deletePreviousSurgery/${trialId}/${subjectVisitId}/${id}`,
+ method: 'delete'
+ })
+}
+
+export function deletePreviousPDF(trialId, subjectVisitId, id) {
+ return request({
+ url: `/ClinicalData/deletePreviousPDF/${trialId}/${subjectVisitId}/${id}`,
+ method: 'delete'
+ })
+}
+
+export function signClinicalData(trialId, subjectVisitId) {
+ return request({
+ url: `/ClinicalData/signClinicalData/${trialId}/${subjectVisitId}`,
+ method: 'put'
+ })
+}
+
+export function setNeedReupload(trialId, subjectVisitId, qaChallengeId) {
+ return request({
+ url: `/QCOperation/setNeedReupload/${trialId}/${subjectVisitId}/${qaChallengeId}`,
+ method: 'put'
+ })
+}
+
+export function cRCRequestReUpload(trialId, subjectVisitId, qaChallengeId) {
+ return request({
+ url: `/QCOperation/cRCRequestReUpload/${trialId}/${subjectVisitId}/${qaChallengeId}`,
+ method: 'put'
+ })
+}
+
+export function setVisitUrgent(trialId, subjectVisitId, setOrCancel) {
+ return request({
+ url: `/QCOperation/setVisitUrgent/${trialId}/${subjectVisitId}/${setOrCancel}`,
+ method: 'put'
+ })
+}
+
+export function getQCChallengeCreatorList(trialId) {
+ return request({
+ url: `/QCList/getQCChallengeCreatorList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function updateSubjectAndSVInfo(trialId, param) {
+ return request({
+ url: `/QCOperation/updateSubjectAndSVInfo/${trialId}`,
+ method: 'put',
+ data: param
+ })
+}
+export function getSubjectVisitSelectOptions(subjectId) {
+ return request({
+ url: `/QCList/getSubjectVisitSelectList/${subjectId}`,
+ method: 'get'
+ })
+}
+
+export function verifyCanQCPassedOrFailed(trialId, subjectvisitId) {
+ return request({
+ url: `/QCOperation/verifyCanQCPassedOrFailed/${trialId}/${subjectvisitId}`,
+ method: 'get'
+ })
+}
+
+export function setReuploadFinished(param) {
+ return request({
+ url: `/QCOperation/setReuploadFinished`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getForwardList(param) {
+ return request({
+ url: `/QCList/getForwardList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getNoneDicomStudyList(subjectVisitId, sudyId = '') {
+ return request({
+ url: `/NoneDicomStudy/getNoneDicomStudyList?subjectVisitId=${subjectVisitId}&nonedicomStudyId=${sudyId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateNoneDicomStudy(param) {
+ return request({
+ url: `/NoneDicomStudy/addOrUpdateNoneDicomStudy`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteNoneDicomStudy(trialId, subjectVisitId, id) {
+ return request({
+ url: `/NoneDicomStudy/deleteNoneDicomStudy/${trialId}/${subjectVisitId}/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getNoneDicomStudyFileList(nonDicomStudyId) {
+ return request({
+ url: `/NoneDicomStudy/getNoneDicomStudyFileList/${nonDicomStudyId}`,
+ method: 'get'
+ })
+}
+
+export function getVisitNoneDicomStudyFileList(subjectVisitId) {
+ return request({
+ url: `/NoneDicomStudy/getVisitNoneDicomStudyFileList/${subjectVisitId}`,
+ method: 'get'
+ })
+}
+
+// export function uploadNoneDicomFile(trialId, subjectVisitId, nonDicomStudyId, fileData, studyMonitorId) {
+// return request({
+// url: `/NoneDicomStudy/uploadNoneDicomFile/${trialId}/${subjectVisitId}/${nonDicomStudyId}/${studyMonitorId}`,
+// method: 'post',
+// data: fileData
+// })
+// }
+
+export function uploadNoneDicomFile(params) {
+ return request({
+ url: `/NoneDicomStudy/uploadNoneDicomFile`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteNoneDicomStudyFile(trialId, subjectVisitId, id) {
+ return request({
+ url: `/NoneDicomStudy/deleteNoneDicomStudyFile/${trialId}/${subjectVisitId}/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getGenerateTrialCodeDic() {
+ return request({
+ url: `/Dictionary/getGenerateTrialCodeDic`,
+ method: 'get'
+ })
+}
+
+export function getQCParticipantList(trialId) {
+ return request({
+ url: `/QCList/getQCParticipantList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getUserTypeList(type) {
+ return request({
+ url: `/UserTypeRole/getUserTypeList${type ? '/' + type : ''}`,
+ method: 'get'
+ })
+}
+
+export function confirmTrialVisitPlan(trialId) {
+ return request({
+ url: `/VisitPlan/confirmTrialVisitPlan/${trialId}`,
+ method: 'post'
+ })
+}
+export function getInfluenceHistoryList(trialId) {
+ return request({
+ url: `/VisitPlan/getInfluenceHistoryList/${trialId}`,
+ method: 'get'
+ })
+}
+export function downloadInflunceStudyList(id) {
+ return requestDownload({
+ url: `/VisitPlan/downloadInflunceStudyList/${id}`,
+ method: 'get',
+ responseType: 'blob'
+ })
+}
+
+export function getTrialSiteSurveyList(param) {
+ return request({
+ url: `/TrialSiteSurvey/getTrialSiteSurveyList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function trialSiteSurveyUserList(param) {
+ return request({
+ url: `/TrialSiteSurvey/trialSiteSurveyUserList`,
+ method: 'post',
+ data: param
+ })
+}
+export function sendInviteEmails(param) {
+ return request({
+ url: `/TrialSiteSurvey/sendInviteEmail`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function sendSiteSurveyUserJoinEmail(param) {
+ return request({
+ url: `/TrialSiteSurvey/sendSiteSurveyUserJoinEmail`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function abandonSiteSurvey(trialId, trialSiteSurveyId) {
+ return request({
+ url: `/TrialSiteSurvey/abandonSiteSurvey/${trialId}/${trialSiteSurveyId}`,
+ method: 'put'
+ })
+}
+
+export function getTrialDocumentList(param) {
+ return request({
+ url: `/TrialDocument/getTrialDocumentList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateTrialDocument(param) {
+ return request({
+ url: `/TrialDocument/addOrUpdateTrialDocument`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteTrialDocument(trialId, id) {
+ return request({
+ url: `/TrialDocument/deleteTrialDocument/${trialId}/${id}`,
+ method: 'delete'
+ })
+}
+
+export function userConfirm(param) {
+ return request({
+ url: `/TrialDocument/userConfirm`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setFirstViewDocumentTime(trialId, trialDocumentId, isSystemDoc) {
+ return request({
+ url: `/TrialDocument/setFirstViewDocumentTime/${trialId}/${trialDocumentId}/${isSystemDoc}`,
+ method: 'put'
+ })
+}
+
+export function setSystemDocFirstViewTime(documentId) {
+ return request({
+ url: `/TrialDocument/setSystemDocFirstViewTime/${documentId}`,
+ method: 'put'
+ })
+}
+
+export function uploadTrialDoc(trialId, file) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/TrialDocument/UploadTrialDoc/${trialId}`,
+ method: 'post',
+ data: formData
+ })
+}
+
+export function getTrialDocuments(trialId) {
+ return request({
+ url: `/TrialDocument/getTrialDocumentList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function addSystemDocuments(trialId, param) {
+ return request({
+ url: `/TrialDocument/addSystemDocuments/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialUserTypeList() {
+ return request({
+ url: `/UserTypeRole/getTrialUserTypeList`,
+ method: 'get'
+ })
+}
+
+export function getUserDocumentList(param) {
+ return request({
+ url: `/TrialDocument/getUserDocumentList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDocumentConfirmList(param) {
+ return request({
+ url: `/TrialDocument/getDocumentConfirmList`,
+ method: 'post',
+ data: param
+ })
+}
+export function getTrialUserSelect(trialId) {
+ return request({
+ url: `/TrialDocument/getTrialUserSelect/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getTrialDocAndSystemDocType(trialId) {
+ return request({
+ url: `/TrialDocument/getTrialDocAndSystemDocType/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function updateSubjectStatus(param) {
+ return request({
+ url: `/Subject/updateSubjectStatus`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function userAbandonDoc(documentId, isSystemDoc) {
+ return request({
+ url: `/TrialDocument/userAbandonDoc/${documentId}/${isSystemDoc}`,
+ method: 'put'
+ })
+}
+
+export function verifyQCCanAddChallenge(trialId, subjectVisitId, currentQCType) {
+ return request({
+ url: `/QCOperation/VerifyQCCanAddChallenge/${trialId}/${subjectVisitId}/${currentQCType}`,
+ method: 'get'
+ })
+}
+
+export function setSubjectVisitUrgent(trialId, subjectVisitId, isUrgent) {
+ return request({
+ url: `/SubjectVisit/SetSubjectVisitUrgent/${trialId}/${subjectVisitId}/${isUrgent}`,
+ method: 'put'
+ })
+}
+
+export function configTrialBasicInfo(param) {
+ return request({
+ url: `/TrialConfig/configTrialBasicInfo`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function configTrialProcessInfo(param) {
+ return request({
+ url: `/TrialConfig/configTrialProcessInfo`,
+ method: 'put',
+ data: param
+ })
+}
+export function configTrialUrgentInfo(param) {
+ return request({
+ url: `/TrialConfig/configTrialUrgentInfo`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function getTrialQCQuestionSelectList(param) {
+ return request({
+ url: `/TrialQCQuestionConfigure/getTrialQCQuestionSelectList`,
+ method: 'post',
+ data: param
+ })
+}
+export function getSignText(signCode) {
+ return request({
+ url: `/TrialConfig/getSignText/${signCode}`,
+ method: 'get'
+ })
+}
+export function verifySignature(param) {
+ return request({
+ url: `/TrialConfig/verifySignature`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function confirmQCQuestion(trialId) {
+ return request({
+ url: `/TrialConfig/confirmQCQuestion/${trialId}`,
+ method: 'put'
+ })
+}
+
+export function updateTrialState(trialId, trialStatusStr, reason) {
+ return request({
+ url: `/TrialConfig/updateTrialState/${trialId}/${trialStatusStr}/${reason}`,
+ method: 'put'
+ })
+}
+
+export function trialConfigSignatureConfirm(param) {
+ return request({
+ url: `/TrialConfig/trialConfigSignatureConfirm`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getUserIsHaveDocumentNeedSign(trialId) {
+ return request({
+ url: `/TrialDocument/getUserIsHaveDocumentNeedSign/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getDicomAndNoneDicomStudyList(param) {
+ return request({
+ url: `/study/getDicomAndNoneDicomStudyList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialExternalUserList(param) {
+ return request({
+ url: `/TrialExternalUser/getTrialExternalUserList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateTrialExternalUser(param) {
+ return request({
+ url: `/TrialExternalUser/addOrUpdateTrialExternalUser`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyUserIsCanAddOrUpdate(param) {
+ return request({
+ url: `/TrialExternalUser/verifyUserIsCanAddOrUpdate`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function sendInviteEmail(param) {
+ return request({
+ url: `/TrialExternalUser/sendInviteEmail`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteTrialExternalUser(id) {
+ return request({
+ url: `/TrialExternalUser/deleteTrialExternalUser/${id}`,
+ method: 'delete'
+ })
+}
+export function getBasicStat() {
+ return request({
+ url: `/PersonalWorkstation/getBasicStat`,
+ method: 'get'
+ })
+}
+
+export function getTrialDocStatList(param) {
+ return request({
+ url: `/PersonalWorkstation/getTrialDocStatList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSiteSurveyApprovalList(param) {
+ return request({
+ url: `/PersonalWorkstation/getSiteSurveyApprovalList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getWaitSignSysDocList(param) {
+ return request({
+ url: `/SystemDocument/getWaitSignSysDocList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function forwardSVDicomImage(trialId, param) {
+ return request({
+ url: `/QCOperation/forwardSVDicomImage/${trialId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDicomAndNoneDicomStudyMonitorList(param) {
+ return request({
+ url: `/Study/getDicomAndNoneDicomStudyMonitorList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function isQCCanOpt(subjectVisitId) {
+ return request({
+ url: `/QCOperation/isQCCanOpt?subjectVisitId=${subjectVisitId}`,
+ method: 'get'
+ })
+}
+
+export function rejectCheckBack(trialId, subjectVisitId) {
+ return request({
+ url: `/QCOperation/rejectCheckBack/${trialId}/${subjectVisitId}`,
+ method: 'put'
+ })
+}
+
+export function sendExternalUserJoinEmail(param) {
+ return request({
+ url: `/TrialExternalUser/sendExternalUserJoinEmail`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadModuleList(param) {
+ return request({
+ url: `/ReadModule/getReadModuleList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingPeriodSetList(param) {
+ return request({
+ url: `/ReadingPeriodSet/getReadingPeriodSetList`,
+ method: 'post',
+ data: param
+ })
+}
+export function addOrUpdateReadingPeriodSet(param) {
+ return request({
+ url: `/ReadingPeriodSet/addOrUpdateReadingPeriodSet`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteReadingPeriodSet(id) {
+ return request({
+ url: `/ReadingPeriodSet/deleteReadingPeriodSet/${id}`,
+ method: 'delete'
+ })
+}
+export function getClinicalDataList(param) {
+ return request({
+ url: `/ClinicalData/getClinicalDataList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function uploadClinicalDataFile(trialId, id, isVisit, file) {
+ const formData = new FormData()
+ formData.append('file', file)
+ return request({
+ url: `/ClinicalData/UploadClinicalData/${trialId}/${id}/${isVisit}`,
+ method: 'post',
+ data: formData
+ })
+}
+
+// export function addOrUpdateReadingPreviousPDF(param) {
+// return request({
+// url: `/PreviousPDF/addOrUpdateReadingPreviousPDF`,
+// method: 'post',
+// data: param
+// })
+// }
+
+// export function getPreviousPDFList(param) {
+// return request({
+// url: `/PreviousPDF/getPreviousPDFList`,
+// method: 'post',
+// data: param
+// })
+// }
+
+export function getReadingClinicalDataList(param) {
+ return request({
+ url: `/ReadingClinicalData/getReadingClinicalDataList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateReadingClinicalData(param) {
+ return request({
+ url: `/ReadingClinicalData/addOrUpdateReadingClinicalData`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteReadingClinicalData(id) {
+ return request({
+ url: `/ReadingClinicalData/deleteReadingClinicalData/${id}`,
+ method: 'delete'
+ })
+}
+
+export function deleteReadingClinicalDataPDF(id) {
+ return request({
+ url: `/ReadingClinicalData/deleteReadingClinicalDataPDF/${id}`,
+ method: 'delete'
+ })
+}
+
+export function ReadClinicalDataSign(param) {
+ return request({
+ url: `/Inspection/ReadClinicalData/ReadClinicalDataSign`,
+ method: 'post',
+ data: param
+ })
+}
+export function uploadClinicalData(trialId, subjectId, readingId, param) {
+ return request({
+ url: `/ClinicalData/UploadClinicalData/${trialId}/${subjectId}/${readingId}`,
+ method: 'post',
+ data: param
+ })
+}
+export function setReadingPeriodSetEffect(param) {
+ return request({
+ url: `/ReadingPeriodSet/setReadingPeriodSetEffect`,
+ method: 'put',
+ data: param
+ })
+}
+export function deleteReadModule(id) {
+ return request({
+ url: `/ReadModule/deleteReadModule/${id}`,
+ method: 'delete'
+ })
+}
+export function addReadModule(param) {
+ return request({
+ url: `/ReadModule/addReadModule`,
+ method: 'post',
+ data: param
+ })
+}
+export function getPreviewTheReadingList(param) {
+ return request({
+ url: `/ReadingPeriodSet/getPreviewTheReadingList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getPreviewTheReadingPlanList(param) {
+ return request({
+ url: `/ReadingPeriodSet/getPreviewTheReadingPlanList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function generateReadingTask(param) {
+ return request({
+ url: `/ReadingPeriodSet/generateReadingTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSubjectReadVisitList(id, subjectId, TrialReadingCriterionId) {
+ return request({
+ url: `/ReadModule/getSubjectReadVisitList?ReadingSetType=${id}&SubjectId=${subjectId}&TrialReadingCriterionId=${TrialReadingCriterionId}`,
+ method: 'get'
+ })
+}
+
+export function getReadModule(param) {
+ return request({
+ url: `/ReadModule/getReadModule`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getVisitTaskList(param) {
+ return request({
+ url: `/VisitTask/getVisitTaskList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingVisitList(param) {
+ return request({
+ url: `/ReadingPeriodSet/getReadingVisitList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialClinicalDataTrialSetList(param) {
+ return request({
+ url: `/ClinicalDataSet/getTrialClinicalDataTrialSetList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateClinicalDataTrialSet(param) {
+ return request({
+ url: `/ClinicalDataSet/addOrUpdateClinicalDataTrialSet`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteClinicalTrialSetData(id) {
+ return request({
+ url: `/ClinicalDataSet/deleteClinicalTrialSetData/${id}`,
+ method: 'delete'
+ })
+}
+
+export function setClinicalDataCheckd(param) {
+ return request({
+ url: `/ClinicalDataSet/setClinicalDataCheckd`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialClinicalDataSelect(param) {
+ return request({
+ url: `/ReadingClinicalData/getTrialClinicalDataSelect`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateReadingQuestionCriterionTrial(param) {
+ return request({
+ url: `/ReadingQuestion/addOrUpdateReadingQuestionCriterionTrial`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingQuestionCriterionTrialList(param) {
+ return request({
+ url: `/ReadingQuestion/getReadingQuestionCriterionTrialList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteReadingQuestionCriterionTrial(id) {
+ return request({
+ url: `/ReadingQuestion/deleteReadingQuestionCriterionTrial/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getReadingQuestionTrialList(param) {
+ return request({
+ url: `/ReadingQuestion/getReadingQuestionTrialList`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteReadingQuestionTrial(id) {
+ return request({
+ url: `/ReadingQuestion/deleteReadingQuestionTrial/${id}`,
+ method: 'delete'
+ })
+}
+
+export function addOrUpdateReadingQuestionTrial(param) {
+ return request({
+ url: `/ReadingQuestion/addOrUpdateReadingQuestionTrial`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialCriterionOtherQuestion(param) {
+ return request({
+ url: `/ReadingQuestion/getTrialCriterionOtherQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getIRUnReadSubjectTaskList(param) {
+ return request({
+ url: `/VisitTask/getIRUnReadSubjectTaskList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setTrialReadingQuestionCriterionIsIsCompleteConfig(param) {
+ return request({
+ url: `/ReadingQuestion/setTrialReadingQuestionCriterionIsIsCompleteConfig`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialGroupNameList(param) {
+ return request({
+ url: `/ReadingQuestion/getTrialGroupNameList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getIRHaveReadTaskList(param) {
+ return request({
+ url: `/VisitTask/getIRHaveReadTaskList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getIRReReadingTaskList(param) {
+ return request({
+ url: `/VisitTask/getIRReReadingTaskList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingImageFile(param) {
+ return request({
+ url: `/ReadingImageTask/getReadingImageFile`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialConfirmCriterionList(param) {
+ return request({
+ url: `/ReadingImageTask/getTrialConfirmCriterionList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialReadingQuestion(param) {
+ return request({
+ url: `/ReadingImageTask/getTrialReadingQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitVisitTaskQuestionsInDto(param) {
+ return request({
+ url: `/Inspection/ReadingImageTask/SubmitVisitTaskQuestions`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function saveVisitTaskQuestions(param) {
+ return request({
+ url: `/ReadingImageTask/saveVisitTaskQuestions`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getJudgeReadingInfo(param) {
+ return request({
+ url: `/ReadingImageTask/getJudgeReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function saveJudgeVisitTaskResult(param) {
+ return request({
+ url: `/ReadingImageTask/SaveJudgeVisitTaskResult`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitJudgeVisitTaskResult(param) {
+ return request({
+ url: `/Inspection/ReadingImageTask/SubmitJudgeVisitTaskResult`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingPastResultList(param) {
+ return request({
+ url: `/ReadingImageTask/getReadingPastResultList`,
+ method: 'post',
+ data: param
+ })
+}
+export function uploadClinicalTemplate(file, trialId) {
+ const formData = new FormData()
+ formData.append('file', file)
+
+ return request({
+ url: trialId ? `/ClinicalData/UploadClinicalTemplate?trialId=${trialId}` : `/ClinicalData/UploadClinicalTemplate`,
+ method: 'post',
+ data: formData
+ })
+}
+
+export function getCRCClinicalData(param) {
+ return request({
+ url: `/ReadingClinicalData/getCRCClinicalData`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function DownloadTrialClinicalFile(clinicalDataTrialSetId) {
+ return requestDownload({
+ url: `/CommonDocument/DownloadTrialClinicalFile?clinicalDataTrialSetId=${clinicalDataTrialSetId}`,
+ method: 'get',
+ responseType: 'blob'
+ })
+}
+
+export function getMIMMedicalReviewTaskList(param) {
+ return request({
+ url: `/TaskMedicalReview/getMIMMedicalReviewTaskList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingMedicineTrialQuestionList(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/getReadingMedicineTrialQuestionList`,
+ method: 'post',
+ data: param
+ })
+}
+export function addTrialDataFromSystem(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/addTrialDataFromSystem`,
+ method: 'post',
+ data: param
+ })
+}
+export function getReadingMedicineTrialOtherQuestion(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/getReadingMedicineTrialOtherQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+export function addOrUpdateReadingMedicineTrialQuestion(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/addOrUpdateReadingMedicineTrialQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteReadingMedicineTrialQuestion(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/deleteReadingMedicineTrialQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+export function getReadingOrTaskClinicalDataList(param) {
+ return request({
+ url: `/ReadingClinicalData/getReadingOrTaskClinicalDataList`,
+ method: 'post',
+ data: param
+ })
+}
+export function getMedicineQuestionPreview(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/getMedicineQuestionPreview`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function confirmReadingMedicineQuestion(param) {
+ return request({
+ url: `/Inspection/ReadingMedicineQuestion/ConfirmReadingMedicineQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getMedicalReviewReadingTask(param) {
+ return request({
+ url: `/ReadingMedicalReview/getMedicalReviewReadingTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function saveMedicineQuestion(param) {
+ return request({
+ url: `/ReadingMedicalReview/saveMedicineQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+export function saveMedicalReviewInfo(param) {
+ return request({
+ url: `/ReadingMedicalReview/saveMedicalReviewInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function UploadMedicalReviewImage(trialId, taskMedicalReviewId, param) {
+ return request({
+ url: `/TaskMedicalReview/UploadMedicalReviewImage/${trialId}/${taskMedicalReviewId}`,
+ method: 'post',
+ data: param
+ })
+}
+export function FinishMedicalReview(param) {
+ return request({
+ url: `/Inspection/ReadingMedicalReview/FinishMedicalReview`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getMedicalReviewDialog(param) {
+ return request({
+ url: `/ReadingMedicalReview/getMedicalReviewDialog`,
+ method: 'post',
+ data: param
+ })
+}
+export function sendMedicalReviewDialog(param) {
+ return request({
+ url: `/ReadingMedicalReview/sendMedicalReviewDialog`,
+ method: 'post',
+ data: param
+ })
+}
+export function iRConfirmMedicalReview(param) {
+ return request({
+ url: `/ReadingMedicalReview/iRConfirmMedicalReview`,
+ method: 'post',
+ data: param
+ })
+}
+export function getIRMedicalFeedbackList(param) {
+ return request({
+ url: `/ReadingMedicalReview/getIRMedicalFeedbackList`,
+ method: 'post',
+ data: param
+ })
+}
+export function closedMedicalReviewDialog(param) {
+ return request({
+ url: `/ReadingMedicalReview/closedMedicalReviewDialog`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function iRSendMedicalReviewDialog(param) {
+ return request({
+ url: `/ReadingMedicalReview/iRSendMedicalReviewDialog`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getNextTask(param) {
+ return request({
+ url: `/ReadingImageTask/getNextTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setEnrollReadingCategory(param) {
+ return request({
+ url: `/DoctorWorkload/setEnrollReadingCategory`,
+ method: 'post',
+ data: param
+ })
+}
+export function uploadJudgeTaskImage(trialId, visitTaskId, param) {
+ return request({
+ url: `/VisitTask/UploadJudgeTaskImage/${trialId}/${visitTaskId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCriterionReadingInfo(param) {
+ return request({
+ url: `/TrialConfig/getCriterionReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setCriterionReadingInfo(param) {
+ return request({
+ url: `/TrialConfig/setCriterionReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialCriterionList(trialId, isHaveSigned) {
+ return request({
+ url: isHaveSigned === false ? `/VisitTask/getTrialCriterionList?TrialId=${trialId}&isHaveSigned=${isHaveSigned}` : `/VisitTask/getTrialCriterionList?TrialId=${trialId}`,
+ method: 'get'
+ })
+}
+export function getTrialCriterionList2(trialId, isHaveSigned) {
+ return request({
+ url: isHaveSigned === false ? `/VisitTask/getTrialCriterionList?TrialId=${trialId}&IsAutoCreate=${isHaveSigned}` : `/VisitTask/getTrialCriterionList?TrialId=${trialId}`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateReadingCriterionPage(param) {
+ return request({
+ url: `/ReadingQuestion/addOrUpdateReadingCriterionPage`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setTrialReadingCriterion(param) {
+ return request({
+ url: `/TrialConfig/setTrialReadingCriterion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialReadingCriterionInfo(param) {
+ return request({
+ url: `/TrialConfig/getTrialReadingCriterionInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingCriterionPageList(param) {
+ return request({
+ url: `/TrialConfig/getReadingCriterionPageList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteReadingCriterionPage(id) {
+ return request({
+ url: `/ReadingQuestion/deleteReadingCriterionPage/${id}`,
+ method: 'delete'
+ })
+}
+export function trialReadingInfoSign(param) {
+ return request({
+ url: `/Inspection/configTrialBasicInfo/TrialReadingInfoSign`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getGlobalReadingInfo(param) {
+ return request({
+ url: `/ReadingImageTask/getGlobalReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function saveGlobalReadingInfo(param) {
+ return request({
+ url: `/ReadingImageTask/saveGlobalReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getHistoryGlobalInfo(param) {
+ return request({
+ url: `/ReadingImageTask/getHistoryGlobalInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitGlobalReadingInfo(param) {
+ return request({
+ url: `/Inspection/ReadingImageTask/SubmitGlobalReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function trialReadingInfoSignVerify(param) {
+ return request({
+ url: `/TrialConfig/trialReadingInfoSignVerify`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getOncologySet(param) {
+ return request({
+ url: `/TrialConfig/getOncologySet`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setOncologySet(param) {
+ return request({
+ url: `/TrialConfig/setOncologySet`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getOncologyReadingInfo(param) {
+ return request({
+ url: `/ReadingImageTask/getOncologyReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setOncologyReadingInfo(param) {
+ return request({
+ url: `/ReadingImageTask/setOncologyReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitOncologyReadingInfo(param) {
+ return request({
+ url: `/Inspection/ReadingImageTask/SubmitOncologyReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function uploadReadingAnswerImage(trialId, visitTaskId, param) {
+ return request({
+ url: `/VisitTask/UploadReadingAnswerImage/${trialId}/${visitTaskId}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyeCriterionNeedSynchronize(param) {
+ return request({
+ url: `/ReadingQuestion/verifyeCriterionNeedSynchronize`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function synchronizeCriterion(param) {
+ return request({
+ url: `/ReadingQuestion/synchronizeCriterion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingTableQuestionSystemList(param) {
+ return request({
+ url: `/ReadingQuestion/getReadingTableQuestionSystemList`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteReadingTableQuestionSystem(id) {
+ return request({
+ url: `/ReadingQuestion/deleteReadingTableQuestionSystem/${id}`,
+ method: 'delete'
+ })
+}
+
+export function addOrUpdateReadingTableQuestionSystem(param) {
+ return request({
+ url: `/ReadingQuestion/addOrUpdateReadingTableQuestionSystem`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingTableOtherQuestionSystem(param) {
+ return request({
+ url: `/ReadingQuestion/getReadingTableOtherQuestionSystem`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyReadingMedicineQuestion(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/verifyReadingMedicineQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyTrialConfigSignatureConfirm(param) {
+ return request({
+ url: `/TrialConfig/verifyTrialConfigSignatureConfirm`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialOrganList(param) {
+ return request({
+ url: `/OrganInfo/getTrialOrganList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialCheckOrganList(param) {
+ return request({
+ url: `/OrganInfo/getTrialCheckOrganList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteTrialOrganInfo(id) {
+ return request({
+ url: `/OrganInfo/deleteTrialOrganInfo/${id}`,
+ method: 'delete'
+ })
+}
+
+export function batchAddTrialOrgan(param) {
+ return request({
+ url: `/OrganInfo/batchAddTrialOrgan`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSystemCriterionList() {
+ return request({
+ url: `/ReadingQuestion/getSystemCriterionList`,
+ method: 'post'
+ })
+}
+
+export function synchronizeSystemOrganToTrial(param) {
+ return request({
+ url: `/OrganInfo/synchronizeSystemOrganToTrial`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setOrganIsEnable(param) {
+ return request({
+ url: `/OrganInfo/setOrganIsEnable`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCriterionLesionType(param) {
+ return request({
+ url: `/OrganInfo/getCriterionLesionType`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingTableQuestionTrialList(param) {
+ return request({
+ url: `/ReadingQuestion/getReadingTableQuestionTrialList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateReadingTableQuestionTrial(param) {
+ return request({
+ url: `/ReadingQuestion/addOrUpdateReadingTableQuestionTrial`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteReadingTableQuestionTrial(id) {
+ return request({
+ url: `/ReadingQuestion/deleteReadingTableQuestionTrial/${id}`,
+ method: 'delete'
+ })
+}
+
+export function getReadingTableOtherQuestionTrial(param) {
+ return request({
+ url: `/ReadingQuestion/getReadingTableOtherQuestionTrial`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getRelatedVisitTask(param) {
+ return request({
+ url: `/ReadingImageTask/getRelatedVisitTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getReadingQuestionAndAnswer(param) {
+ return request({
+ url: `/ReadingImageTask/getReadingQuestionAndAnswer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitTableQuestion(param) {
+ return request({
+ url: `/ReadingImageTask/submitTableQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTableAnswerRowInfoList(visitTaskId) {
+ return request({
+ url: `/ReadingImageTask/getTableAnswerRowInfoList?visitTaskId=${visitTaskId}`,
+ method: 'get'
+ })
+}
+
+export function getReadingReportEvaluation(param) {
+ return request({
+ url: `/ReadingImageTask/getReadingReportEvaluation`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitDicomVisitTask(param) {
+ return request({
+ url: `/Inspection/ReadingImageTask/SubmitDicomVisitTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getDicomReadingQuestionAnswer(param) {
+ return request({
+ url: `/ReadingImageTask/getDicomReadingQuestionAnswer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function changeDicomReadingQuestionAnswer(param) {
+ return request({
+ url: `/ReadingImageTask/changeDicomReadingQuestionAnswer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function saveImageQuality(param) {
+ return request({
+ url: `/ReadingImageTask/saveImageQuality`,
+ method: 'post',
+ data: param
+ })
+}
+export function deleteReadingRowAnswer(param) {
+ return request({
+ url: `/ReadingImageTask/deleteReadingRowAnswer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyVisitTaskQuestions(param) {
+ return request({
+ url: `/ReadingImageTask/verifyVisitTaskQuestions`,
+ method: 'post',
+ data: param
+ })
+}
+export function getSystemCriterionSelectList() {
+ return request({
+ url: `/ReadingQuestion/getSystemCriterionSelectList`,
+ method: 'post'
+ })
+}
+
+export function splitLesion(param) {
+ return request({
+ url: `/ReadingImageTask/splitLesion`,
+ method: 'post',
+ data: param
+ })
+}
+export function getReadingTool(param) {
+ return request({
+ url: `/ReadingImageTask/getReadingTool`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialCriterionSelectList(param) {
+ return request({
+ url: `/ClinicalDataSet/getTrialCriterionSelectList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setGlobalReadingInfo(param) {
+ return request({
+ url: `/TrialConfig/setGlobalReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialConfigGlobalReadingInfo(param) {
+ return request({
+ url: `/TrialConfig/getGlobalReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function asyncTrialCriterionDictionary(param) {
+ return request({
+ url: `/TrialConfig/asyncTrialCriterionDictionary`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialEmailNoticeConfigList(param) {
+ return request({
+ url: `/TrialEmailNoticeConfig/getTrialEmailNoticeConfigList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateTrialEmailNoticeConfig(param) {
+ return request({
+ url: `/TrialEmailNoticeConfig/addOrUpdateTrialEmailNoticeConfig`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialUserTypeSelectList(trialId) {
+ return request({
+ url: `/TrialEmailNoticeConfig/getTrialUserTypeSelectList?trialId=${trialId}`,
+ method: 'get'
+ })
+}
+
+export function resetTrialCriterionAsyncState(TrialReadingCriterionId) {
+ return request({
+ url: `/ReadingQuestion/resetTrialCriterionAsyncState?TrialReadingCriterionId=${TrialReadingCriterionId}`,
+ method: 'post'
+ })
+}
+
+export function getReadingVisitStudyList(trialId, sujectVisitId, visitTaskId) {
+ return request({
+ url: `/SubjectVisit/getReadingVisitStudyList`,
+ method: 'post',
+ data: {
+ trialId,
+ sujectVisitId,
+ visitTaskId
+ }
+ })
+}
+export function localFilePreview(relativePath) {
+ return request({
+ url: `/Common/LocalFilePreview?relativePath=${relativePath}`,
+ method: 'get'
+ })
+}
+
+export function getReadingOrganList(param) {
+ return request({
+ url: `/OrganInfo/getReadingOrganList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCalculateQuestions(param) {
+ return request({
+ url: `/ReadingQuestion/getCalculateQuestions`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCalculateTableQuestions(param) {
+ return request({
+ url: `/ReadingQuestion/getCalculateTableQuestions`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function readClinicalData(param) {
+ return request({
+ url: `/ReadingImageTask/readClinicalData`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCustomQuestionPreview(param) {
+ return request({
+ url: `/ReadingQuestion/getCustomQuestionPreview`,
+ method: 'post',
+ data: param
+ })
+}
+export function getCustomTableQuestionPreview(param) {
+ return request({
+ url: `/ReadingQuestion/GetCustomTableQuestionPreview`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyReadingRestTime(param) {
+ return request({
+ url: `/ReadingImageTask/verifyReadingRestTime`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getInstanceList(seriesId) {
+ return request({
+ url: `/Instance/list/${seriesId}`,
+ method: 'get'
+ })
+}
+
+export function getQuestionCalculateRelation(param) {
+ return request({
+ url: `/ReadingQuestion/getQuestionCalculateRelation`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCustomTableQuestionAnswer(param) {
+ return request({
+ url: `/ReadingImageTask/getCustomTableQuestionAnswer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function verifyDefaultQuestionBeAnswer(param) {
+ return request({
+ url: `/ReadingImageTask/verifyDefaultQuestionBeAnswer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateVisitBlindName(param) {
+ return request({
+ url: `/VisitPlan/updateVisitBlindName`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function getNextMedicalReviewTask(param) {
+ return request({
+ url: `/TaskMedicalReview/getNextMedicalReviewTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function batchSubmitGlobalReadingInfo(param) {
+ return request({
+ url: `/ReadingImageTask/batchSubmitGlobalReadingInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function aIRReReading(param) {
+ return request({
+ url: `/VisitTask/aIRReReading`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function changeCalculationAnswer(param) {
+ return request({
+ url: `/ReadingImageTask/changeCalculationAnswer`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialEmail(param) {
+ return request({
+ url: `/TrialEmailNoticeConfig/getTrialEmail`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setTrialEmail(param) {
+ return request({
+ url: `/TrialEmailNoticeConfig/setTrialEmail`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setTaskUrgent(param) {
+ return request({
+ url: `/VisitTask/setTaskUrgent`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getNextQCInfo(param) {
+ return request({
+ url: `/QCList/getNextQCInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function manualGenerateEmailFile(param) {
+ return request({
+ url: `/TrialEmailNoticeConfig/manualGenerateEmailFile`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function manualSendEmail(param) {
+ return request({
+ url: `/TrialEmailNoticeConfig/manualSendEmail?VisitTaskId=${param.VisitTaskId}&SendFileRelativePath=${param.SendFileRelativePath}`,
+ method: 'put'
+ })
+}
+
+export function preArchiveStudy(param) {
+ return request({
+ url: `/Study/preArchiveStudy`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function preArchiveDicomStudy(param) {
+ return request({
+ url: `/Study/preArchiveDicomStudy`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialCriterionAdditionalAssessmentOptionList(TrialReadingCriterionId) {
+ return request({
+ url: `/TrialConfig/getTrialCriterionAdditionalAssessmentOptionList?TrialReadingCriterionId=${TrialReadingCriterionId}`,
+ method: 'get'
+ })
+}
+
+export function setTrialCriterionAdditionalAssessment(param) {
+ return request({
+ url: `/TrialConfig/setTrialCriterionAdditionalAssessment`,
+ method: 'post',
+ data: param
+ })
+}
+export function getTaskAdditionalQuestion(param) {
+ return request({
+ url: `/ReadingImageTask/getTaskAdditionalQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitTaskAdditionalQuestion(param) {
+ return request({
+ url: `/ReadingImageTask/submitTaskAdditionalQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSubjectCriteriaEvaluationList(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/getSubjectCriteriaEvaluationList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateArchiveStudy(param) {
+ return request({
+ url: `/Study/addOrUpdateArchiveStudy`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getManualList(param) {
+ return request({
+ url: `/ReadingImageTask/getManualList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function dicomUploadInProgress(param) {
+ return request({
+ url: `/Study/dicomUploadInProgress?TrialId=${param.trialId}&StudyInstanceUid=${param.studyInstanceUid}`,
+ method: 'get'
+ })
+}
+
+export function getCanChangeReadVisitList(param) {
+ return request({
+ url: `/ReadModule/getCanChangeReadVisitList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function changeCutOffVisit(param) {
+ return request({
+ url: `/ReadModule/changeCutOffVisit`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function batchDeteteCriterionMedicineQuestion(param) {
+ return request({
+ url: `/ReadingMedicineQuestion/batchDeteteCriterionMedicineQuestion`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getTrialToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialUserToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getTrialUserToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCheckToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getCheckToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getImageClinicalDataToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getImageClinicalDataToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCRCSubjectClinicalList(param) {
+ return request({
+ url: `/ClinicalAnswer/getCRCSubjectClinicalList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialClinicalQuestionPreview(param) {
+ return request({
+ url: `/ClinicalQuestion/getTrialClinicalQuestionPreview`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function submitClinicalForm(param) {
+ return request({
+ url: `/ClinicalAnswer/submitClinicalForm`,
+ method: 'post',
+ data: param
+ })
+}
+export function getReReadingApplyToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getReReadingApplyToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteClinicalForm(param) {
+ return request({
+ url: `/ClinicalAnswer/deleteClinicalForm`,
+ method: 'post',
+ data: param
+ })
+}
+export function getPM_ReviewerSelectToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getPM_ReviewerSelectToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCRCConfirmList(param) {
+ return request({
+ url: `/ClinicalAnswer/getCRCConfirmList`,
+ method: 'post',
+ data: param
+ })
+}
+export function getSPM_ReviewerSelectToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getSPM_ReviewerSelectToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+
+export function getSPMReReadingApprovalToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getSPMReReadingApprovalToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCRCImageQuestionToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getCRCImageQuestionToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getImageCheckQuestionToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getImageCheckQuestionToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getImageReUploadToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getImageReUploadToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+export function getImageSubmittedToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getImageSubmittedToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+export function getImageQualityToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getImageQualityToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getQCImageQuestionToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getQCImageQuestionToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getIRImageReadingToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getIRImageReadingToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getIRMedicalCommentsToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getIRMedicalCommentsToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+export function getMIMMedicalCommentsToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getMIMMedicalCommentsToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getImageClinicalDataToBeConfirmList(param) {
+ return request({
+ url: `/PersonalWorkstation/GetImageClinicalDataToBeConfirmList`,
+ method: 'post',
+ data: param
+ })
+}
+
+
+export function getCRCBeConfirmList(param) {
+ return request({
+ url: `/ClinicalAnswer/getCRCBeConfirmList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function cRCCancelConfirmClinical(param) {
+ return request({
+ url: `/Inspection/ClinicalAnswer/cRCCancelConfirmClinical`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function cRCConfirmClinical(param) {
+ return request({
+ url: `/Inspection/ClinicalAnswer/cRCConfirmClinical`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getClinicalTableList(param) {
+ return request({
+ url: `/ClinicalAnswer/getClinicalTableList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getClinicalDateList(param) {
+ return request({
+ url: `/ClinicalAnswer/getClinicalDateList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function CRCSignClinicalData(param) {
+ return request({
+ url: `/Inspection/ClinicalAnswer/CRCSignClinicalData`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getPMClinicalDataToBeDoneList(param) {
+ return request({
+ url: `/PersonalWorkstation/getPMClinicalDataToBeDoneList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getPMConfirmList(param) {
+ return request({
+ url: `/ClinicalAnswer/getPMConfirmList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function PMConfirmClinical(param) {
+ return request({
+ url: `/Inspection/ClinicalAnswer/PMConfirmClinical`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function SubmitClinicalFormAndSign(param) {
+ return request({
+ url: `/Inspection/ClinicalAnswer/SubmitClinicalFormAndSign`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSystemClinicalQuestionPreview(param) {
+ return request({
+ url: `/ClinicalQuestion/getSystemClinicalQuestionPreview`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialSiteSurveySelectList(param) {
+ return request({
+ url: `/TrialSiteSurvey/getTrialSiteSurveySelectList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteCustomTag(id) {
+ return request({
+ url: `/ReadingImageTask/deleteCustomTag/${id}`,
+ method: 'post',
+ })
+}
+
+export function uploadTrialSiteSurveyUser(trialId,baseUrl,routeUrl,param) {
+ return request({
+ url: `/TrialSiteSurvey/UploadTrialSiteSurveyUser?trialId=${trialId}&baseUrl=${baseUrl}&routeUrl=${routeUrl}`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addClinicalDataDialog(visiTaskId, content) {
+ return request({
+ url: `/VisitTask/addClinicalDataDialog?visiTaskId=${visiTaskId}&content=${content}`,
+ method: 'post'
+ })
+}
+
+export function getClinicalDataDialog(visiTaskId) {
+ return request({
+ url: `/VisitTask/getClinicalDataDialog?visiTaskId=${visiTaskId}`,
+ method: 'get'
+ })
+}
+
+export function collectNextIQCQuality(param) {
+ return request({
+ url: `/QCOperation/collectNextIQCQuality`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getNextIQCQuality(param) {
+ return request({
+ url: `/QCOperation/getNextIQCQuality`,
+ method: 'post',
+ data: param
+ })
+}
diff --git a/src/api/trials/attachment.js b/src/api/trials/attachment.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/api/trials/enrolled-reviewer.js b/src/api/trials/enrolled-reviewer.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/api/trials/inspection.js b/src/api/trials/inspection.js
new file mode 100644
index 0000000..5150eb5
--- /dev/null
+++ b/src/api/trials/inspection.js
@@ -0,0 +1,16 @@
+import request from '@/utils/request'
+
+export function getInspectionList(param) {
+ return request({
+ url: `/Inspection/getInspectionList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getInspectionJsonDataList(trialId, id) {
+ return request({
+ url: `/FrontAuditConfig/getInspectionJsonDataList?TrialId=${trialId}&Id=${id}`,
+ method: 'get'
+ })
+}
diff --git a/src/api/trials/reading.js b/src/api/trials/reading.js
new file mode 100644
index 0000000..a41256e
--- /dev/null
+++ b/src/api/trials/reading.js
@@ -0,0 +1,476 @@
+import request from '@/utils/request'
+
+export function getTaskAllocationRuleList(params) {
+ return request({
+ url: `/TaskAllocationRule/getTaskAllocationRuleList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addOrUpdateTaskAllocationRule(params) {
+ return request({
+ url: `/TaskAllocationRule/addOrUpdateTaskAllocationRule`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteTaskAllocationRule(taskAllocationRuleId) {
+ return request({
+ url: `/TaskAllocationRule/deleteTaskAllocationRule/${taskAllocationRuleId}`,
+ method: 'delete'
+ })
+}
+
+export function getDoctorUserSelectList(trialId) {
+ return request({
+ url: `/VisitTask/GetTrialDoctorUserSelectList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function configTrialTaskInfo(params) {
+ return request({
+ url: `/TrialConfig/configTrialTaskInfo`,
+ method: 'put',
+ data: params
+ })
+}
+
+export function getSubjectAssignList(params) {
+ return request({
+ url: `/VisitTask/getSubjectAssignList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function assignSubjectDoctor(params) {
+ return request({
+ url: `/VisitTask/assignSubjectDoctor`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function cancelSubjectAssignDoctor(params) {
+ return request({
+ url: `/VisitTask/cancelSubjectAssignDoctor`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function manualAssignDoctorApplyTask(params) {
+ return request({
+ url: `/VisitTask/manualAssignDoctorApplyTask`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function autoSubjectAssignDoctor(params) {
+ return request({
+ url: `/VisitTask/autoSubjectAssignDoctor`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function assignSubjectTaskToDoctor(params) {
+ return request({
+ url: `/VisitTask/assignSubjectTaskToDoctor`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getReadingTaskList(params) {
+ return request({
+ url: `/VisitTask/getReadingTaskList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getReReadingTaskList(params) {
+ return request({
+ url: `/VisitTask/getReReadingTaskList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSubjectApplyDoctorTaskStatList(params) {
+ return request({
+ url: `/TaskAllocationRule/getSubjectApplyDoctorTaskStatList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function configTrialReadingTaskViewRule(params) {
+ return request({
+ url: `/TrialConfig/configTrialReadingTaskViewRule`,
+ method: 'put',
+ data: params
+ })
+}
+
+export function getTrialConfirmCriterionList(params) {
+ return request({
+ url: `/ReadingImageTask/getTrialConfirmCriterionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialCriterionJudgeQuestionList(params) {
+ return request({
+ url: `/ReadingImageTask/getTrialCriterionJudgeQuestionList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function setTrialCriterionJudgeQuestionAnswerGroup(params) {
+ return request({
+ url: `/ReadingImageTask/setTrialCriterionJudgeQuestionAnswerGroup`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getJudgeVisitTaskList(params) {
+ return request({
+ url: `/VisitTask/getJudgeVisitTaskList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function applyReReading(params) {
+ return request({
+ url: `/VisitTask/applyReReading`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getMedicalReviewTaskList(params) {
+ return request({
+ url: `/TaskMedicalReview/getMedicalReviewTaskList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getMIMUserList(trialId) {
+ return request({
+ url: `/TaskMedicalReview/getMIMUserList/${trialId}`,
+ method: 'get'
+ })
+}
+
+export function getTaskMedicalReviewRuleList(params) {
+ return request({
+ url: `/TaskMedicalReviewRule/getTaskMedicalReviewRuleList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addOrUpdateTaskMedicalReviewRule(params) {
+ return request({
+ url: `/TaskMedicalReviewRule/addOrUpdateTaskMedicalReviewRule`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteTaskMedicalReviewRule(taskMedicalReviewRuleId) {
+ return request({
+ url: `/TaskMedicalReviewRule/deleteTaskMedicalReviewRule/${taskMedicalReviewRuleId}`,
+ method: 'delete'
+ })
+}
+
+export function generateMedicalReviewTask(params) {
+ return request({
+ url: `/TaskMedicalReview/generateMedicalReviewTask`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function assignMedicalReviewTask(params) {
+ return request({
+ url: `/TaskMedicalReview/assignMedicalReviewTask`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getAnalysisTaskList(params) {
+ return request({
+ url: `/TaskConsistentRule/getAnalysisTaskList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getDoctorConsistentRuleSubjectList(params) {
+ return request({
+ url: `/TaskConsistentRule/getDoctorConsistentRuleSubjectList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function confirmGenerateConsistentTask(params) {
+ return request({
+ url: `/TaskConsistentRule/confirmGenerateConsistentTask`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTaskConsistentRuleList(params) {
+ return request({
+ url: `/TaskConsistentRule/getTaskConsistentRuleList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addOrUpdateTaskConsistentRule(params) {
+ return request({
+ url: `/TaskConsistentRule/addOrUpdateTaskConsistentRule`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteTaskConsistentRule(taskConsistentRuleId) {
+ return request({
+ url: `/TaskConsistentRule/deleteTaskConsistentRule/${taskConsistentRuleId}`,
+ method: 'delete'
+ })
+}
+
+export function getSPMReReadingTaskList(params) {
+ return request({
+ url: `/VisitTask/getSPMReReadingTaskList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getGenerateMedicalReviewTaskList(params) {
+ return request({
+ url: `/TaskMedicalReview/getGenerateMedicalReviewTaskList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function manuallyGeneratedAndAssignedMedicalReview(params) {
+ return request({
+ url: `/TaskMedicalReview/manuallyGeneratedAndAssignedMedicalReview`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSelfConsistentRuleList(params) {
+ return request({
+ url: `/TaskConsistentRule/getSelfConsistentRuleList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getDoctorSelfConsistentRuleSubjectList(params) {
+ return request({
+ url: `/TaskConsistentRule/getDoctorSelfConsistentRuleSubjectList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function confirmGenerateSelfConsistentTask(params) {
+ return request({
+ url: `/TaskConsistentRule/confirmGenerateSelfConsistentTask`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSelfConsistentDoctorStatList(params) {
+ return request({
+ url: `/TaskConsistentRule/getSelfConsistentDoctorStatList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getGroupConsistentRuleSubjectList(params) {
+ return request({
+ url: `/TaskConsistentRule/getGroupConsistentRuleSubjectList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getConsistentRule(params) {
+ return request({
+ url: `/TaskConsistentRule/getConsistentRule`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function confirmGenerateGroupConsistentTask(params) {
+ return request({
+ url: `/TaskConsistentRule/confirmGenerateGroupConsistentTask`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getReReadingOrBackInfluenceTaskList(taskId, isReReading, applyId) {
+ return request({
+ url: applyId ? `/VisitTask/getReReadingOrBackInfluenceTaskList/${taskId}/${isReReading}?applyId=${applyId}` : `/VisitTask/getReReadingOrBackInfluenceTaskList/${taskId}/${isReReading}`,
+ method: 'get'
+ })
+}
+
+export function PMSetTaskBack(trialId, taskId) {
+ return request({
+ url: `/VisitTask/PMSetTaskBack/${trialId}/${taskId}`,
+ method: 'put'
+ })
+}
+
+export function confirmReReading(params) {
+ return request({
+ url: `/Inspection/VisitTask/ConfirmReReading`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getInfluencedTaskList(taskId) {
+ return request({
+ url: `/VisitTask/getInfluencedTaskList?taskId=${taskId}`,
+ method: 'get'
+ })
+}
+
+export function getDoctorPlanAllocationRuleList(params) {
+ return request({
+ url: `/TaskAllocationRule/getDoctorPlanAllocationRuleList?TrialId=${params.TrialId}`,
+ method: 'get'
+ })
+}
+
+export function getSubjectAssignAndTaskStatList(params) {
+ return request({
+ url: `/VisitTask/getSubjectAssignAndTaskStatList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function batchAssignDoctorToSubject(params) {
+ return request({
+ url: `/VisitTask/batchAssignDoctorToSubject`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getDoctorSubjectStat(TrialId, TrialReadingCriterionId) {
+ return request({
+ url: `/VisitTask/getDoctorSubjectStat?TrialId=${TrialId}&TrialReadingCriterionId=${TrialReadingCriterionId}`,
+ method: 'get'
+ })
+}
+
+export function getDoctorSelectList(params) {
+ return request({
+ url: `/TaskAllocationRule/getDoctorSelectList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialSiteCodeSelect(TrialId) {
+ return request({
+ url: `/TrialMaintenance/getTrialSiteCodeSelect?TrialId=${TrialId}`,
+ method: 'get'
+ })
+}
+
+export function getSubjectAssignedDoctorList(SubjectId, TrialReadingCriterionId) {
+ return request({
+ url: `/VisitTask/getSubjectAssignedDoctorList?SubjectId=${SubjectId}&TrialReadingCriterionId=${TrialReadingCriterionId}`,
+ method: 'get'
+ })
+}
+
+export function cancelSubjectAssignedDoctor(params) {
+ return request({
+ url: `/VisitTask/cancelSubjectAssignedDoctor`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addSubjectCancelDoctorNote(params) {
+ return request({
+ url: `/TaskAllocationRule/addSubjectCancelDoctorNote`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getSubjectCancelDoctorHistoryList(SubjectId) {
+ return request({
+ url: `/TaskAllocationRule/getSubjectCancelDoctorHistoryList?SubjectId=${SubjectId}`,
+ method: 'get'
+ })
+}
+
+export function setAnalysisTaskInvalid(params) {
+ return request({
+ url: `/TaskConsistentRule/setAnalysisTaskInvalid`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function setMedicalReviewInvalid(params) {
+ return request({
+ url: `/TaskMedicalReview/setMedicalReviewInvalid`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialCriterionList(trialId) {
+ return request({
+ url: `/VisitTask/getTrialCriterionList?TrialId=${trialId}`,
+ method: 'get'
+ })
+}
+
+export function updateTrialReviewerState(params) {
+ return request({
+ url: `/DoctorWorkload/updateTrialReviewerState`,
+ method: 'put',
+ data: params
+ })
+}
+
diff --git a/src/api/trials/setting.js b/src/api/trials/setting.js
new file mode 100644
index 0000000..1df89e8
--- /dev/null
+++ b/src/api/trials/setting.js
@@ -0,0 +1,97 @@
+import request from '@/utils/request'
+
+export function deleteTrialExternalUser(trialExternalUserId, isSystemUser, systemUserId) {
+ return request({
+ url: `/TrialExternalUser/deleteTrialExternalUser/${trialExternalUserId}/${isSystemUser}/${systemUserId}`,
+ method: 'delete'
+ })
+}
+
+export function configTrialBasicInfo(params) {
+ return request({
+ url: `/Inspection/configTrialBasicInfo/configTrialBasicInfo`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function configTrialProcessInfo(params) {
+ return request({
+ url: `/Inspection/configTrialBasicInfo/configTrialProcessInfo`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function configTrialUrgentInfo(params) {
+ return request({
+ url: `/Inspection/configTrialBasicInfo/ConfigTrialUrgentInfo`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function addOrUpdateVisitStage(params) {
+ return request({
+ url: `/Inspection/VisitPlan/AddOrUpdateVisitStage`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function confirmTrialVisitPlan(params) {
+ return request({
+ url: `/Inspection/VisitPlan/ConfirmTrialVisitPlan`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function trialConfigSignatureConfirm(params) {
+ return request({
+ url: `/Inspection/configTrialBasicInfo/TrialConfigSignatureConfirm`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function ConfigTrialBasicInfoConfirm(params) {
+ return request({
+ url: `/Inspection/configTrialBasicInfo/ConfigTrialBasicInfoConfirm`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function ConfigTrialProcessInfoConfirm(params) {
+ return request({
+ url: `/Inspection/configTrialBasicInfo/ConfigTrialProcessInfoConfirm`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function ConfigTrialUrgentInfoConfirm(params) {
+ return request({
+ url: `/Inspection/configTrialBasicInfo/ConfigTrialUrgentInfoConfirm`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function setTrialJudgyInfo(params) {
+ return request({
+ url: `/ReadingQuestion/setTrialJudgyInfo`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getTrialJudgyInfo(params) {
+ return request({
+ url: `/ReadingQuestion/getTrialJudgyInfo`,
+ method: 'post',
+ data: params
+ })
+}
+
diff --git a/src/api/trials/site.js b/src/api/trials/site.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/api/trials/study.js b/src/api/trials/study.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/api/trials/subject.js b/src/api/trials/subject.js
new file mode 100644
index 0000000..d379743
--- /dev/null
+++ b/src/api/trials/subject.js
@@ -0,0 +1,105 @@
+import request from '@/utils/request'
+
+export function addOrUpdateSubject(param) {
+ return request({
+ url: '/Inspection/Subject/AddOrUpdateSubject',
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateSubjectStatus(param) {
+ return request({
+ url: `/Inspection/Subject/UpdateSubjectStatus`,
+ method: 'put',
+ data: param
+ })
+}
+export function deleteSubject(param) {
+ return request({
+ url: `/Inspection/Subject/DeleteSubject`,
+ method: 'delete',
+ data: param
+ })
+}
+
+export function PMClinicalDataConfirm(param) {
+ return request({
+ url: `/ReadingClinicalData/PMClinicalDataConfirm`,
+ method: 'put',
+ data: param
+ })
+}
+
+export function getSubjectCriteriaEvaluationList(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/getSubjectCriteriaEvaluationList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function batchAddOrUpdateSubjectCriteriaEvaluation(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/batchAddOrUpdateSubjectCriteriaEvaluation`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getSubjectCriteriaEvaluationVisitFilterList(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/getSubjectCriteriaEvaluationVisitFilterList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getHaveGeneratedTaskList(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/getHaveGeneratedTaskList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function batchGenerateTask(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/batchGenerateTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getVisitStudyAndSeriesList(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/getVisitStudyAndSeriesList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function batchAddSubjectCriteriaEvaluationVisitStudyFilter(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/batchAddSubjectCriteriaEvaluationVisitStudyFilter`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getCriteriaVisitBackInfluenceTaskList(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/getCriteriaVisitBackInfluenceTaskList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function confirmBackCriteriaVisitTask(param) {
+ return request({
+ url: `/SubjectCriteriaEvaluation/confirmBackCriteriaVisitTask`,
+ method: 'post',
+ data: param
+ })
+}
+
diff --git a/src/api/trials/trial-information.js b/src/api/trials/trial-information.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/api/trials/trials.js b/src/api/trials/trials.js
new file mode 100644
index 0000000..4256314
--- /dev/null
+++ b/src/api/trials/trials.js
@@ -0,0 +1,32 @@
+import request from '@/utils/request'
+
+export function addOrUpdateTrial(param) {
+ return request({
+ url: '/Inspection/trial/addOrUpdateTrial',
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateTrialState(param) {
+ return request({
+ url: '/Inspection/TrialConfig/updateTrialState',
+ method: 'post',
+ data: param
+ })
+}
+
+export function userConfirm(param) {
+ return request({
+ url: '/Inspection/TrialDocument/userConfirm',
+ method: 'post',
+ data: param
+ })
+}
+
+export function getTrialCriterionList(trialId) {
+ return request({
+ url: `/VisitTask/getTrialCriterionList?TrialId=${trialId}`,
+ method: 'get'
+ })
+}
diff --git a/src/api/trials/visit.js b/src/api/trials/visit.js
new file mode 100644
index 0000000..c27c397
--- /dev/null
+++ b/src/api/trials/visit.js
@@ -0,0 +1,290 @@
+import request from '@/utils/request'
+
+export function addOrUpdateSubjectVisit(param) {
+ return request({
+ url: `/Inspection/subjectVisit/addOrUpdateSV`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteSubjectVisit(param) {
+ return request({
+ url: `/Inspection/subjectVisit/deleteSV`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteStudyList(param) {
+ return request({
+ url: `/Inspection/QCOperation/deleteStudyList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateSubjectAndSVInfo(param) {
+ return request({
+ url: `/Inspection/QCOperation/updateSubjectAndSVInfo`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateNoneDicomStudy(param) {
+ return request({
+ url: `/Inspection/noneDicomStudy/addOrUpdateNoneDicomStudy`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteNoneDicomStudy(param) {
+ return request({
+ url: `/Inspection/noneDicom/DeleteNoneDicomStudy`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdatePreviousHistory(param) {
+ return request({
+ url: `/Inspection/clinicalData/AddOrUpdatePreviousHistory`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePreviousHistory(param) {
+ return request({
+ url: `/Inspection/clinicalData/DeletePreviousHistory`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdatePreviousSurgery(param) {
+ return request({
+ url: `/Inspection/clinicalData/AddOrUpdatePreviousSurgery`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePreviousSurgery(param) {
+ return request({
+ url: `/Inspection/clinicalData/DeletePreviousSurgery`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdatePreviousOther(param) {
+ return request({
+ url: `/Inspection/clinicalData/AddOrUpdatePreviousOther`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deletePreviousOther(param) {
+ return request({
+ url: `/Inspection/clinicalData/DeletePreviousOther`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function newUploadNoneDicomFile(param) {
+ return request({
+ url: `/NoneDicomStudy/newUploadNoneDicomFile`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function deleteNoneDicomStudyFile(param) {
+ return request({
+ url: `/Inspection/noneDicom/deleteNoneDicomStudyFile`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function cRCRequestToQC(param) {
+ return request({
+ url: `/Inspection/QCOperation/CRCRequestToQC`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function obtainOrCancelQCTask(param) {
+ return request({
+ url: `/Inspection/QCOperation/ObtainOrCancelQCTask`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateQCQuestionAnswerList(param) {
+ return request({
+ url: `/Inspection/QCOperation/AddOrUpdateQCQuestionAnswerList`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addOrUpdateQCChallenge(param) {
+ return request({
+ url: `/Inspection/QCOperation/AddOrUpdateQCChallenge`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addQCChallengeReply(param) {
+ return request({
+ url: `/Inspection/QCOperation/AddQCChallengeReply`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function closeQCChallenge(param) {
+ return request({
+ url: `/Inspection/QCOperation/CloseQCChallenge`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function seleteQCChallenge(param) {
+ return request({
+ url: `/Inspection/QCOperation/DeleteQCChallenge`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function sddCheckChallengeReply(param) {
+ return request({
+ url: `/Inspection/QCOperation/AddCheckChallengeReply`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function closeCheckChallenge(param) {
+ return request({
+ url: `/Inspection/QCOperation/CloseCheckChallenge`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setCheckPass(param) {
+ return request({
+ url: `/Inspection/QCOperation/SetCheckPass`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function cRCRequstCheckBack(param) {
+ return request({
+ url: `/Inspection/QCOperation/CRCRequstCheckBack`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function checkBack(param) {
+ return request({
+ url: `/Inspection/QCOperation/CheckBack`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function cRCRequestReUpload(param) {
+ return request({
+ url: `/Inspection/QCOperation/CRCRequestReUpload`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setNeedReupload(param) {
+ return request({
+ url: `/Inspection/QCOperation/SetNeedReupload`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setReuploadFinished(param) {
+ return request({
+ url: `/Inspection/QCOperation/SetReuploadFinished`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function updateModality(param) {
+ return request({
+ url: `/Inspection/QCOperation/UpdateModality`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function qCPassedOrFailed(param) {
+ return request({
+ url: `/Inspection/QCOperation/QCPassedOrFailed`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setSeriesState(param) {
+ return request({
+ url: `/Inspection/QCOperation/SetSeriesState`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function setSubjectVisitUrgent(param) {
+ return request({
+ url: `/Inspection/subjectVisit/SetSubjectVisitUrgent`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function uploadVisitCheckExcel(param) {
+ return request({
+ url: `/Inspection/QCOperation/UploadVisitCheckExcel`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function addCheckChallengeReply(param) {
+ return request({
+ url: `/Inspection/QCOperation/AddCheckChallengeReply`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function forwardSVDicomImage(param) {
+ return request({
+ url: `/Inspection/QCOperation/ForwardSVDicomImage`,
+ method: 'post',
+ data: param
+ })
+}
+
diff --git a/src/api/user.js b/src/api/user.js
new file mode 100644
index 0000000..4f7b98b
--- /dev/null
+++ b/src/api/user.js
@@ -0,0 +1,163 @@
+import request from '@/utils/request'
+
+export function login(data) {
+ return request({
+ url: '/user/login',
+ method: 'post',
+ data
+ })
+}
+
+export function getAllDictionary() {
+ return request({
+ url: '/dictionary/getAllDictionary',
+ method: 'get'
+ })
+}
+
+export function getHospitalList() {
+ return request({
+ url: '/hospital/hospitalList',
+ method: 'get'
+ })
+}
+
+export function sendVerificationCode(emailOrPhone) {
+ return request({
+ url: `/user/sendVerificationCode/${emailOrPhone}`,
+ method: 'get'
+ })
+}
+export function anonymousSendVerificationCode(emailOrPhone) {
+ return request({
+ url: `/user/anonymousSendVerificationCode/${emailOrPhone}`,
+ method: 'get'
+ })
+}
+
+export function verifyAnonymousVerifyCode(email, verifyCode) {
+ return request({
+ url: `/User/verifyAnonymousVerifyCode/${email}/${verifyCode}`,
+ method: 'get'
+ })
+}
+
+export function anonymousSetPassword(userId, newPwd) {
+ return request({
+ url: `/User/anonymousSetPassword/${userId}/${newPwd}`,
+ method: 'get'
+ })
+}
+export function setNewPassword(param) {
+ return request({
+ url: `/user/setNewPassword`,
+ method: 'post',
+ data: param
+ })
+}
+
+export function getUserMenuTree() {
+ return request({
+ url: `/Menu/getUserMenuTree`,
+ method: 'get'
+ })
+}
+
+export function getUserPermissions() {
+ return request({
+ url: `/Menu/getUserPermissions`,
+ method: 'get'
+ })
+}
+
+export function getDoctorShortcutKey(params) {
+ return request({
+ url: `/ShortcutKey/getDoctorShortcutKey`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function setShortcutKey(params) {
+ return request({
+ url: `/ShortcutKey/setShortcutKey`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function restoreDefaultShortcutKey(params) {
+ return request({
+ url: `/ShortcutKey/restoreDefaultShortcutKey`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function getUserWLTemplateList() {
+ return request({
+ url: `/UserWLTemplate/getUserWLTemplateList`,
+ method: 'get'
+ })
+}
+
+export function addOrUpdateUserWLTemplate(params) {
+ return request({
+ url: `/UserWLTemplate/addOrUpdateUserWLTemplate`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function deleteUserWLTemplate(userWLTemplateId) {
+ return request({
+ url: `/UserWLTemplate/deleteUserWLTemplate/${userWLTemplateId}`,
+ method: 'delete'
+ })
+}
+
+export function getAutoCutNextTask(params) {
+ return request({
+ url: `/UserWLTemplate/getAutoCutNextTask`,
+ method: 'post',
+ data: params
+ })
+}
+export function setAutoCutNextTask(params) {
+ return request({
+ url: `/UserWLTemplate/setAutoCutNextTask`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function loginOut() {
+ return request({
+ url: `/User/loginOut`,
+ method: 'get'
+ })
+}
+
+export function getUserLogList(params) {
+ return request({
+ url: `/User/getUserLogList`,
+ method: 'post',
+ data: params
+ })
+}
+
+export function GenerateSTS(params) {
+ return request({
+ url: `/user/GenerateSTS`,
+ method: 'get'
+ })
+}
+
+export function GetObjectStoreToken(params) {
+ return request({
+ url: `/user/GetObjectStoreToken`,
+ method: 'get'
+ })
+}
+
+
diff --git a/src/assets/404_images/404.png b/src/assets/404_images/404.png
new file mode 100644
index 0000000..3d8e230
Binary files /dev/null and b/src/assets/404_images/404.png differ
diff --git a/src/assets/404_images/404_cloud.png b/src/assets/404_images/404_cloud.png
new file mode 100644
index 0000000..c6281d0
Binary files /dev/null and b/src/assets/404_images/404_cloud.png differ
diff --git a/src/assets/Admin.png b/src/assets/Admin.png
new file mode 100644
index 0000000..ff55a5c
Binary files /dev/null and b/src/assets/Admin.png differ
diff --git a/src/assets/CRC.png b/src/assets/CRC.png
new file mode 100644
index 0000000..fa3e264
Binary files /dev/null and b/src/assets/CRC.png differ
diff --git a/src/assets/IR.png b/src/assets/IR.png
new file mode 100644
index 0000000..1e012b8
Binary files /dev/null and b/src/assets/IR.png differ
diff --git a/src/assets/MIM.png b/src/assets/MIM.png
new file mode 100644
index 0000000..14606fc
Binary files /dev/null and b/src/assets/MIM.png differ
diff --git a/src/assets/PM.png b/src/assets/PM.png
new file mode 100644
index 0000000..dc657c5
Binary files /dev/null and b/src/assets/PM.png differ
diff --git a/src/assets/QC.png b/src/assets/QC.png
new file mode 100644
index 0000000..965da6a
Binary files /dev/null and b/src/assets/QC.png differ
diff --git a/src/assets/avatar.png b/src/assets/avatar.png
new file mode 100644
index 0000000..467b219
Binary files /dev/null and b/src/assets/avatar.png differ
diff --git a/src/assets/bg.jpg b/src/assets/bg.jpg
new file mode 100644
index 0000000..fcedb0e
Binary files /dev/null and b/src/assets/bg.jpg differ
diff --git a/src/assets/css/iconfont/index.css b/src/assets/css/iconfont/index.css
new file mode 100644
index 0000000..a29bbea
--- /dev/null
+++ b/src/assets/css/iconfont/index.css
@@ -0,0 +1,34 @@
+/*@font-face {*/
+/* font-family: 'iconfont'; !* Project id 3270795 *!*/
+/* src: url('//at.alicdn.com/t/font_3270795_x0vmvmv3h.woff2?t=1648018931344') format('woff2'),*/
+/* url('//at.alicdn.com/t/font_3270795_x0vmvmv3h.woff?t=1648018931344') format('woff'),*/
+/* url('//at.alicdn.com/t/font_3270795_x0vmvmv3h.ttf?t=1648018931344') format('truetype');*/
+/*}*/
+
+
+@font-face {
+ font-family: "iconfont"; /* Project id 3270795 */
+ src: url('//at.alicdn.com/t/c/font_3270795_fcd739rubku.woff2?t=1673580130618') format('woff2'),
+ url('//at.alicdn.com/t/c/font_3270795_fcd739rubku.woff?t=1673580130618') format('woff'),
+ url('//at.alicdn.com/t/c/font_3270795_fcd739rubku.ttf?t=1673580130618') format('truetype');
+}
+
+.iconfont {
+ font-family: "iconfont" !important;
+ font-size: 20px;
+ font-style: normal;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+.icon-24gl-split:before {
+ content: "\eb73";
+}
+
+.icon-anjianfengexian:before {
+ content: "\e680";
+}
+
+.icon-back:before {
+ content: "\e670";
+}
diff --git a/src/assets/css/myViewer.css b/src/assets/css/myViewer.css
new file mode 100644
index 0000000..fc33e29
--- /dev/null
+++ b/src/assets/css/myViewer.css
@@ -0,0 +1,447 @@
+/*!
+ * Viewer.js v1.11.1
+ * https://fengyuanchen.github.io/viewerjs
+ *
+ * Copyright 2015-present Chen Fengyuan
+ * Released under the MIT license
+ *
+ * Date: 2022-11-06T05:18:17.414Z
+ */
+
+.viewer-zoom-in::before, .viewer-zoom-out::before, .viewer-one-to-one::before, .viewer-reset::before, .viewer-prev::before, .viewer-play::before, .viewer-next::before, .viewer-rotate-left::before, .viewer-rotate-right::before, .viewer-flip-horizontal::before, .viewer-flip-vertical::before, .viewer-fullscreen::before, .viewer-fullscreen-exit::before, .viewer-close::before {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAUCAYAAABWOyJDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAQPSURBVHic7Zs/iFxVFMa/0U2UaJGksUgnIVhYxVhpjDbZCBmLdAYECxsRFBTUamcXUiSNncgKQbSxsxH8gzAP3FU2jY0kKKJNiiiIghFlccnP4p3nPCdv3p9778vsLOcHB2bfveeb7955c3jvvNkBIMdxnD64a94GHMfZu3iBcRynN7zAOI7TG15gHCeeNUkr8zaxG2lbYDYsdgMbktBsP03jdQwljSXdtBhLOmtjowC9Mg9L+knSlcD8TNKpSA9lBpK2JF2VdDSR5n5J64m0qli399hNFMUlpshQii5jbXTbHGviB0nLNeNDSd9VO4A2UdB2fp+x0eCnaXxWXGA2X0au/3HgN9P4LFCjIANOJdrLr0zzZ+BEpNYDwKbpnQMeAw4m8HjQtM6Z9qa917zPQwFr3M5KgA6J5rTJCdFZJj9/lyvGhsDvwFNVuV2MhhjrK6b9bFiE+j1r87eBl4HDwCF7/U/k+ofAX5b/EXBv5JoLMuILzf3Ap6Z3EzgdqHMCuF7hcQf4HDgeoHnccncqdK/TvSDWffFXI/exICY/xZyqc6XLWF1UFZna4gJ7q8BsRvgd2/xXpo6P+D9dfT7PpECtA3cnWPM0GXGFZh/wgWltA+cDNC7X+AP4GzjZQe+k5dRxuYPeiuXU7e1qwLpDz7dFjXKRaSwuMLvAlG8zZlG+YmiK1HoFqT7wP2z+4Q45TfEGcMt01xLoNZEBTwRqD4BLpnMLeC1A41UmVxsXgXeBayV/Wx20rpTyrpnWRft7p6O/FdqzGrDukPNtkaMoMo3FBdBSQMOnYBCReyf05s126fU9ytfX98+mY54Kxnp7S9K3kj6U9KYdG0h6UdLbkh7poFXMfUnSOyVvL0h6VtIXHbS6nOP+s/Zm9mvyXW1uuC9ohZ72E9uDmXWLJOB1GxsH+DxPftsB8B6wlGDN02TAkxG6+4D3TWsbeC5CS8CDFce+AW500LhhOW2020TRjK3b21HEmgti9m0RonxbdMZeVzV+/4tF3cBpP7E9mKHNL5q8h5g0eYsCMQz0epq8gQrwMXAgcs0FGXGFRcB9wCemF9PkbYqM/Bas7fxLwNeJPdTdpo4itQti8lPMqTpXuozVRVXPpbHI3KkNTB1NfkL81j2mvhDp91HgV9MKuRIqrykj3WPq4rHyL+axj8/qGPmTqi6F9YDlHOvJU6oYcTsh/TYSzWmTE6JT19CtLTJt32D6CmHe0eQn1O8z5AXgT4sx4Vcu0/EQecMydB8z0hUWkTd2t4CrwNEePqMBcAR4mrBbwyXLPWJa8zrXmmLEhNBmfpkuY2102xxrih+pb+ieAb6vGhuA97UcJ5KR8gZ77K+99xxeYBzH6Q3/Z0fHcXrDC4zjOL3hBcZxnN74F+zlvXFWXF9PAAAAAElFTkSuQmCC");
+ background-repeat: no-repeat;
+ background-size: 280px;
+ color: transparent;
+ display: block;
+ font-size: 0;
+ height: 20px;
+ line-height: 0;
+ width: 20px;
+}
+
+.viewer-zoom-in::before {
+ background-position: 0 0;
+ content: "Zoom In";
+}
+
+.viewer-zoom-out::before {
+ background-position: -20px 0;
+ content: "Zoom Out";
+}
+
+.viewer-one-to-one::before {
+ background-position: -40px 0;
+ content: "One to One";
+}
+
+.viewer-reset::before {
+ background-position: -60px 0;
+ content: "Reset";
+}
+
+.viewer-prev::before {
+ background-position: -80px 0;
+ content: "Previous";
+}
+
+.viewer-play::before {
+ background-position: -100px 0;
+ content: "Play";
+}
+
+.viewer-next::before {
+ background-position: -120px 0;
+ content: "Next";
+}
+
+.viewer-rotate-left::before {
+ background-position: -140px 0;
+ content: "Rotate Left";
+}
+
+.viewer-rotate-right::before {
+ background-position: -160px 0;
+ content: "Rotate Right";
+}
+
+.viewer-flip-horizontal::before {
+ background-position: -180px 0;
+ content: "Flip Horizontal";
+}
+
+.viewer-flip-vertical::before {
+ background-position: -200px 0;
+ content: "Flip Vertical";
+}
+
+.viewer-fullscreen::before {
+ background-position: -220px 0;
+ content: "Enter Full Screen";
+}
+
+.viewer-fullscreen-exit::before {
+ background-position: -240px 0;
+ content: "Exit Full Screen";
+}
+
+.viewer-close::before {
+ background-position: -260px 0;
+ content: "Close";
+}
+
+.viewer-fixed.viewer-container {
+ z-index: 20000!important;
+ bottom: 0;
+ direction: ltr;
+ font-size: 0;
+ left: 0;
+ line-height: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ -webkit-tap-highlight-color: transparent;
+ top: 0;
+ -ms-touch-action: none;
+ touch-action: none;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.viewer-container::-moz-selection, .viewer-container *::-moz-selection {
+ background-color: transparent;
+}
+
+.viewer-container::selection,
+.viewer-container *::selection {
+ background-color: transparent;
+}
+
+.viewer-container:focus {
+ outline: 0;
+}
+
+.viewer-container img {
+ display: block;
+ height: auto;
+ max-height: none !important;
+ max-width: none !important;
+ min-height: 0 !important;
+ min-width: 0 !important;
+ width: 100%;
+}
+
+.viewer-canvas {
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.viewer-canvas > img {
+ height: auto;
+ margin: 15px auto;
+ max-width: 90% !important;
+ width: auto;
+}
+
+.viewer-footer {
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ text-align: center;
+}
+
+.viewer-navbar {
+ background-color: rgba(0, 0, 0, 50%);
+ overflow: hidden;
+}
+
+.viewer-list {
+ box-sizing: content-box;
+ height: 50px;
+ margin: 0;
+ overflow: hidden;
+ padding: 1px 0;
+}
+
+.viewer-list > li {
+ color: transparent;
+ cursor: pointer;
+ float: left;
+ font-size: 0;
+ height: 50px;
+ line-height: 0;
+ opacity: 0.5;
+ overflow: hidden;
+ transition: opacity 0.15s;
+ width: 30px;
+}
+
+.viewer-list > li:focus,
+.viewer-list > li:hover {
+ opacity: 0.75;
+}
+
+.viewer-list > li:focus {
+ outline: 0;
+}
+
+.viewer-list > li + li {
+ margin-left: 1px;
+}
+
+.viewer-list > .viewer-loading {
+ position: relative;
+}
+
+.viewer-list > .viewer-loading::after {
+ border-width: 2px;
+ height: 20px;
+ margin-left: -10px;
+ margin-top: -10px;
+ width: 20px;
+}
+
+.viewer-list > .viewer-active,
+.viewer-list > .viewer-active:focus,
+.viewer-list > .viewer-active:hover {
+ opacity: 1;
+}
+
+.viewer-player {
+ background-color: #000;
+ bottom: 0;
+ cursor: none;
+ display: none;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 1;
+}
+
+.viewer-player > img {
+ left: 0;
+ position: absolute;
+ top: 0;
+}
+
+.viewer-toolbar > ul {
+ display: inline-block;
+ margin: 0 auto 5px;
+ overflow: hidden;
+ padding: 6px 3px;
+}
+
+.viewer-toolbar > ul > li {
+ background-color: rgba(0, 0, 0, 50%);
+ border-radius: 50%;
+ cursor: pointer;
+ float: left;
+ height: 24px;
+ overflow: hidden;
+ transition: background-color 0.15s;
+ width: 24px;
+}
+
+.viewer-toolbar > ul > li:focus,
+.viewer-toolbar > ul > li:hover {
+ background-color: rgba(0, 0, 0, 80%);
+}
+
+.viewer-toolbar > ul > li:focus {
+ box-shadow: 0 0 3px #fff;
+ outline: 0;
+ position: relative;
+ z-index: 1;
+}
+
+.viewer-toolbar > ul > li::before {
+ margin: 2px;
+}
+
+.viewer-toolbar > ul > li + li {
+ margin-left: 1px;
+}
+
+.viewer-toolbar > ul > .viewer-small {
+ height: 18px;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ width: 18px;
+}
+
+.viewer-toolbar > ul > .viewer-small::before {
+ margin: -1px;
+}
+
+.viewer-toolbar > ul > .viewer-large {
+ height: 30px;
+ margin-bottom: -3px;
+ margin-top: -3px;
+ width: 30px;
+}
+
+.viewer-toolbar > ul > .viewer-large::before {
+ margin: 5px;
+}
+
+.viewer-tooltip {
+ background-color: rgba(0, 0, 0, 80%);
+ border-radius: 10px;
+ color: #fff;
+ display: none;
+ font-size: 12px;
+ height: 20px;
+ left: 50%;
+ line-height: 20px;
+ margin-left: -25px;
+ margin-top: -10px;
+ position: absolute;
+ text-align: center;
+ top: 50%;
+ width: 50px;
+}
+
+.viewer-title {
+ color: #ccc;
+ display: inline-block;
+ font-size: 12px;
+ line-height: 1.2;
+ margin: 5px 5%;
+ max-width: 90%;
+ min-height: 14px;
+ opacity: 0.8;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ transition: opacity 0.15s;
+ white-space: nowrap;
+}
+
+.viewer-title:hover {
+ opacity: 1;
+}
+
+.viewer-button {
+ -webkit-app-region: no-drag;
+ background-color: rgba(0, 0, 0, 50%);
+ border-radius: 50%;
+ cursor: pointer;
+ height: 80px;
+ overflow: hidden;
+ position: absolute;
+ right: -40px;
+ top: -40px;
+ transition: background-color 0.15s;
+ width: 80px;
+}
+
+.viewer-button:focus,
+.viewer-button:hover {
+ background-color: rgba(0, 0, 0, 80%);
+}
+
+.viewer-button:focus {
+ box-shadow: 0 0 3px #fff;
+ outline: 0;
+}
+
+.viewer-button::before {
+ bottom: 15px;
+ left: 15px;
+ position: absolute;
+}
+
+.viewer-fixed {
+ position: fixed;
+}
+
+.viewer-open {
+ overflow: hidden;
+}
+
+.viewer-show {
+ display: block;
+}
+
+.viewer-hide {
+ display: none;
+}
+
+.viewer-backdrop {
+ background-color: rgba(0, 0, 0, 50%);
+}
+
+.viewer-invisible {
+ visibility: hidden;
+}
+
+.viewer-move {
+ cursor: move;
+ cursor: grab;
+}
+
+.viewer-fade {
+ opacity: 0;
+}
+
+.viewer-in {
+ opacity: 1;
+}
+
+.viewer-transition {
+ transition: all 0.3s;
+}
+
+@keyframes viewer-spinner {
+ 0% {
+ transform: rotate(0deg);
+ }
+
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+.viewer-loading::after {
+ animation: viewer-spinner 1s linear infinite;
+ border: 4px solid rgba(255, 255, 255, 10%);
+ border-left-color: rgba(255, 255, 255, 50%);
+ border-radius: 50%;
+ content: "";
+ display: inline-block;
+ height: 40px;
+ left: 50%;
+ margin-left: -20px;
+ margin-top: -20px;
+ position: absolute;
+ top: 50%;
+ width: 40px;
+ z-index: 1;
+}
+
+@media (max-width: 767px) {
+ .viewer-hide-xs-down {
+ display: none;
+ }
+}
+
+@media (max-width: 991px) {
+ .viewer-hide-sm-down {
+ display: none;
+ }
+}
+
+@media (max-width: 1199px) {
+ .viewer-hide-md-down {
+ display: none;
+ }
+}
diff --git a/src/assets/css/theme-blue/color-green.css b/src/assets/css/theme-blue/color-green.css
new file mode 100644
index 0000000..9ce904c
--- /dev/null
+++ b/src/assets/css/theme-blue/color-green.css
@@ -0,0 +1,29 @@
+.header{
+ background-color: #07c4a8;
+}
+.login-wrap{
+ background: rgba(56, 157, 170, 0.82);;
+}
+.plugins-tips{
+ background: #f2f2f2;
+}
+.plugins-tips a{
+ color: #428bca;
+}
+.el-upload--text em {
+ color: #428bca;
+}
+.pure-button{
+ background: #428bca;
+}
+.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus {
+ background-color: #428bca !important;
+ border-color: #428bca !important;
+}
+.tags-li.active {
+ border: 1px solid #428bca;
+ background-color: #428bca;
+}
+.collapse-btn:hover{
+ background: #428bca;
+}
diff --git a/src/assets/css/theme-blue/fonts/element-icons.ttf b/src/assets/css/theme-blue/fonts/element-icons.ttf
new file mode 100644
index 0000000..91b74de
Binary files /dev/null and b/src/assets/css/theme-blue/fonts/element-icons.ttf differ
diff --git a/src/assets/css/theme-blue/fonts/element-icons.woff b/src/assets/css/theme-blue/fonts/element-icons.woff
new file mode 100644
index 0000000..02b9a25
Binary files /dev/null and b/src/assets/css/theme-blue/fonts/element-icons.woff differ
diff --git a/src/assets/css/theme-blue/index.css b/src/assets/css/theme-blue/index.css
new file mode 100644
index 0000000..d70243a
--- /dev/null
+++ b/src/assets/css/theme-blue/index.css
@@ -0,0 +1 @@
+@charset "UTF-8";.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}@font-face{font-family:element-icons;src:url("fonts/element-icons.woff") format("woff"),url("fonts/element-icons.ttf") format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:solid 1px #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#428bca;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-tag{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#428bca;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#428bca}.el-tag .el-tag__close{color:#428bca}.el-tag .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca}.el-tag.el-tag--success.is-hit{border-color:#428bca}.el-tag.el-tag--success .el-tag__close{color:#428bca}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.is-hit{border-color:#428bca}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#428bca}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.is-hit{border-color:#428bca}.el-tag--plain .el-tag__close{color:#428bca}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.el-tag--success.is-hit{border-color:#428bca}.el-tag--plain.el-tag--success .el-tag__close{color:#428bca}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#428bca;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#428bca}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#428bca}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;top:0;color:#fff;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:""}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#428bca}.el-pagination button:disabled{color:#c0c4cc;background-color:#fff;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat;background-size:16px;background-color:#fff;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#c0c4cc;cursor:not-allowed}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .arrow.disabled{visibility:hidden}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor{height:22px}.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#428bca}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .el-pager li.disabled{color:#c0c4cc}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev:disabled{color:#c0c4cc}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#428bca}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#428bca;color:#fff}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;display:inline-block;vertical-align:top;font-size:0;padding:0;margin:0}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;background:#fff;vertical-align:top;display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;margin:0}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#c0c4cc}.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pager li.btn-quicknext:hover{cursor:pointer}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#428bca}.el-pager li.active{color:#428bca;cursor:default}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@-webkit-keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-dialog{position:relative;margin:0 auto 50px;background:#fff;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);-webkit-box-sizing:border-box;box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px;padding-bottom:10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#428bca}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:20px;padding-top:10px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #e4e7ed;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li:hover{background-color:#f5f7fa}.el-autocomplete-suggestion li.highlighted{background-color:#f5f7fa}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#fff}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#428bca;border-color:#c6dcef;background-color:#ecf3fa}.el-button:active{color:#3b7db6;border-color:#3b7db6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#428bca;color:#428bca}.el-button.is-plain:active{background:#fff;border-color:#3b7db6;color:#3b7db6;outline:0}.el-button.is-active{color:#3b7db6;border-color:#3b7db6}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--primary:focus,.el-button--primary:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--primary:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--primary.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--primary.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--success{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--success:focus,.el-button--success:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--success:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--success.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--success.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#428bca;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#68a2d5;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3b7db6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover:not(.is-disabled)::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing){outline-width:0}.el-dropdown [disabled]{cursor:not-allowed;color:#bbb}.el-dropdown-menu{position:absolute;top:0;left:0;z-index:10;padding:10px 0;margin:5px 0;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#ecf3fa;color:#68a2d5}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #ebeef5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#fff}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:""}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover{background-color:#fff}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #428bca;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#fff;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #428bca;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-submenu{min-width:200px}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;z-index:10;border:1px solid #e4e7ed;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;min-width:200px;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#ecf3fa}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#428bca}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{height:56px;line-height:56px;font-size:14px;color:#303133;padding:0 20px;list-style:none;cursor:pointer;position:relative;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#ecf3fa}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#ecf3fa}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#428bca}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#428bca}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#428bca}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px 0}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:0;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#428bca}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#428bca;background:#428bca}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#428bca}.el-radio__input.is-focus .el-radio__inner{border-color:#428bca}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;position:relative;cursor:pointer;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#428bca}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #428bca;box-shadow:0 0 2px 2px #428bca}.el-radio__label{font-size:14px;padding-left:10px}.el-radio-group{display:inline-block;line-height:1;vertical-align:middle;font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{display:inline-block;line-height:1;white-space:nowrap;vertical-align:middle;background:#fff;border:1px solid #dcdfe6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#428bca}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#fff;background-color:#428bca;border-color:#428bca;-webkit-box-shadow:-1px 0 0 0 #428bca;box-shadow:-1px 0 0 0 #428bca}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#f2f6fc}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #428bca;box-shadow:0 0 2px 2px #428bca}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#428bca}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#428bca}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#428bca}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#428bca}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#428bca;border-color:#428bca;-webkit-box-shadow:-1px 0 0 0 #8eb9df;box-shadow:-1px 0 0 0 #8eb9df}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#428bca}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#428bca}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;display:inline-block;font-size:14px;font-weight:500;cursor:pointer;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#428bca}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;display:inline-block;position:relative;width:40px;height:20px;border:1px solid #dcdfe6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#dcdfe6;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#fff}.el-switch.is-checked .el-switch__core{border-color:#428bca;background-color:#428bca}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-select-dropdown{position:absolute;z-index:1001;border:solid 1px #e4e7ed;border-radius:4px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item{padding-right:40px}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#428bca;background-color:#fff}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#f5f7fa}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-tag{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#428bca;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#428bca}.el-tag .el-tag__close{color:#428bca}.el-tag .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca}.el-tag.el-tag--success.is-hit{border-color:#428bca}.el-tag.el-tag--success .el-tag__close{color:#428bca}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.is-hit{border-color:#428bca}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#428bca}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.is-hit{border-color:#428bca}.el-tag--plain .el-tag__close{color:#428bca}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.el-tag--success.is-hit{border-color:#428bca}.el-tag--plain.el-tag--success .el-tag__close{color:#428bca}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#fff}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#f5f7fa}.el-select-dropdown__item.selected{color:#428bca;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#e4e7ed}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#c0c4cc}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#428bca}.el-select .el-input .el-select__caret{color:#c0c4cc;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#c0c4cc;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#e4e7ed}.el-select .el-input.is-focus .el-input__inner{border-color:#428bca}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#c0c4cc;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select__tags-text{overflow:hidden;text-overflow:ellipsis}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5;display:-webkit-box;display:-ms-flexbox;display:flex;max-width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-select .el-tag__close.el-icon-close{background-color:#c0c4cc;top:0;color:#fff;-ms-flex-negative:0;flex-shrink:0}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#428bca;border-color:#c6dcef;background-color:#ecf3fa}.el-button:active{color:#3b7db6;border-color:#3b7db6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#428bca;color:#428bca}.el-button.is-plain:active{background:#fff;border-color:#3b7db6;color:#3b7db6;outline:0}.el-button.is-active{color:#3b7db6;border-color:#3b7db6}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--primary:focus,.el-button--primary:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--primary:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--primary.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--primary.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--success{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--success:focus,.el-button--success:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--success:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--success.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--success.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#428bca;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#68a2d5;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3b7db6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#428bca}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#428bca}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#428bca}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#428bca}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#428bca;border-color:#428bca;-webkit-box-shadow:-1px 0 0 0 #8eb9df;box-shadow:-1px 0 0 0 #8eb9df}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#428bca}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#428bca}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-tag{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#428bca;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#428bca}.el-tag .el-tag__close{color:#428bca}.el-tag .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca}.el-tag.el-tag--success.is-hit{border-color:#428bca}.el-tag.el-tag--success .el-tag__close{color:#428bca}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.is-hit{border-color:#428bca}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#428bca}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.is-hit{border-color:#428bca}.el-tag--plain .el-tag__close{color:#428bca}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.el-tag--success.is-hit{border-color:#428bca}.el-tag--plain.el-tag--success .el-tag__close{color:#428bca}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;background-color:#fff;font-size:14px;color:#606266}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;font-size:12px;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell{background-color:#fff}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th.el-table__cell{background:#f5f7fa}.el-table .el-table__cell{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table--medium .el-table__cell{padding:10px 0}.el-table--small{font-size:12px}.el-table--small .el-table__cell{padding:8px 0}.el-table--mini{font-size:12px}.el-table--mini .el-table__cell{padding:6px 0}.el-table tr{background-color:#fff}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:1px solid #ebeef5}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{overflow:hidden;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:#fff}.el-table th.el-table__cell>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th.el-table__cell>.cell.highlight{color:#428bca}.el-table th.el-table__cell.required>div::before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td.el-table__cell div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-left:10px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #ebeef5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#ebeef5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border .el-table__cell{border-right:1px solid #ebeef5}.el-table--border .el-table__cell:first-child .cell{padding-left:10px}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:1px solid #ebeef5;border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:1px solid #ebeef5}.el-table--hidden{visibility:hidden}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#ebeef5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#fff;border-bottom:1px solid #ebeef5}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td.el-table__cell{border-top:1px solid #ebeef5;background-color:#f5f7fa;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td.el-table__cell{border-top:1px solid #ebeef5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td.el-table__cell,.el-table__header-wrapper tbody td.el-table__cell{background-color:#f5f7fa;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #ebeef5}.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #ebeef5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:solid 5px transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#c0c4cc;top:5px}.el-table .sort-caret.descending{border-top-color:#c0c4cc;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#428bca}.el-table .descending .sort-caret.descending{border-top-color:#428bca}.el-table .hidden-columns{visibility:hidden;position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:#fafafa}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:#ecf3fa}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell{background-color:#f5f7fa}.el-table__body tr.current-row>td.el-table__cell{background-color:#ecf3fa}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #ebeef5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td.el-table__cell{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:#f5f7fa}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#428bca}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#428bca}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#428bca}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#428bca}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#428bca;border-color:#428bca;-webkit-box-shadow:-1px 0 0 0 #8eb9df;box-shadow:-1px 0 0 0 #8eb9df}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#428bca}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#428bca}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-tag{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#428bca;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#428bca}.el-tag .el-tag__close{color:#428bca}.el-tag .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca}.el-tag.el-tag--success.is-hit{border-color:#428bca}.el-tag.el-tag--success .el-tag__close{color:#428bca}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.is-hit{border-color:#428bca}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#428bca}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.is-hit{border-color:#428bca}.el-tag--plain .el-tag__close{color:#428bca}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.el-tag--success.is-hit{border-color:#428bca}.el-tag--plain.el-tag--success .el-tag__close{color:#428bca}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px #ebeef5;border-radius:2px;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#ecf3fa;color:#68a2d5}.el-table-filter__list-item.is-active{background-color:#428bca;color:#fff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #ebeef5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-table-filter__bottom button:hover{color:#428bca}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#f2f6fc}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table.is-week-mode .el-date-table__row.current div{background-color:#f2f6fc}.el-date-table td{width:32px;height:30px;padding:4px 0;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{height:30px;padding:3px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#c0c4cc}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#428bca;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#fff}.el-date-table td.available:hover{color:#428bca}.el-date-table td.in-range div{background-color:#f2f6fc}.el-date-table td.in-range div:hover{background-color:#f2f6fc}.el-date-table td.current:not(.disabled) span{color:#fff;background-color:#428bca}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#fff}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#428bca}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#f5f7fa;opacity:1;cursor:not-allowed;color:#c0c4cc}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#f2f6fc;border-radius:15px}.el-date-table td.selected div:hover{background-color:#f2f6fc}.el-date-table td.selected span{background-color:#428bca;color:#fff;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #ebeef5}.el-month-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#428bca;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#fff}.el-month-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-month-table td.disabled .cell:hover{color:#c0c4cc}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#428bca}.el-month-table td.in-range div{background-color:#f2f6fc}.el-month-table td.in-range div:hover{background-color:#f2f6fc}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#fff}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#fff;background-color:#428bca}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#428bca}.el-year-table{font-size:12px;margin:-1px;border-collapse:collapse}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#428bca;font-weight:700}.el-year-table td.disabled .cell{background-color:#f5f7fa;cursor:not-allowed;color:#c0c4cc}.el-year-table td.disabled .cell:hover{color:#c0c4cc}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover{color:#428bca}.el-year-table td.current:not(.disabled) .cell{color:#428bca}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#428bca}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active{border-color:#428bca}.el-range-editor.is-active:hover{border-color:#428bca}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#428bca}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#428bca}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#428bca}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label:hover{color:#428bca}.el-date-picker__header-label.active{color:#428bca}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#fff}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-time-panel{margin:5px 0;border:solid 1px #e4e7ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#428bca}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active{border-color:#428bca}.el-range-editor.is-active:hover{border-color:#428bca}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#428bca}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#428bca}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#428bca}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #ebeef5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label:hover{color:#428bca}.el-date-picker__header-label.active{color:#428bca}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#428bca;font-weight:700}.time-select-item.disabled{color:#e4e7ed;cursor:not-allowed}.time-select-item:hover{background-color:#f5f7fa;font-weight:700;cursor:pointer}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#c0c4cc;float:left;line-height:32px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;display:inline-block;height:100%;margin:0;padding:0;width:39%;text-align:center;font-size:14px;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-moz-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::-ms-input-placeholder{color:#c0c4cc}.el-date-editor .el-range-input::placeholder{color:#c0c4cc}.el-date-editor .el-range-separator{display:inline-block;height:100%;padding:0 5px;margin:0;text-align:center;line-height:32px;font-size:14px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#c0c4cc;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active{border-color:#428bca}.el-range-editor.is-active:hover{border-color:#428bca}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#e4e7ed}.el-range-editor.is-disabled input{background-color:#f5f7fa;color:#c0c4cc;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-moz-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#c0c4cc}.el-range-editor.is-disabled input::placeholder{color:#c0c4cc}.el-range-editor.is-disabled .el-range-separator{color:#c0c4cc}.el-picker-panel{color:#606266;border:1px solid #e4e7ed;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#fff;border-radius:4px;line-height:30px;margin:5px 0}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#fff;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#428bca}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#428bca}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#428bca}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#fff;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#fff;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#428bca}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner{padding:0;text-align:center}.el-time-spinner__list{padding:0;margin:0;list-style:none;text-align:center}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#f5f7fa;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#c0c4cc;cursor:not-allowed}.el-time-panel{margin:5px 0;border:solid 1px #e4e7ed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #e4e7ed;border-bottom:1px solid #e4e7ed}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#428bca}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #e4e7ed}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-popover{position:absolute;background:#fff;min-width:150px;border-radius:4px;border:1px solid #ebeef5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover:focus,.el-popover:focus:active{outline-width:0}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#428bca;border-color:#c6dcef;background-color:#ecf3fa}.el-button:active{color:#3b7db6;border-color:#3b7db6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#428bca;color:#428bca}.el-button.is-plain:active{background:#fff;border-color:#3b7db6;color:#3b7db6;outline:0}.el-button.is-active{color:#3b7db6;border-color:#3b7db6}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--primary:focus,.el-button--primary:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--primary:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--primary.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--primary.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--success{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--success:focus,.el-button--success:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--success:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--success.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--success.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#428bca;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#68a2d5;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3b7db6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#fff;border-radius:4px;border:1px solid #ebeef5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px;padding-bottom:10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#428bca}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__input input.invalid{border-color:#f56c6c}.el-message-box__input input.invalid:focus{border-color:#f56c6c}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#428bca}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#e6a23c}.el-message-box__status.el-icon-error{color:#f56c6c}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#f56c6c;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#c0c4cc}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#428bca;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px 0}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--medium .el-form-item__content{line-height:36px}.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__content{line-height:32px}.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__content{line-height:28px}.el-form-item--mini.el-form-item{margin-bottom:18px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#f56c6c;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#f56c6c;margin-right:4px}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus{border-color:#f56c6c}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#f56c6c}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#428bca;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645, .045, .355, 1);transition:-webkit-transform .3s cubic-bezier(.645, .045, .355, 1);transition:transform .3s cubic-bezier(.645, .045, .355, 1);transition:transform .3s cubic-bezier(.645, .045, .355, 1),-webkit-transform .3s cubic-bezier(.645, .045, .355, 1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#428bca}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#e4e7ed;z-index:1}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #428bca inset;box-shadow:0 0 2px 2px #428bca inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#c0c4cc;color:#fff}.el-tabs__item.is-active{color:#428bca}.el-tabs__item:hover{color:#428bca;cursor:pointer}.el-tabs__item.is-disabled{color:#c0c4cc;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #e4e7ed}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #e4e7ed;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #e4e7ed;-webkit-transition:color .3s cubic-bezier(.645, .045, .355, 1),padding .3s cubic-bezier(.645, .045, .355, 1);transition:color .3s cubic-bezier(.645, .045, .355, 1),padding .3s cubic-bezier(.645, .045, .355, 1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#fff}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close{width:14px}.el-tabs--border-card{background:#fff;border:1px solid #dcdfe6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#f5f7fa;border-bottom:1px solid #e4e7ed;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#428bca;background-color:#fff;border-right-color:#dcdfe6;border-left-color:#dcdfe6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#428bca}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#c0c4cc}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #dcdfe6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__nav-wrap.is-left::after{left:auto;right:0}.el-tabs--left .el-tabs__active-bar.is-left{right:0;left:auto}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #e4e7ed;border-bottom:none;border-top:1px solid #e4e7ed;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #e4e7ed;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #e4e7ed;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #e4e7ed;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #e4e7ed}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #e4e7ed;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #e4e7ed;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #e4e7ed;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:transparent;border-top-color:#d1dbe5;border-bottom-color:#d1dbe5}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tag{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#428bca;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#428bca}.el-tag .el-tag__close{color:#428bca}.el-tag .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca}.el-tag.el-tag--success.is-hit{border-color:#428bca}.el-tag.el-tag--success .el-tag__close{color:#428bca}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.is-hit{border-color:#428bca}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#428bca}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.is-hit{border-color:#428bca}.el-tag--plain .el-tag__close{color:#428bca}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.el-tag--success.is-hit{border-color:#428bca}.el-tag--plain.el-tag--success .el-tag__close{color:#428bca}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#428bca}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#428bca}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#428bca}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#428bca}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#428bca;border-color:#428bca;-webkit-box-shadow:-1px 0 0 0 #8eb9df;box-shadow:-1px 0 0 0 #8eb9df}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#428bca}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#428bca}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-tree{position:relative;cursor:default;background:#fff;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#428bca}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#f5f7fa}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#428bca;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#f5f7fa}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#c0c4cc;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#c0c4cc}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#f0f6fb}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#fff;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#c0c4cc}.el-alert.is-dark .el-alert__closebtn{color:#fff}.el-alert.is-dark .el-alert__description{color:#fff}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#ecf3fa;color:#428bca}.el-alert--success.is-light .el-alert__description{color:#428bca}.el-alert--success.is-dark{background-color:#428bca;color:#fff}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#fff}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#e6a23c}.el-alert--warning.is-light .el-alert__description{color:#e6a23c}.el-alert--warning.is-dark{background-color:#e6a23c;color:#fff}.el-alert--error.is-light{background-color:#fef0f0;color:#f56c6c}.el-alert--error.is-light .el-alert__description{color:#f56c6c}.el-alert--error.is-dark{background-color:#f56c6c;color:#fff}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-alert-fade-enter,.el-alert-fade-leave-active{opacity:0}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #ebeef5;position:fixed;background-color:#fff;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#428bca}.el-notification .el-icon-error{color:#f56c6c}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#e6a23c}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-notification-fade-leave-active{opacity:0}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#f5f7fa;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#428bca}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#428bca}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #dcdfe6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #dcdfe6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#e4e7ed;color:#e4e7ed}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#e4e7ed;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #dcdfe6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #dcdfe6;border-radius:0 0 4px 0}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing){outline-width:0}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#fff}.el-tooltip__popper.is-light{background:#fff;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#fff}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#fff}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#fff}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#fff}.el-slider::after,.el-slider::before{display:table;content:""}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#e4e7ed;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button{border-color:#c0c4cc}.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1)}.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging{cursor:not-allowed}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#428bca;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;position:absolute;z-index:1001;top:-15px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:transparent;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;line-height:normal}.el-slider__button-wrapper::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-slider__button-wrapper .el-tooltip{vertical-align:middle;display:inline-block}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:solid 2px #428bca;background-color:#fff;border-radius:50%;-webkit-transition:.2s;transition:.2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{position:absolute;height:6px;width:6px;border-radius:100%;background-color:#fff;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #dcdfe6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#c0c4cc}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#428bca}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-loading-spinner .el-loading-text{color:#428bca;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#428BCA;stroke-linecap:round}.el-loading-spinner i{color:#428bca}.el-loading-fade-enter,.el-loading-fade-leave-active{opacity:0}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table;content:""}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-col-0{display:none}.el-col-0{width:0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{position:relative;left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{position:relative;right:4.16667%}.el-col-push-1{position:relative;left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{position:relative;right:8.33333%}.el-col-push-2{position:relative;left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{position:relative;left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{position:relative;right:16.66667%}.el-col-push-4{position:relative;left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{position:relative;right:20.83333%}.el-col-push-5{position:relative;left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{position:relative;left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{position:relative;right:29.16667%}.el-col-push-7{position:relative;left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{position:relative;right:33.33333%}.el-col-push-8{position:relative;left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{position:relative;left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{position:relative;right:41.66667%}.el-col-push-10{position:relative;left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{position:relative;right:45.83333%}.el-col-push-11{position:relative;left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{position:relative;left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{position:relative;right:54.16667%}.el-col-push-13{position:relative;left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{position:relative;right:58.33333%}.el-col-push-14{position:relative;left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{position:relative;left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{position:relative;right:66.66667%}.el-col-push-16{position:relative;left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{position:relative;right:70.83333%}.el-col-push-17{position:relative;left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{position:relative;left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{position:relative;right:79.16667%}.el-col-push-19{position:relative;left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{position:relative;right:83.33333%}.el-col-push-20{position:relative;left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{position:relative;left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{position:relative;right:91.66667%}.el-col-push-22{position:relative;left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{position:relative;right:95.83333%}.el-col-push-23{position:relative;left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{position:relative;left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none}.el-col-xs-0{width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none}.el-col-sm-0{width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none}.el-col-md-0{width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none}.el-col-lg-0{width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none}.el-col-xl-0{width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#428bca}.el-progress.is-success .el-progress__text{color:#428bca}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#428bca;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;cursor:pointer;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover{border-color:#428bca;color:#428bca}.el-upload:focus{border-color:#428bca;color:#428bca}.el-upload:focus .el-upload-dragger{border-color:#428bca}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:360px;height:180px;text-align:center;cursor:pointer;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#c0c4cc;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #dcdfe6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#428bca;font-style:normal}.el-upload-dragger:hover{border-color:#428bca}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #428bca}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55, 0, .1, 1);transition:all .5s cubic-bezier(.55, 0, .1, 1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#428bca}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#428bca}.el-upload-list__item:hover{background-color:#f5f7fa}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#428bca;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#428bca}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture-card .el-upload-list__item .el-icon-close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#fff}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#fff;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);margin-top:60px}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#fff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#fff;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#428bca}.el-progress.is-success .el-progress__text{color:#428bca}.el-progress.is-warning .el-progress-bar__inner{background-color:#e6a23c}.el-progress.is-warning .el-progress__text{color:#e6a23c}.el-progress.is-exception .el-progress-bar__inner{background-color:#f56c6c}.el-progress.is-exception .el-progress__text{color:#f56c6c}.el-progress-bar{padding-right:50px;display:inline-block;vertical-align:middle;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#ebeef5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#428bca;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-progress-bar__inner::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-progress-bar__innerText{display:inline-block;vertical-align:middle;color:#fff;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;border-width:1px;border-style:solid;border-color:#ebeef5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;overflow:hidden;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#ecf3fa;border-color:#d9e8f4}.el-message--success .el-message__content{color:#428bca}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#e6a23c}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#f56c6c}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#c0c4cc;font-size:16px}.el-message__closeBtn:focus{outline-width:0}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#428bca}.el-message .el-icon-error{color:#f56c6c}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#e6a23c}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#f56c6c;border-radius:10px;color:#fff;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #fff}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#428bca}.el-badge__content--success{background-color:#428bca}.el-badge__content--warning{background-color:#e6a23c}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#f56c6c}.el-card{border-radius:4px;border:1px solid #ebeef5;background-color:#fff;overflow:hidden;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate:active,.el-rate:focus{outline-width:0}.el-rate__item{display:inline-block;position:relative;font-size:0;vertical-align:middle}.el-rate__icon{position:relative;display:inline-block;font-size:18px;margin-right:6px;color:#c0c4cc;-webkit-transition:.3s;transition:.3s}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__icon .path2{position:absolute;left:0;top:0}.el-rate__decimal{position:absolute;top:0;left:0;display:inline-block;overflow:hidden}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:-webkit-box;display:-ms-flexbox;display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#f5f7fa}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#c0c4cc;border-color:#c0c4cc}.el-step__head.is-success{color:#428bca;border-color:#428bca}.el-step__head.is-error{color:#f56c6c;border-color:#f56c6c}.el-step__head.is-finish{color:#428bca;border-color:#428bca}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#c0c4cc}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#c0c4cc}.el-step__title.is-success{color:#428bca}.el-step__title.is-error{color:#f56c6c}.el-step__title.is-finish{color:#428bca}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#c0c4cc}.el-step__description.is-success{color:#428bca}.el-step__description.is-error{color:#f56c6c}.el-step__description.is-finish{color:#428bca}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:-webkit-box;display:-ms-flexbox;display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head{text-align:center}.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#c0c4cc}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#fff;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#c0c4cc;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#fff;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-carousel__item{position:absolute;top:0;left:0;width:100%;height:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{position:absolute;width:100%;height:100%;top:0;left:0;background-color:#fff;opacity:.24;-webkit-transition:.2s;transition:.2s}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-fade-in-enter,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55, 0, .1, 1);transition:all .3s cubic-bezier(.55, 0, .1, 1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1);transition:transform .3s cubic-bezier(.23, 1, .32, 1),opacity .3s cubic-bezier(.23, 1, .32, 1),-webkit-transform .3s cubic-bezier(.23, 1, .32, 1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55, 0, .1, 1);transition:opacity .3s cubic-bezier(.55, 0, .1, 1)}.el-collapse{border-top:1px solid #ebeef5;border-bottom:1px solid #ebeef5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#fff;color:#303133;cursor:pointer;border-bottom:1px solid #ebeef5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#428bca}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#fff;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #ebeef5}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0,0,0,0.03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#ebeef5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#fff;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#ebeef5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#fff}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#ebeef5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#fff;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#ebeef5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#fff}.el-tag{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#428bca;border-width:1px;border-style:solid;border-radius:4px;-webkit-box-sizing:border-box;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#428bca}.el-tag .el-tag__close{color:#428bca}.el-tag .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag.el-tag--success{background-color:#ecf3fa;border-color:#d9e8f4;color:#428bca}.el-tag.el-tag--success.is-hit{border-color:#428bca}.el-tag.el-tag--success .el-tag__close{color:#428bca}.el-tag.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.is-hit{border-color:#428bca}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#fff;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#428bca;border-color:#428bca;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#428bca}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#fff;background-color:#68a2d5}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.is-hit{border-color:#428bca}.el-tag--plain .el-tag__close{color:#428bca}.el-tag--plain .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#fff;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#b3d1ea;color:#428bca}.el-tag--plain.el-tag--success.is-hit{border-color:#428bca}.el-tag--plain.el-tag--success .el-tag__close{color:#428bca}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#fff;background-color:#428bca}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#fff;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#fff;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#428bca}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#428bca}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#428bca}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#428bca}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#428bca;border-color:#428bca;-webkit-box-shadow:-1px 0 0 0 #8eb9df;box-shadow:-1px 0 0 0 #8eb9df}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#428bca}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#428bca}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:0;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#428bca}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#428bca;background:#428bca}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#428bca}.el-radio__input.is-focus .el-radio__inner{border-color:#428bca}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;position:relative;cursor:pointer;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#428bca}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #428bca;box-shadow:0 0 2px 2px #428bca}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:solid 1px #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#428bca;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#c0c4cc}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-input__inner:focus{border-color:#428bca}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader .el-input.is-focus .el-input__inner{border-color:#428bca}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#c0c4cc}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#fff;border:solid 1px #e4e7ed;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#c0c4cc;color:#fff}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#f5f7fa}.el-cascader__suggestion-item.is-checked{color:#428bca;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#c0c4cc}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#c0c4cc}.el-cascader__search-input::-moz-placeholder{color:#c0c4cc}.el-cascader__search-input::-ms-input-placeholder{color:#c0c4cc}.el-cascader__search-input::placeholder{color:#c0c4cc}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #428bca;box-shadow:0 0 3px 2px #428bca}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#428bca;border-color:#428bca}.el-color-dropdown__link-btn{cursor:pointer;color:#428bca;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#428bca,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty{font-size:12px;color:#999;position:absolute;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;position:absolute;width:100%;top:50%;left:50%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#fff;text-align:center;font-size:12px}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#fff;border:1px solid #ebeef5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#fff;background-image:none;border:1px solid #dcdfe6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1)}.el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea__inner:hover{border-color:#c0c4cc}.el-textarea__inner:focus{outline:0;border-color:#428bca}.el-textarea .el-input__count{color:#909399;background:#fff;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#c0c4cc}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#c0c4cc}.el-textarea.is-exceed .el-textarea__inner{border-color:#f56c6c}.el-textarea.is-exceed .el-input__count{color:#f56c6c}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#c0c4cc;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645, .045, .355, 1);transition:color .2s cubic-bezier(.645, .045, .355, 1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#fff;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#fff;background-image:none;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645, .045, .355, 1);transition:border-color .2s cubic-bezier(.645, .045, .355, 1);width:100%}.el-input__inner::-ms-reveal{display:none}.el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input__inner::placeholder{color:#c0c4cc}.el-input__inner:hover{border-color:#c0c4cc}.el-input__inner:focus{outline:0;border-color:#428bca}.el-input__suffix{position:absolute;height:100%;right:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s;pointer-events:none}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{position:absolute;height:100%;left:5px;top:0;text-align:center;color:#c0c4cc;-webkit-transition:all .3s;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__inner{outline:0;border-color:#428bca}.el-input.is-disabled .el-input__inner{background-color:#f5f7fa;border-color:#e4e7ed;color:#c0c4cc;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__inner::placeholder{color:#c0c4cc}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__inner{border-color:#f56c6c}.el-input.is-exceed .el-input__suffix .el-input__count{color:#f56c6c}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#f5f7fa;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #dcdfe6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input__inner{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input-group--append .el-input__inner{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#428bca;border-color:#c6dcef;background-color:#ecf3fa}.el-button:active{color:#3b7db6;border-color:#3b7db6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#428bca;color:#428bca}.el-button.is-plain:active{background:#fff;border-color:#3b7db6;color:#3b7db6;outline:0}.el-button.is-active{color:#3b7db6;border-color:#3b7db6}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--primary:focus,.el-button--primary:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--primary:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--primary.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--primary.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--success{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--success:focus,.el-button--success:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--success:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--success.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--success.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#428bca;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#68a2d5;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3b7db6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#428bca}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#428bca}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#428bca}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#428bca}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#428bca;border-color:#428bca;-webkit-box-shadow:-1px 0 0 0 #8eb9df;box-shadow:-1px 0 0 0 #8eb9df}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#428bca}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#428bca}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#fff;background-color:#428bca;font-size:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button.is-disabled:hover{border:1px solid #dcdfe6;background-color:#f5f7fa;color:#c0c4cc}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer-panel{border:1px solid #ebeef5;border-radius:4px;overflow:hidden;background:#fff;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#428bca}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#f5f7fa;margin:0;padding-left:15px;border-bottom:1px solid #ebeef5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#fff;margin:0;padding:0;border-top:1px solid #ebeef5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #e4e7ed}.el-timeline-item__icon{color:#fff;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#e4e7ed;border-radius:50%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#428bca}.el-timeline-item__node--success{background-color:#428bca}.el-timeline-item__node--warning{background-color:#e6a23c}.el-timeline-item__node--danger{background-color:#f56c6c}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;cursor:pointer;padding:0;font-size:14px;font-weight:500}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #428bca}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#428bca}.el-link.el-link--default:after{border-color:#428bca}.el-link.el-link--default.is-disabled{color:#c0c4cc}.el-link.el-link--primary{color:#428bca}.el-link.el-link--primary:hover{color:#68a2d5}.el-link.el-link--primary:after{border-color:#428bca}.el-link.el-link--primary.is-disabled{color:#a1c5e5}.el-link.el-link--primary.is-underline:hover:after{border-color:#428bca}.el-link.el-link--danger{color:#f56c6c}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger:after{border-color:#f56c6c}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--danger.is-underline:hover:after{border-color:#f56c6c}.el-link.el-link--success{color:#428bca}.el-link.el-link--success:hover{color:#68a2d5}.el-link.el-link--success:after{border-color:#428bca}.el-link.el-link--success.is-disabled{color:#a1c5e5}.el-link.el-link--success.is-underline:hover:after{border-color:#428bca}.el-link.el-link--warning{color:#e6a23c}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning:after{border-color:#e6a23c}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--warning.is-underline:hover:after{border-color:#e6a23c}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-link.el-link--info.is-underline:hover:after{border-color:#909399}.el-divider{background-color:#dcdfe6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#fff;padding:0 20px;font-weight:500;color:#303133;font-size:14px}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__placeholder{background:#f5f7fa}.el-image__error{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;background:#f5f7fa;color:#c0c4cc;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:24px;color:#fff;background-color:#606266}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__prev{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff;left:40px}.el-image-viewer__next{top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff;right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-color:#dcdfe6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button.is-round{padding:12px 20px}.el-button:focus,.el-button:hover{color:#428bca;border-color:#c6dcef;background-color:#ecf3fa}.el-button:active{color:#3b7db6;border-color:#3b7db6;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#fff;border-color:#428bca;color:#428bca}.el-button.is-plain:active{background:#fff;border-color:#3b7db6;color:#3b7db6;outline:0}.el-button.is-active{color:#3b7db6;border-color:#3b7db6}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#fff;border-color:#ebeef5;color:#c0c4cc}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--primary:focus,.el-button--primary:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--primary:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--primary.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--primary.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--success{color:#fff;background-color:#428bca;border-color:#428bca}.el-button--success:focus,.el-button--success:hover{background:#68a2d5;border-color:#68a2d5;color:#fff}.el-button--success:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-active{background:#3b7db6;border-color:#3b7db6;color:#fff}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#fff;background-color:#a1c5e5;border-color:#a1c5e5}.el-button--success.is-plain{color:#428bca;background:#ecf3fa;border-color:#b3d1ea}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#428bca;border-color:#428bca;color:#fff}.el-button--success.is-plain:active{background:#3b7db6;border-color:#3b7db6;color:#fff;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#8eb9df;background-color:#ecf3fa;border-color:#d9e8f4}.el-button--warning{color:#fff;background-color:#e6a23c;border-color:#e6a23c}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#fff}.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-active{background:#cf9236;border-color:#cf9236;color:#fff}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#fff;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#e6a23c;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#e6a23c;border-color:#e6a23c;color:#fff}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#fff;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#fff;background-color:#f56c6c;border-color:#f56c6c}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#fff}.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-active{background:#dd6161;border-color:#dd6161;color:#fff}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#fff;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#f56c6c;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#f56c6c;border-color:#f56c6c;color:#fff}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#fff;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#fff;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#fff}.el-button--info:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-active{background:#82848a;border-color:#82848a;color:#fff}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#fff;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#fff}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#fff;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small{padding:9px 15px;font-size:12px;border-radius:3px}.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini{padding:7px 15px;font-size:12px;border-radius:3px}.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{border-color:transparent;color:#428bca;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#68a2d5;border-color:transparent;background-color:transparent}.el-button--text:active{color:#3b7db6;border-color:transparent;background-color:transparent}.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover{border-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-top-left-radius:4px;border-bottom-left-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button:not(.is-disabled):active,.el-button-group>.el-button:not(.is-disabled):focus,.el-button-group>.el-button:not(.is-disabled):hover{z-index:1}.el-button-group>.el-button.is-active{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #ebeef5}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#c0c4cc}.el-calendar-table td{border-bottom:1px solid #ebeef5;border-right:1px solid #ebeef5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#f2f8fe}.el-calendar-table td.is-today{color:#428bca}.el-calendar-table tr:first-child td{border-top:1px solid #ebeef5}.el-calendar-table tr td:first-child{border-left:1px solid #ebeef5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#f2f8fe}.el-backtop{position:fixed;background-color:#fff;width:40px;height:40px;border-radius:50%;color:#428bca;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#f2f6fc}.el-page-header{display:-webkit-box;display:-ms-flexbox;display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#dcdfe6}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;margin-right:30px}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#428bca}.el-checkbox.is-bordered.is-disabled{border-color:#ebeef5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#c0c4cc}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#c0c4cc}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#c0c4cc;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#428bca}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#428bca;border-color:#428bca}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#fff;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #dcdfe6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46);transition:border-color .25s cubic-bezier(.71, -.46, .29, 1.46),background-color .25s cubic-bezier(.71, -.46, .29, 1.46)}.el-checkbox__inner:hover{border-color:#428bca}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #fff;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button{position:relative;display:inline-block}.el-checkbox-button__inner{display:inline-block;line-height:1;font-weight:500;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#fff;border:1px solid #dcdfe6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;-webkit-transition:all .3s cubic-bezier(.645, .045, .355, 1);transition:all .3s cubic-bezier(.645, .045, .355, 1);-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#428bca}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#fff;background-color:#428bca;border-color:#428bca;-webkit-box-shadow:-1px 0 0 0 #8eb9df;box-shadow:-1px 0 0 0 #8eb9df}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#428bca}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#c0c4cc;cursor:not-allowed;background-image:none;background-color:#fff;border-color:#ebeef5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#ebeef5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #dcdfe6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#428bca}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio{color:#606266;font-weight:500;line-height:1;position:relative;cursor:pointer;display:inline-block;white-space:nowrap;outline:0;font-size:14px;margin-right:30px;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #dcdfe6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#428bca}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#ebeef5}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__label{font-size:12px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;outline:0;display:inline-block;line-height:1;position:relative;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed;cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#f5f7fa}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#f5f7fa;border-color:#e4e7ed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#c0c4cc}.el-radio__input.is-disabled+span.el-radio__label{color:#c0c4cc;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#428bca;background:#428bca}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#428bca}.el-radio__input.is-focus .el-radio__inner{border-color:#428bca}.el-radio__inner{border:1px solid #dcdfe6;border-radius:100%;width:14px;height:14px;background-color:#fff;position:relative;cursor:pointer;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#428bca}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#fff;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #428bca;box-shadow:0 0 2px 2px #428bca}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:solid 1px #e4e7ed;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #e4e7ed}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#c0c4cc}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#428bca;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#f5f7fa}.el-cascader-node.is-disabled{color:#c0c4cc;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden;color:#fff;background:#c0c4cc;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);overflow:hidden;outline:0}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:32px;padding:20px;padding-bottom:0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:auto}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.btt,.el-drawer.ttb{width:100%;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer__container{position:relative;left:0;right:0;top:0;bottom:0;height:100%;width:100%}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#DCDDE0;width:22%;height:22%}@-webkit-keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}@keyframes el-skeleton-loading{0%{background-position:100% 50%}100%{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton__paragraph{height:16px;margin-top:16px;background:#f2f2f2}.el-skeleton.is-animated .el-skeleton__item{background:-webkit-gradient(linear,left top,right top,color-stop(25%,#f2f2f2),color-stop(37%,#e6e6e6),color-stop(63%,#f2f2f2));background:linear-gradient(90deg,#f2f2f2 25%,#e6e6e6 37%,#f2f2f2 63%);background-size:400% 100%;-webkit-animation:el-skeleton-loading 1.4s ease infinite;animation:el-skeleton-loading 1.4s ease infinite}.el-skeleton__item{background:#f2f2f2;display:inline-block;height:16px;border-radius:4px;width:100%}.el-skeleton__circle{border-radius:50%;width:36px;height:36px;line-height:36px}.el-skeleton__circle--lg{width:40px;height:40px;line-height:40px}.el-skeleton__circle--md{width:28px;height:28px;line-height:28px}.el-skeleton__button{height:40px;width:64px;border-radius:4px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:13px}.el-skeleton__caption{height:12px}.el-skeleton__h1{height:20px}.el-skeleton__h3{height:18px}.el-skeleton__h5{height:16px}.el-skeleton__image{width:unset;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:0}.el-skeleton__image svg{fill:#DCDDE0;width:22%;height:22%}.el-empty{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 0}.el-empty__image{width:160px}.el-empty__image img{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%;height:100%;vertical-align:top;-o-object-fit:contain;object-fit:contain}.el-empty__image svg{fill:#DCDDE0;width:100%;height:100%;vertical-align:top}.el-empty__description{margin-top:20px}.el-empty__description p{margin:0;font-size:14px;color:#909399}.el-empty__bottom{margin-top:20px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon::after{content:':';position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-descriptions{-webkit-box-sizing:border-box;box-sizing:border-box;font-size:14px;color:#303133}.el-descriptions__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.el-descriptions__title{font-size:16px;font-weight:700}.el-descriptions__body{color:#606266;background-color:#fff}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%;table-layout:fixed}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:left;font-weight:400;line-height:1.5}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{text-align:right}.el-descriptions .is-bordered{table-layout:auto}.el-descriptions .is-bordered .el-descriptions-item__cell{border:1px solid #ebeef5;padding:12px 10px}.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{padding-bottom:12px}.el-descriptions--medium.is-bordered .el-descriptions-item__cell{padding:10px}.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:10px}.el-descriptions--small{font-size:12px}.el-descriptions--small.is-bordered .el-descriptions-item__cell{padding:8px 10px}.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:8px}.el-descriptions--mini{font-size:12px}.el-descriptions--mini.is-bordered .el-descriptions-item__cell{padding:6px 10px}.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{padding-bottom:6px}.el-descriptions-item{vertical-align:top}.el-descriptions-item__container{display:-webkit-box;display:-ms-flexbox;display:flex}.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.el-descriptions-item__container .el-descriptions-item__content{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-descriptions-item__label.has-colon::after{content:':';position:relative;top:-.5px}.el-descriptions-item__label.is-bordered-label{font-weight:700;color:#909399;background:#fafafa}.el-descriptions-item__label:not(.is-bordered-label){margin-right:10px}.el-descriptions-item__content{word-break:break-word;overflow-wrap:break-word}.el-result{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40px 30px}.el-result__icon svg{width:64px;height:64px}.el-result__title{margin-top:20px}.el-result__title p{margin:0;font-size:20px;color:#303133;line-height:1.3}.el-result__subtitle{margin-top:10px}.el-result__subtitle p{margin:0;font-size:14px;color:#606266;line-height:1.3}.el-result__extra{margin-top:30px}.el-result .icon-success{fill:#428BCA}.el-result .icon-error{fill:#F56C6C}.el-result .icon-info{fill:#909399}.el-result .icon-warning{fill:#E6A23C}
\ No newline at end of file
diff --git a/src/assets/css/theme-green/color-green.css b/src/assets/css/theme-green/color-green.css
new file mode 100644
index 0000000..837d179
--- /dev/null
+++ b/src/assets/css/theme-green/color-green.css
@@ -0,0 +1,29 @@
+.header{
+ background-color: #07c4a8;
+}
+.login-wrap{
+ background: rgba(56, 157, 170, 0.82);;
+}
+.plugins-tips{
+ background: #f2f2f2;
+}
+.plugins-tips a{
+ color: #00d1b2;
+}
+.el-upload--text em {
+ color: #00d1b2;
+}
+.pure-button{
+ background: #00d1b2;
+}
+.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus, .pagination > .active > span, .pagination > .active > span:hover, .pagination > .active > span:focus {
+ background-color: #00d1b2 !important;
+ border-color: #00d1b2 !important;
+}
+.tags-li.active {
+ border: 1px solid #00d1b2;
+ background-color: #00d1b2;
+}
+.collapse-btn:hover{
+ background: #00d1b2;
+}
\ No newline at end of file
diff --git a/src/assets/css/theme-green/fonts/element-icons.ttf b/src/assets/css/theme-green/fonts/element-icons.ttf
new file mode 100644
index 0000000..91b74de
Binary files /dev/null and b/src/assets/css/theme-green/fonts/element-icons.ttf differ
diff --git a/src/assets/css/theme-green/fonts/element-icons.woff b/src/assets/css/theme-green/fonts/element-icons.woff
new file mode 100644
index 0000000..02b9a25
Binary files /dev/null and b/src/assets/css/theme-green/fonts/element-icons.woff differ
diff --git a/src/assets/css/theme-green/index.css b/src/assets/css/theme-green/index.css
new file mode 100644
index 0000000..b695db4
--- /dev/null
+++ b/src/assets/css/theme-green/index.css
@@ -0,0 +1 @@
+@charset "UTF-8";.el-pagination--small .arrow.disabled,.el-table .hidden-columns,.el-table td.is-hidden>*,.el-table th.is-hidden>*,.el-table--hidden{visibility:hidden}.el-input__suffix,.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-dropdown .el-dropdown-selfdefine:focus:active,.el-dropdown .el-dropdown-selfdefine:focus:not(.focusing),.el-message__closeBtn:focus,.el-message__content:focus,.el-popover:focus,.el-popover:focus:active,.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing),.el-rate:active,.el-rate:focus,.el-tooltip:focus:hover,.el-tooltip:focus:not(.focusing),.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}@font-face{font-family:element-icons;src:url(fonts/element-icons.woff) format("woff"),url(fonts/element-icons.ttf) format("truetype");font-weight:400;font-display:"auto";font-style:normal}[class*=" el-icon-"],[class^=el-icon-]{font-family:element-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:baseline;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-icon-ice-cream-round:before{content:"\e6a0"}.el-icon-ice-cream-square:before{content:"\e6a3"}.el-icon-lollipop:before{content:"\e6a4"}.el-icon-potato-strips:before{content:"\e6a5"}.el-icon-milk-tea:before{content:"\e6a6"}.el-icon-ice-drink:before{content:"\e6a7"}.el-icon-ice-tea:before{content:"\e6a9"}.el-icon-coffee:before{content:"\e6aa"}.el-icon-orange:before{content:"\e6ab"}.el-icon-pear:before{content:"\e6ac"}.el-icon-apple:before{content:"\e6ad"}.el-icon-cherry:before{content:"\e6ae"}.el-icon-watermelon:before{content:"\e6af"}.el-icon-grape:before{content:"\e6b0"}.el-icon-refrigerator:before{content:"\e6b1"}.el-icon-goblet-square-full:before{content:"\e6b2"}.el-icon-goblet-square:before{content:"\e6b3"}.el-icon-goblet-full:before{content:"\e6b4"}.el-icon-goblet:before{content:"\e6b5"}.el-icon-cold-drink:before{content:"\e6b6"}.el-icon-coffee-cup:before{content:"\e6b8"}.el-icon-water-cup:before{content:"\e6b9"}.el-icon-hot-water:before{content:"\e6ba"}.el-icon-ice-cream:before{content:"\e6bb"}.el-icon-dessert:before{content:"\e6bc"}.el-icon-sugar:before{content:"\e6bd"}.el-icon-tableware:before{content:"\e6be"}.el-icon-burger:before{content:"\e6bf"}.el-icon-knife-fork:before{content:"\e6c1"}.el-icon-fork-spoon:before{content:"\e6c2"}.el-icon-chicken:before{content:"\e6c3"}.el-icon-food:before{content:"\e6c4"}.el-icon-dish-1:before{content:"\e6c5"}.el-icon-dish:before{content:"\e6c6"}.el-icon-moon-night:before{content:"\e6ee"}.el-icon-moon:before{content:"\e6f0"}.el-icon-cloudy-and-sunny:before{content:"\e6f1"}.el-icon-partly-cloudy:before{content:"\e6f2"}.el-icon-cloudy:before{content:"\e6f3"}.el-icon-sunny:before{content:"\e6f6"}.el-icon-sunset:before{content:"\e6f7"}.el-icon-sunrise-1:before{content:"\e6f8"}.el-icon-sunrise:before{content:"\e6f9"}.el-icon-heavy-rain:before{content:"\e6fa"}.el-icon-lightning:before{content:"\e6fb"}.el-icon-light-rain:before{content:"\e6fc"}.el-icon-wind-power:before{content:"\e6fd"}.el-icon-baseball:before{content:"\e712"}.el-icon-soccer:before{content:"\e713"}.el-icon-football:before{content:"\e715"}.el-icon-basketball:before{content:"\e716"}.el-icon-ship:before{content:"\e73f"}.el-icon-truck:before{content:"\e740"}.el-icon-bicycle:before{content:"\e741"}.el-icon-mobile-phone:before{content:"\e6d3"}.el-icon-service:before{content:"\e6d4"}.el-icon-key:before{content:"\e6e2"}.el-icon-unlock:before{content:"\e6e4"}.el-icon-lock:before{content:"\e6e5"}.el-icon-watch:before{content:"\e6fe"}.el-icon-watch-1:before{content:"\e6ff"}.el-icon-timer:before{content:"\e702"}.el-icon-alarm-clock:before{content:"\e703"}.el-icon-map-location:before{content:"\e704"}.el-icon-delete-location:before{content:"\e705"}.el-icon-add-location:before{content:"\e706"}.el-icon-location-information:before{content:"\e707"}.el-icon-location-outline:before{content:"\e708"}.el-icon-location:before{content:"\e79e"}.el-icon-place:before{content:"\e709"}.el-icon-discover:before{content:"\e70a"}.el-icon-first-aid-kit:before{content:"\e70b"}.el-icon-trophy-1:before{content:"\e70c"}.el-icon-trophy:before{content:"\e70d"}.el-icon-medal:before{content:"\e70e"}.el-icon-medal-1:before{content:"\e70f"}.el-icon-stopwatch:before{content:"\e710"}.el-icon-mic:before{content:"\e711"}.el-icon-copy-document:before{content:"\e718"}.el-icon-full-screen:before{content:"\e719"}.el-icon-switch-button:before{content:"\e71b"}.el-icon-aim:before{content:"\e71c"}.el-icon-crop:before{content:"\e71d"}.el-icon-odometer:before{content:"\e71e"}.el-icon-time:before{content:"\e71f"}.el-icon-bangzhu:before{content:"\e724"}.el-icon-close-notification:before{content:"\e726"}.el-icon-microphone:before{content:"\e727"}.el-icon-turn-off-microphone:before{content:"\e728"}.el-icon-position:before{content:"\e729"}.el-icon-postcard:before{content:"\e72a"}.el-icon-message:before{content:"\e72b"}.el-icon-chat-line-square:before{content:"\e72d"}.el-icon-chat-dot-square:before{content:"\e72e"}.el-icon-chat-dot-round:before{content:"\e72f"}.el-icon-chat-square:before{content:"\e730"}.el-icon-chat-line-round:before{content:"\e731"}.el-icon-chat-round:before{content:"\e732"}.el-icon-set-up:before{content:"\e733"}.el-icon-turn-off:before{content:"\e734"}.el-icon-open:before{content:"\e735"}.el-icon-connection:before{content:"\e736"}.el-icon-link:before{content:"\e737"}.el-icon-cpu:before{content:"\e738"}.el-icon-thumb:before{content:"\e739"}.el-icon-female:before{content:"\e73a"}.el-icon-male:before{content:"\e73b"}.el-icon-guide:before{content:"\e73c"}.el-icon-news:before{content:"\e73e"}.el-icon-price-tag:before{content:"\e744"}.el-icon-discount:before{content:"\e745"}.el-icon-wallet:before{content:"\e747"}.el-icon-coin:before{content:"\e748"}.el-icon-money:before{content:"\e749"}.el-icon-bank-card:before{content:"\e74a"}.el-icon-box:before{content:"\e74b"}.el-icon-present:before{content:"\e74c"}.el-icon-sell:before{content:"\e6d5"}.el-icon-sold-out:before{content:"\e6d6"}.el-icon-shopping-bag-2:before{content:"\e74d"}.el-icon-shopping-bag-1:before{content:"\e74e"}.el-icon-shopping-cart-2:before{content:"\e74f"}.el-icon-shopping-cart-1:before{content:"\e750"}.el-icon-shopping-cart-full:before{content:"\e751"}.el-icon-smoking:before{content:"\e752"}.el-icon-no-smoking:before{content:"\e753"}.el-icon-house:before{content:"\e754"}.el-icon-table-lamp:before{content:"\e755"}.el-icon-school:before{content:"\e756"}.el-icon-office-building:before{content:"\e757"}.el-icon-toilet-paper:before{content:"\e758"}.el-icon-notebook-2:before{content:"\e759"}.el-icon-notebook-1:before{content:"\e75a"}.el-icon-files:before{content:"\e75b"}.el-icon-collection:before{content:"\e75c"}.el-icon-receiving:before{content:"\e75d"}.el-icon-suitcase-1:before{content:"\e760"}.el-icon-suitcase:before{content:"\e761"}.el-icon-film:before{content:"\e763"}.el-icon-collection-tag:before{content:"\e765"}.el-icon-data-analysis:before{content:"\e766"}.el-icon-pie-chart:before{content:"\e767"}.el-icon-data-board:before{content:"\e768"}.el-icon-data-line:before{content:"\e76d"}.el-icon-reading:before{content:"\e769"}.el-icon-magic-stick:before{content:"\e76a"}.el-icon-coordinate:before{content:"\e76b"}.el-icon-mouse:before{content:"\e76c"}.el-icon-brush:before{content:"\e76e"}.el-icon-headset:before{content:"\e76f"}.el-icon-umbrella:before{content:"\e770"}.el-icon-scissors:before{content:"\e771"}.el-icon-mobile:before{content:"\e773"}.el-icon-attract:before{content:"\e774"}.el-icon-monitor:before{content:"\e775"}.el-icon-search:before{content:"\e778"}.el-icon-takeaway-box:before{content:"\e77a"}.el-icon-paperclip:before{content:"\e77d"}.el-icon-printer:before{content:"\e77e"}.el-icon-document-add:before{content:"\e782"}.el-icon-document:before{content:"\e785"}.el-icon-document-checked:before{content:"\e786"}.el-icon-document-copy:before{content:"\e787"}.el-icon-document-delete:before{content:"\e788"}.el-icon-document-remove:before{content:"\e789"}.el-icon-tickets:before{content:"\e78b"}.el-icon-folder-checked:before{content:"\e77f"}.el-icon-folder-delete:before{content:"\e780"}.el-icon-folder-remove:before{content:"\e781"}.el-icon-folder-add:before{content:"\e783"}.el-icon-folder-opened:before{content:"\e784"}.el-icon-folder:before{content:"\e78a"}.el-icon-edit-outline:before{content:"\e764"}.el-icon-edit:before{content:"\e78c"}.el-icon-date:before{content:"\e78e"}.el-icon-c-scale-to-original:before{content:"\e7c6"}.el-icon-view:before{content:"\e6ce"}.el-icon-loading:before{content:"\e6cf"}.el-icon-rank:before{content:"\e6d1"}.el-icon-sort-down:before{content:"\e7c4"}.el-icon-sort-up:before{content:"\e7c5"}.el-icon-sort:before{content:"\e6d2"}.el-icon-finished:before{content:"\e6cd"}.el-icon-refresh-left:before{content:"\e6c7"}.el-icon-refresh-right:before{content:"\e6c8"}.el-icon-refresh:before{content:"\e6d0"}.el-icon-video-play:before{content:"\e7c0"}.el-icon-video-pause:before{content:"\e7c1"}.el-icon-d-arrow-right:before{content:"\e6dc"}.el-icon-d-arrow-left:before{content:"\e6dd"}.el-icon-arrow-up:before{content:"\e6e1"}.el-icon-arrow-down:before{content:"\e6df"}.el-icon-arrow-right:before{content:"\e6e0"}.el-icon-arrow-left:before{content:"\e6de"}.el-icon-top-right:before{content:"\e6e7"}.el-icon-top-left:before{content:"\e6e8"}.el-icon-top:before{content:"\e6e6"}.el-icon-bottom:before{content:"\e6eb"}.el-icon-right:before{content:"\e6e9"}.el-icon-back:before{content:"\e6ea"}.el-icon-bottom-right:before{content:"\e6ec"}.el-icon-bottom-left:before{content:"\e6ed"}.el-icon-caret-top:before{content:"\e78f"}.el-icon-caret-bottom:before{content:"\e790"}.el-icon-caret-right:before{content:"\e791"}.el-icon-caret-left:before{content:"\e792"}.el-icon-d-caret:before{content:"\e79a"}.el-icon-share:before{content:"\e793"}.el-icon-menu:before{content:"\e798"}.el-icon-s-grid:before{content:"\e7a6"}.el-icon-s-check:before{content:"\e7a7"}.el-icon-s-data:before{content:"\e7a8"}.el-icon-s-opportunity:before{content:"\e7aa"}.el-icon-s-custom:before{content:"\e7ab"}.el-icon-s-claim:before{content:"\e7ad"}.el-icon-s-finance:before{content:"\e7ae"}.el-icon-s-comment:before{content:"\e7af"}.el-icon-s-flag:before{content:"\e7b0"}.el-icon-s-marketing:before{content:"\e7b1"}.el-icon-s-shop:before{content:"\e7b4"}.el-icon-s-open:before{content:"\e7b5"}.el-icon-s-management:before{content:"\e7b6"}.el-icon-s-ticket:before{content:"\e7b7"}.el-icon-s-release:before{content:"\e7b8"}.el-icon-s-home:before{content:"\e7b9"}.el-icon-s-promotion:before{content:"\e7ba"}.el-icon-s-operation:before{content:"\e7bb"}.el-icon-s-unfold:before{content:"\e7bc"}.el-icon-s-fold:before{content:"\e7a9"}.el-icon-s-platform:before{content:"\e7bd"}.el-icon-s-order:before{content:"\e7be"}.el-icon-s-cooperation:before{content:"\e7bf"}.el-icon-bell:before{content:"\e725"}.el-icon-message-solid:before{content:"\e799"}.el-icon-video-camera:before{content:"\e772"}.el-icon-video-camera-solid:before{content:"\e796"}.el-icon-camera:before{content:"\e779"}.el-icon-camera-solid:before{content:"\e79b"}.el-icon-download:before{content:"\e77c"}.el-icon-upload2:before{content:"\e77b"}.el-icon-upload:before{content:"\e7c3"}.el-icon-picture-outline-round:before{content:"\e75f"}.el-icon-picture-outline:before{content:"\e75e"}.el-icon-picture:before{content:"\e79f"}.el-icon-close:before{content:"\e6db"}.el-icon-check:before{content:"\e6da"}.el-icon-plus:before{content:"\e6d9"}.el-icon-minus:before{content:"\e6d8"}.el-icon-help:before{content:"\e73d"}.el-icon-s-help:before{content:"\e7b3"}.el-icon-circle-close:before{content:"\e78d"}.el-icon-circle-check:before{content:"\e720"}.el-icon-circle-plus-outline:before{content:"\e723"}.el-icon-remove-outline:before{content:"\e722"}.el-icon-zoom-out:before{content:"\e776"}.el-icon-zoom-in:before{content:"\e777"}.el-icon-error:before{content:"\e79d"}.el-icon-success:before{content:"\e79c"}.el-icon-circle-plus:before{content:"\e7a0"}.el-icon-remove:before{content:"\e7a2"}.el-icon-info:before{content:"\e7a1"}.el-icon-question:before{content:"\e7a4"}.el-icon-warning-outline:before{content:"\e6c9"}.el-icon-warning:before{content:"\e7a3"}.el-icon-goods:before{content:"\e7c2"}.el-icon-s-goods:before{content:"\e7b2"}.el-icon-star-off:before{content:"\e717"}.el-icon-star-on:before{content:"\e797"}.el-icon-more-outline:before{content:"\e6cc"}.el-icon-more:before{content:"\e794"}.el-icon-phone-outline:before{content:"\e6cb"}.el-icon-phone:before{content:"\e795"}.el-icon-user:before{content:"\e6e3"}.el-icon-user-solid:before{content:"\e7a5"}.el-icon-setting:before{content:"\e6ca"}.el-icon-s-tools:before{content:"\e7ac"}.el-icon-delete:before{content:"\e6d7"}.el-icon-delete-solid:before{content:"\e7c9"}.el-icon-eleme:before{content:"\e7c7"}.el-icon-platform-eleme:before{content:"\e7ca"}.el-icon-loading{-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@-webkit-keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}@keyframes rotating{0%{-webkit-transform:rotateZ(0);transform:rotateZ(0)}100%{-webkit-transform:rotateZ(360deg);transform:rotateZ(360deg)}}.el-pagination{white-space:nowrap;padding:2px 5px;color:#303133;font-weight:700}.el-pagination::after,.el-pagination::before{display:table;content:""}.el-pagination::after{clear:both}.el-pagination button,.el-pagination span:not([class*=suffix]){display:inline-block;font-size:13px;min-width:35.5px;height:28px;line-height:28px;vertical-align:top;-webkit-box-sizing:border-box;box-sizing:border-box}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield;line-height:normal}.el-pagination .el-input__suffix{right:0;-webkit-transform:scale(.8);transform:scale(.8)}.el-pagination .el-select .el-input{width:100px;margin:0 5px}.el-pagination .el-select .el-input .el-input__inner{padding-right:25px;border-radius:3px}.el-pagination button{border:none;padding:0 6px;background:0 0}.el-pagination button:focus{outline:0}.el-pagination button:hover{color:#00D1B2}.el-pagination button:disabled{color:#C0C4CC;background-color:#FFF;cursor:not-allowed}.el-pagination .btn-next,.el-pagination .btn-prev{background:center center no-repeat #FFF;background-size:16px;cursor:pointer;margin:0;color:#303133}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:700}.el-pagination .btn-prev{padding-right:12px}.el-pagination .btn-next{padding-left:12px}.el-pagination .el-pager li.disabled{color:#C0C4CC;cursor:not-allowed}.el-pager li,.el-pager li.btn-quicknext:hover,.el-pager li.btn-quickprev:hover{cursor:pointer}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li,.el-pagination--small .el-pager li.btn-quicknext,.el-pagination--small .el-pager li.btn-quickprev,.el-pagination--small .el-pager li:last-child{border-color:transparent;font-size:12px;line-height:22px;height:22px;min-width:22px}.el-pagination--small .more::before,.el-pagination--small li.more::before{line-height:24px}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){height:22px;line-height:22px}.el-pagination--small .el-pagination__editor,.el-pagination--small .el-pagination__editor.el-input .el-input__inner{height:22px}.el-pagination__sizes{margin:0 10px 0 0;font-weight:400;color:#606266}.el-pagination__sizes .el-input .el-input__inner{font-size:13px;padding-left:8px}.el-pagination__sizes .el-input .el-input__inner:hover{border-color:#00D1B2}.el-pagination__total{margin-right:10px;font-weight:400;color:#606266}.el-pagination__jump{margin-left:24px;font-weight:400;color:#606266}.el-pagination__jump .el-input__inner{padding:0 3px}.el-pagination__rightwrapper{float:right}.el-pagination__editor{line-height:18px;padding:0 2px;height:28px;text-align:center;margin:0 2px;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:3px}.el-pager,.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev{padding:0}.el-pagination__editor.el-input{width:50px}.el-pagination__editor.el-input .el-input__inner{height:28px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{margin:0 5px;background-color:#f4f4f5;color:#606266;min-width:30px;border-radius:2px}.el-pagination.is-background .btn-next.disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.disabled{color:#C0C4CC}.el-pagination.is-background .el-pager li:not(.disabled):hover{color:#00D1B2}.el-pagination.is-background .el-pager li:not(.disabled).active{background-color:#00D1B2;color:#FFF}.el-dialog,.el-pager li{background:#FFF;-webkit-box-sizing:border-box}.el-pagination.is-background.el-pagination--small .btn-next,.el-pagination.is-background.el-pagination--small .btn-prev,.el-pagination.is-background.el-pagination--small .el-pager li{margin:0 3px;min-width:22px}.el-pager,.el-pager li{vertical-align:top;margin:0;display:inline-block}.el-pager{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;list-style:none;font-size:0}.el-date-table,.el-table th{-webkit-user-select:none;-moz-user-select:none}.el-pager .more::before{line-height:30px}.el-pager li{padding:0 4px;font-size:13px;min-width:35.5px;height:28px;line-height:28px;box-sizing:border-box;text-align:center}.el-menu--collapse .el-menu .el-submenu,.el-menu--popup{min-width:200px}.el-pager li.btn-quicknext,.el-pager li.btn-quickprev{line-height:28px;color:#303133}.el-pager li.btn-quicknext.disabled,.el-pager li.btn-quickprev.disabled{color:#C0C4CC}.el-pager li.active+li{border-left:0}.el-pager li:hover{color:#00D1B2}.el-pager li.active{color:#00D1B2;cursor:default}@-webkit-keyframes v-modal-in{0%{opacity:0}}@-webkit-keyframes v-modal-out{100%{opacity:0}}.el-dialog{position:relative;margin:0 auto 50px;border-radius:2px;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.3);box-shadow:0 1px 3px rgba(0,0,0,.3);box-sizing:border-box;width:50%}.el-dialog.is-fullscreen{width:100%;margin-top:0;margin-bottom:0;height:100%;overflow:auto}.el-dialog__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:auto;margin:0}.el-dialog__header{padding:20px 20px 10px}.el-dialog__headerbtn{position:absolute;top:20px;right:20px;padding:0;background:0 0;border:none;outline:0;cursor:pointer;font-size:16px}.el-dialog__headerbtn .el-dialog__close{color:#909399}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:#00D1B2}.el-dialog__title{line-height:24px;font-size:18px;color:#303133}.el-dialog__body{padding:30px 20px;color:#606266;font-size:14px;word-break:break-all}.el-dialog__footer{padding:10px 20px 20px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial;padding:25px 25px 30px}.el-dialog--center .el-dialog__footer{text-align:inherit}.dialog-fade-enter-active{-webkit-animation:dialog-fade-in .3s;animation:dialog-fade-in .3s}.dialog-fade-leave-active{-webkit-animation:dialog-fade-out .3s;animation:dialog-fade-out .3s}@-webkit-keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes dialog-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes dialog-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-autocomplete{position:relative;display:inline-block}.el-autocomplete-suggestion{margin:5px 0;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:4px;border:1px solid #E4E7ED;-webkit-box-sizing:border-box;box-sizing:border-box;background-color:#FFF}.el-dropdown-menu,.el-menu--collapse .el-submenu .el-menu{z-index:10;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-autocomplete-suggestion__wrap{max-height:280px;padding:10px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{padding:0 20px;margin:0;line-height:34px;cursor:pointer;color:#606266;font-size:14px;list-style:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:#F5F7FA}.el-autocomplete-suggestion li.divider{margin-top:6px;border-top:1px solid #000}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{text-align:center;height:100px;line-height:100px;font-size:20px;color:#999}.el-autocomplete-suggestion.is-loading li::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:#FFF}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-dropdown{display:inline-block;position:relative;color:#606266;font-size:14px}.el-dropdown .el-button-group{display:block}.el-dropdown .el-button-group .el-button{float:none}.el-dropdown .el-dropdown__caret-button{padding-left:5px;padding-right:5px;position:relative;border-left:none}.el-dropdown .el-dropdown__caret-button::before{content:'';position:absolute;display:block;width:1px;top:5px;bottom:5px;left:0;background:rgba(255,255,255,.5)}.el-dropdown .el-dropdown__caret-button.el-button--default::before{background:rgba(220,223,230,.5)}.el-dropdown .el-dropdown__caret-button:hover::before{top:0;bottom:0}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{padding-left:0}.el-dropdown__icon{font-size:12px;margin:0 3px}.el-dropdown-menu{position:absolute;top:0;left:0;padding:10px 0;margin:5px 0;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-dropdown-menu__item{list-style:none;line-height:36px;padding:0 20px;margin:0;font-size:14px;color:#606266;cursor:pointer;outline:0}.el-dropdown-menu__item:focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:#e6faf7;color:#428bca}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{position:relative;margin-top:6px;border-top:1px solid #EBEEF5}.el-dropdown-menu__item--divided:before{content:'';height:6px;display:block;margin:0 -20px;background-color:#FFF}.el-dropdown-menu__item.is-disabled{cursor:default;color:#bbb;pointer-events:none}.el-dropdown-menu--medium{padding:6px 0}.el-dropdown-menu--medium .el-dropdown-menu__item{line-height:30px;padding:0 17px;font-size:14px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:6px}.el-dropdown-menu--medium .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:6px;margin:0 -17px}.el-dropdown-menu--small{padding:6px 0}.el-dropdown-menu--small .el-dropdown-menu__item{line-height:27px;padding:0 15px;font-size:13px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:4px}.el-dropdown-menu--small .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:4px;margin:0 -15px}.el-dropdown-menu--mini{padding:3px 0}.el-dropdown-menu--mini .el-dropdown-menu__item{line-height:24px;padding:0 10px;font-size:12px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided{margin-top:3px}.el-dropdown-menu--mini .el-dropdown-menu__item.el-dropdown-menu__item--divided:before{height:3px;margin:0 -10px}.el-menu{border-right:solid 1px #e6e6e6;list-style:none;position:relative;margin:0;padding-left:0;background-color:#FFF}.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,.el-menu--horizontal>.el-submenu .el-submenu__title:hover{background-color:#fff}.el-menu::after,.el-menu::before{display:table;content:""}.el-menu::after{clear:both}.el-menu.el-menu--horizontal{border-bottom:solid 1px #e6e6e6}.el-menu--horizontal{border-right:none}.el-menu--horizontal>.el-menu-item{float:left;height:60px;line-height:60px;margin:0;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-submenu{float:left}.el-menu--horizontal>.el-submenu:focus,.el-menu--horizontal>.el-submenu:hover{outline:0}.el-menu--horizontal>.el-submenu:focus .el-submenu__title,.el-menu--horizontal>.el-submenu:hover .el-submenu__title{color:#303133}.el-menu--horizontal>.el-submenu.is-active .el-submenu__title{border-bottom:2px solid #00D1B2;color:#303133}.el-menu--horizontal>.el-submenu .el-submenu__title{height:60px;line-height:60px;border-bottom:2px solid transparent;color:#909399}.el-menu--horizontal>.el-submenu .el-submenu__icon-arrow{position:static;vertical-align:middle;margin-left:8px;margin-top:-3px}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-submenu__title{background-color:#FFF;float:none;height:36px;line-height:36px;padding:0 10px;color:#909399}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-submenu.is-active>.el-submenu__title{color:#303133}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{outline:0;color:#303133}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid #00D1B2;color:#303133}.el-menu--collapse{width:64px}.el-menu--collapse>.el-menu-item [class^=el-icon-],.el-menu--collapse>.el-submenu>.el-submenu__title [class^=el-icon-]{margin:0;vertical-align:middle;width:24px;text-align:center}.el-menu--collapse>.el-menu-item .el-submenu__icon-arrow,.el-menu--collapse>.el-submenu>.el-submenu__title .el-submenu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item span,.el-menu--collapse>.el-submenu>.el-submenu__title span{height:0;width:0;overflow:hidden;visibility:hidden;display:inline-block}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-submenu{position:relative}.el-menu--collapse .el-submenu .el-menu{position:absolute;margin-left:5px;top:0;left:100%;border:1px solid #E4E7ED;border-radius:2px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu-item,.el-submenu__title{height:56px;line-height:56px;position:relative;-webkit-box-sizing:border-box;white-space:nowrap;list-style:none}.el-menu--collapse .el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:none;transform:none}.el-menu--popup{z-index:100;border:none;padding:5px 0;border-radius:2px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-menu--popup-bottom-start{margin-top:5px}.el-menu--popup-right-start{margin-left:5px;margin-right:5px}.el-menu-item{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-menu-item *{vertical-align:middle}.el-menu-item i{color:#909399}.el-menu-item:focus,.el-menu-item:hover{outline:0;background-color:#e6faf7}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon-]{margin-right:5px;width:24px;text-align:center;font-size:18px;vertical-align:middle}.el-menu-item.is-active{color:#00D1B2}.el-menu-item.is-active i{color:inherit}.el-submenu{list-style:none;margin:0;padding-left:0}.el-submenu__title{font-size:14px;color:#303133;padding:0 20px;cursor:pointer;-webkit-transition:border-color .3s,background-color .3s,color .3s;transition:border-color .3s,background-color .3s,color .3s;box-sizing:border-box}.el-submenu__title *{vertical-align:middle}.el-submenu__title i{color:#909399}.el-submenu__title:focus,.el-submenu__title:hover{outline:0;background-color:#e6faf7}.el-submenu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu__title:hover{background-color:#e6faf7}.el-submenu .el-menu{border:none}.el-submenu .el-menu-item{height:50px;line-height:50px;padding:0 45px;min-width:200px}.el-submenu__icon-arrow{position:absolute;top:50%;right:20px;margin-top:-7px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:12px}.el-submenu.is-active .el-submenu__title{border-bottom-color:#00D1B2}.el-submenu.is-opened>.el-submenu__title .el-submenu__icon-arrow{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-submenu.is-disabled .el-menu-item,.el-submenu.is-disabled .el-submenu__title{opacity:.25;cursor:not-allowed;background:0 0!important}.el-submenu [class^=el-icon-]{vertical-align:middle;margin-right:5px;width:24px;text-align:center;font-size:18px}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px 20px;line-height:normal;font-size:12px;color:#909399}.el-radio-button__inner,.el-radio-group{display:inline-block;line-height:1;vertical-align:middle}.horizontal-collapse-transition .el-submenu__title .el-submenu__icon-arrow{-webkit-transition:.2s;transition:.2s;opacity:0}.el-radio-group{font-size:0}.el-radio-button{position:relative;display:inline-block;outline:0}.el-radio-button__inner{white-space:nowrap;background:#FFF;border:1px solid #DCDFE6;font-weight:500;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;position:relative;cursor:pointer;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-radio-button__inner.is-round{padding:12px 20px}.el-radio-button__inner:hover{color:#00D1B2}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-radio-button__orig-radio{opacity:0;outline:0;position:absolute;z-index:-1}.el-radio-button__orig-radio:checked+.el-radio-button__inner{color:#FFF;background-color:#00D1B2;border-color:#00D1B2;-webkit-box-shadow:-1px 0 0 0 #00D1B2;box-shadow:-1px 0 0 0 #00D1B2}.el-radio-button__orig-radio:disabled+.el-radio-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-radio-button__orig-radio:disabled:checked+.el-radio-button__inner{background-color:#F2F6FC}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 4px 4px 0}.el-popover,.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:4px}.el-radio-button--medium .el-radio-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-radio-button--medium .el-radio-button__inner.is-round{padding:10px 20px}.el-radio-button--small .el-radio-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-radio-button--small .el-radio-button__inner.is-round{padding:9px 15px}.el-radio-button--mini .el-radio-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-radio-button--mini .el-radio-button__inner.is-round{padding:7px 15px}.el-radio-button:focus:not(.is-focus):not(:active):not(.is-disabled){-webkit-box-shadow:0 0 2px 2px #00D1B2;box-shadow:0 0 2px 2px #00D1B2}.el-switch{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:relative;font-size:14px;line-height:20px;height:20px;vertical-align:middle}.el-switch__core,.el-switch__label{display:inline-block;cursor:pointer}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{-webkit-transition:.2s;transition:.2s;height:20px;font-size:14px;font-weight:500;vertical-align:middle;color:#303133}.el-switch__label.is-active{color:#00D1B2}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{line-height:1;font-size:14px;display:inline-block}.el-switch__input{position:absolute;width:0;height:0;opacity:0;margin:0}.el-switch__core{margin:0;position:relative;width:40px;height:20px;border:1px solid #DCDFE6;outline:0;border-radius:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#DCDFE6;-webkit-transition:border-color .3s,background-color .3s;transition:border-color .3s,background-color .3s;vertical-align:middle}.el-switch__core:after{content:"";position:absolute;top:1px;left:1px;border-radius:100%;-webkit-transition:all .3s;transition:all .3s;width:16px;height:16px;background-color:#FFF}.el-switch.is-checked .el-switch__core{border-color:#00D1B2;background-color:#00D1B2}.el-switch.is-checked .el-switch__core::after{left:100%;margin-left:-17px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter,.el-switch .label-fade-leave-active{opacity:0}.el-select-dropdown{position:absolute;z-index:1001;border:1px solid #E4E7ED;border-radius:4px;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:5px 0}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected{color:#00D1B2;background-color:#FFF}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected.hover{background-color:#F5F7FA}.el-select-dropdown.is-multiple .el-select-dropdown__item.selected::after{position:absolute;right:20px;font-family:element-icons;content:"\e6da";font-size:12px;font-weight:700;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty{padding:10px 0;margin:0;text-align:center;color:#999;font-size:14px}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{list-style:none;padding:6px 0;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-select-dropdown__item{font-size:14px;padding:0 20px;position:relative;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#606266;height:34px;line-height:34px;-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer}.el-select-dropdown__item.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-select-dropdown__item.is-disabled:hover{background-color:#FFF}.el-select-dropdown__item.hover,.el-select-dropdown__item:hover{background-color:#F5F7FA}.el-select-dropdown__item.selected{color:#00D1B2;font-weight:700}.el-select-group{margin:0;padding:0}.el-select-group__wrap{position:relative;list-style:none;margin:0;padding:0}.el-select-group__wrap:not(:last-of-type){padding-bottom:24px}.el-select-group__wrap:not(:last-of-type)::after{content:'';position:absolute;display:block;left:20px;right:20px;bottom:12px;height:1px;background:#E4E7ED}.el-select-group__title{padding-left:20px;font-size:12px;color:#909399;line-height:30px}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{display:inline-block;position:relative}.el-select .el-select__tags>span{display:contents}.el-select:hover .el-input__inner{border-color:#C0C4CC}.el-select .el-input__inner{cursor:pointer;padding-right:35px}.el-select .el-input__inner:focus{border-color:#00D1B2}.el-select .el-input .el-select__caret{color:#C0C4CC;font-size:14px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);cursor:pointer}.el-select .el-input .el-select__caret.is-reverse{-webkit-transform:rotateZ(0);transform:rotateZ(0)}.el-select .el-input .el-select__caret.is-show-close{font-size:14px;text-align:center;-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg);border-radius:100%;color:#C0C4CC;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-select .el-input .el-select__caret.is-show-close:hover{color:#909399}.el-select .el-input.is-disabled .el-input__inner{cursor:not-allowed}.el-select .el-input.is-disabled .el-input__inner:hover{border-color:#E4E7ED}.el-select .el-input.is-focus .el-input__inner{border-color:#00D1B2}.el-select>.el-input{display:block}.el-select__input{border:none;outline:0;padding:0;margin-left:15px;color:#666;font-size:14px;-webkit-appearance:none;-moz-appearance:none;appearance:none;height:28px;background-color:transparent}.el-select__input.is-mini{height:14px}.el-select__close{cursor:pointer;position:absolute;top:8px;z-index:1000;right:25px;color:#C0C4CC;line-height:18px;font-size:14px}.el-select__close:hover{color:#909399}.el-select__tags{position:absolute;line-height:normal;white-space:normal;z-index:1;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-select .el-tag__close{margin-top:-2px}.el-select .el-tag{-webkit-box-sizing:border-box;box-sizing:border-box;border-color:transparent;margin:2px 0 2px 6px;background-color:#f0f2f5}.el-select .el-tag__close.el-icon-close{background-color:#C0C4CC;right:-7px;top:0;color:#FFF}.el-select .el-tag__close.el-icon-close:hover{background-color:#909399}.el-table,.el-table__expanded-cell{background-color:#FFF}.el-select .el-tag__close.el-icon-close::before{display:block;-webkit-transform:translate(0,.5px);transform:translate(0,.5px)}.el-table{position:relative;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-box-flex:1;-ms-flex:1;flex:1;width:100%;max-width:100%;font-size:14px;color:#606266}.el-table--mini,.el-table--small,.el-table__expand-icon{font-size:12px}.el-table__empty-block{min-height:60px;text-align:center;width:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-table__empty-text{line-height:60px;width:50%;color:#909399}.el-table__expand-column .cell{padding:0;text-align:center}.el-table__expand-icon{position:relative;cursor:pointer;color:#666;-webkit-transition:-webkit-transform .2s ease-in-out;transition:-webkit-transform .2s ease-in-out;transition:transform .2s ease-in-out;transition:transform .2s ease-in-out,-webkit-transform .2s ease-in-out;height:20px}.el-table__expand-icon--expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-table__expand-icon>.el-icon{position:absolute;left:50%;top:50%;margin-left:-5px;margin-top:-5px}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-right:0;border-bottom:0}.el-table--fit td.gutter,.el-table--fit th.gutter{border-right-width:1px}.el-table--scrollable-x .el-table__body-wrapper{overflow-x:auto}.el-table--scrollable-y .el-table__body-wrapper{overflow-y:auto}.el-table thead{color:#909399;font-weight:500}.el-table thead.is-group th{background:#F5F7FA}.el-table th,.el-table tr{background-color:#FFF}.el-table td,.el-table th{padding:12px 0;min-width:0;-webkit-box-sizing:border-box;box-sizing:border-box;text-overflow:ellipsis;vertical-align:middle;position:relative;text-align:left}.el-table td.is-center,.el-table th.is-center{text-align:center}.el-table td.is-right,.el-table th.is-right{text-align:right}.el-table td.gutter,.el-table th.gutter{width:15px;border-right-width:0;border-bottom-width:0;padding:0}.el-table--medium td,.el-table--medium th{padding:10px 0}.el-table--small td,.el-table--small th{padding:5px 0}.el-table--mini td,.el-table--mini th{padding:6px 0}.el-table .cell,.el-table--border td:first-child .cell,.el-table--border th:first-child .cell{padding-left:10px}.el-table tr input[type=checkbox]{margin:0}.el-table td,.el-table th.is-leaf{border-bottom:1px solid #EBEEF5}.el-table th.is-sortable{cursor:pointer}.el-table th{overflow:hidden;-ms-user-select:none;user-select:none}.el-table th>.cell{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;vertical-align:middle;padding-left:10px;padding-right:10px;width:100%}.el-table th>.cell.highlight{color:#00D1B2}.el-table th.required>div::before{display:inline-block;content:"";width:8px;height:8px;border-radius:50%;background:#ff4d51;margin-right:5px;vertical-align:middle}.el-table td div{-webkit-box-sizing:border-box;box-sizing:border-box}.el-table td.gutter{width:0}.el-table .cell{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;text-overflow:ellipsis;white-space:normal;word-break:break-all;line-height:23px;padding-right:10px}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.el-table--border,.el-table--group{border:1px solid #EBEEF5}.el-table--border::after,.el-table--group::after,.el-table::before{content:'';position:absolute;background-color:#EBEEF5;z-index:1}.el-table--border::after,.el-table--group::after{top:0;right:0;width:1px;height:100%}.el-table::before{left:0;bottom:0;width:100%;height:1px}.el-table--border{border-right:none;border-bottom:none}.el-table--border.el-loading-parent--relative{border-color:transparent}.el-table--border td,.el-table--border th,.el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{border-right:1px solid #EBEEF5}.el-table--border th.gutter:last-of-type{border-bottom:1px solid #EBEEF5;border-bottom-width:1px}.el-table--border th,.el-table__fixed-right-patch{border-bottom:1px solid #EBEEF5}.el-table__fixed,.el-table__fixed-right{position:absolute;top:0;left:0;overflow-x:hidden;overflow-y:hidden;-webkit-box-shadow:0 0 10px rgba(0,0,0,.12);box-shadow:0 0 10px rgba(0,0,0,.12)}.el-table__fixed-right::before,.el-table__fixed::before{content:'';position:absolute;left:0;bottom:0;width:100%;height:1px;background-color:#EBEEF5;z-index:4}.el-table__fixed-right-patch{position:absolute;top:-1px;right:0;background-color:#FFF}.el-table__fixed-right{top:0;left:auto;right:0}.el-table__fixed-right .el-table__fixed-body-wrapper,.el-table__fixed-right .el-table__fixed-footer-wrapper,.el-table__fixed-right .el-table__fixed-header-wrapper{left:auto;right:0}.el-table__fixed-header-wrapper{position:absolute;left:0;top:0;z-index:3}.el-table__fixed-footer-wrapper{position:absolute;left:0;bottom:0;z-index:3}.el-table__fixed-footer-wrapper tbody td{border-top:1px solid #EBEEF5;background-color:#F5F7FA;color:#606266}.el-table__fixed-body-wrapper{position:absolute;left:0;top:37px;overflow:hidden;z-index:3}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__footer-wrapper{margin-top:-1px}.el-table__footer-wrapper td{border-top:1px solid #EBEEF5}.el-table__body,.el-table__footer,.el-table__header{table-layout:fixed;border-collapse:separate}.el-table__footer-wrapper,.el-table__header-wrapper{overflow:hidden}.el-table__footer-wrapper tbody td,.el-table__header-wrapper tbody td{background-color:#F5F7FA;color:#606266}.el-table__body-wrapper{overflow:hidden;position:relative}.el-table__body-wrapper.is-scrolling-left~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed,.el-table__body-wrapper.is-scrolling-none~.el-table__fixed-right,.el-table__body-wrapper.is-scrolling-right~.el-table__fixed-right{-webkit-box-shadow:none;box-shadow:none}.el-picker-panel,.el-table-filter{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-table__body-wrapper .el-table--border.is-scrolling-right~.el-table__fixed-right{border-left:1px solid #EBEEF5}.el-table .caret-wrapper{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;width:24px;vertical-align:middle;cursor:pointer;overflow:initial;position:relative}.el-table .sort-caret{width:0;height:0;border:5px solid transparent;position:absolute;left:7px}.el-table .sort-caret.ascending{border-bottom-color:#C0C4CC;top:5px}.el-table .sort-caret.descending{border-top-color:#C0C4CC;bottom:7px}.el-table .ascending .sort-caret.ascending{border-bottom-color:#00D1B2}.el-table .descending .sort-caret.descending{border-top-color:#00D1B2}.el-table .hidden-columns{position:absolute;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td{background:#FAFAFA}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td{background-color:#e6faf7}.el-table__body tr.hover-row.current-row>td,.el-table__body tr.hover-row.el-table__row--striped.current-row>td,.el-table__body tr.hover-row.el-table__row--striped>td,.el-table__body tr.hover-row>td{background-color:#F5F7FA}.el-table__body tr.current-row>td{background-color:#e6faf7}.el-table__column-resize-proxy{position:absolute;left:200px;top:0;bottom:0;width:0;border-left:1px solid #EBEEF5;z-index:10}.el-table__column-filter-trigger{display:inline-block;line-height:34px;cursor:pointer}.el-table__column-filter-trigger i{color:#909399;font-size:12px;-webkit-transform:scale(.75);transform:scale(.75)}.el-table--enable-row-transition .el-table__body td{-webkit-transition:background-color .25s ease;transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td{background-color:#F5F7FA}.el-table--fluid-height .el-table__fixed,.el-table--fluid-height .el-table__fixed-right{bottom:0;overflow:hidden}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;width:20px;line-height:20px;height:20px;text-align:center;margin-right:3px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:1px solid #EBEEF5;border-radius:2px;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-box-sizing:border-box;box-sizing:border-box;margin:2px 0}.el-date-table td,.el-date-table td div{height:30px;-webkit-box-sizing:border-box}.el-table-filter__list{padding:5px 0;margin:0;list-style:none;min-width:100px}.el-table-filter__list-item{line-height:36px;padding:0 10px;cursor:pointer;font-size:14px}.el-table-filter__list-item:hover{background-color:#e6faf7;color:#428bca}.el-table-filter__list-item.is-active{background-color:#00D1B2;color:#FFF}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid #EBEEF5;padding:8px}.el-table-filter__bottom button{background:0 0;border:none;color:#606266;cursor:pointer;font-size:13px;padding:0 3px}.el-date-table td.in-range div,.el-date-table td.in-range div:hover,.el-date-table.is-week-mode .el-date-table__row.current div,.el-date-table.is-week-mode .el-date-table__row:hover div{background-color:#F2F6FC}.el-table-filter__bottom button:hover{color:#00D1B2}.el-table-filter__bottom button:focus{outline:0}.el-table-filter__bottom button.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{display:block;margin-right:5px;margin-bottom:8px;margin-left:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-date-table{font-size:12px;-ms-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:#606266}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td{width:32px;padding:4px 0;box-sizing:border-box;text-align:center;cursor:pointer;position:relative}.el-date-table td div{padding:3px 0;box-sizing:border-box}.el-date-table td span{width:24px;height:24px;display:block;margin:0 auto;line-height:24px;position:absolute;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);border-radius:50%}.el-date-table td.next-month,.el-date-table td.prev-month{color:#C0C4CC}.el-date-table td.today{position:relative}.el-date-table td.today span{color:#00D1B2;font-weight:700}.el-date-table td.today.end-date span,.el-date-table td.today.start-date span{color:#FFF}.el-date-table td.available:hover{color:#00D1B2}.el-date-table td.current:not(.disabled) span{color:#FFF;background-color:#00D1B2}.el-date-table td.end-date div,.el-date-table td.start-date div{color:#FFF}.el-date-table td.end-date span,.el-date-table td.start-date span{background-color:#00D1B2}.el-date-table td.start-date div{margin-left:5px;border-top-left-radius:15px;border-bottom-left-radius:15px}.el-date-table td.end-date div{margin-right:5px;border-top-right-radius:15px;border-bottom-right-radius:15px}.el-date-table td.disabled div{background-color:#F5F7FA;opacity:1;cursor:not-allowed;color:#C0C4CC}.el-date-table td.selected div{margin-left:5px;margin-right:5px;background-color:#F2F6FC;border-radius:15px}.el-date-table td.selected div:hover{background-color:#F2F6FC}.el-date-table td.selected span{background-color:#00D1B2;color:#FFF;border-radius:15px}.el-date-table td.week{font-size:80%;color:#606266}.el-month-table,.el-year-table{font-size:12px;border-collapse:collapse}.el-date-table th{padding:5px;color:#606266;font-weight:400;border-bottom:solid 1px #EBEEF5}.el-month-table{margin:-1px}.el-month-table td{text-align:center;padding:8px 0;cursor:pointer}.el-month-table td div{height:48px;padding:6px 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-month-table td.today .cell{color:#00D1B2;font-weight:700}.el-month-table td.today.end-date .cell,.el-month-table td.today.start-date .cell{color:#FFF}.el-month-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-month-table td.disabled .cell:hover{color:#C0C4CC}.el-month-table td .cell{width:60px;height:36px;display:block;line-height:36px;color:#606266;margin:0 auto;border-radius:18px}.el-month-table td .cell:hover{color:#00D1B2}.el-month-table td.in-range div,.el-month-table td.in-range div:hover{background-color:#F2F6FC}.el-month-table td.end-date div,.el-month-table td.start-date div{color:#FFF}.el-month-table td.end-date .cell,.el-month-table td.start-date .cell{color:#FFF;background-color:#00D1B2}.el-month-table td.start-date div{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-month-table td.end-date div{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-month-table td.current:not(.disabled) .cell{color:#00D1B2}.el-year-table{margin:-1px}.el-year-table .el-icon{color:#303133}.el-year-table td{text-align:center;padding:20px 3px;cursor:pointer}.el-year-table td.today .cell{color:#00D1B2;font-weight:700}.el-year-table td.disabled .cell{background-color:#F5F7FA;cursor:not-allowed;color:#C0C4CC}.el-year-table td.disabled .cell:hover{color:#C0C4CC}.el-year-table td .cell{width:48px;height:32px;display:block;line-height:32px;color:#606266;margin:0 auto}.el-year-table td .cell:hover,.el-year-table td.current:not(.disabled) .cell{color:#00D1B2}.el-date-range-picker{width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{position:relative;text-align:center;height:28px}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{float:left;width:50%;-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:16px}.el-date-range-picker__content.is-left{border-right:1px solid #e4e4e4}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{-webkit-box-sizing:border-box;box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-range-picker__time-header>.el-icon-arrow-right{font-size:20px;vertical-align:middle;display:table-cell;color:#303133}.el-date-range-picker__time-picker-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-range-picker__time-picker-wrap .el-picker-panel{position:absolute;top:13px;right:0;z-index:1;background:#FFF}.el-date-picker{width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{position:relative;display:table-cell;padding:0 5px}.el-date-picker__time-header{position:relative;border-bottom:1px solid #e4e4e4;font-size:12px;padding:8px 5px 5px;display:table;width:100%;-webkit-box-sizing:border-box;box-sizing:border-box}.el-date-picker__header{margin:12px;text-align:center}.el-date-picker__header--bordered{margin-bottom:0;padding-bottom:12px;border-bottom:solid 1px #EBEEF5}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{font-size:16px;font-weight:500;padding:0 5px;line-height:22px;text-align:center;cursor:pointer;color:#606266}.el-date-picker__header-label.active,.el-date-picker__header-label:hover{color:#00D1B2}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{float:left;cursor:pointer;line-height:30px;margin-left:10px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.time-select-item.selected:not(.disabled){color:#00D1B2;font-weight:700}.time-select-item.disabled{color:#E4E7ED;cursor:not-allowed}.time-select-item:hover{background-color:#F5F7FA;font-weight:700;cursor:pointer}.el-date-editor{position:relative;display:inline-block;text-align:left}.el-date-editor.el-input,.el-date-editor.el-input__inner{width:220px}.el-date-editor--monthrange.el-input,.el-date-editor--monthrange.el-input__inner{width:300px}.el-date-editor--daterange.el-input,.el-date-editor--daterange.el-input__inner,.el-date-editor--timerange.el-input,.el-date-editor--timerange.el-input__inner{width:350px}.el-date-editor--datetimerange.el-input,.el-date-editor--datetimerange.el-input__inner{width:400px}.el-date-editor--dates .el-input__inner{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .el-icon-circle-close{cursor:pointer}.el-date-editor .el-range__icon{font-size:14px;margin-left:-5px;color:#C0C4CC;float:left;line-height:32px}.el-date-editor .el-range-input,.el-date-editor .el-range-separator{height:100%;margin:0;text-align:center;display:inline-block;font-size:14px}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;outline:0;padding:0;width:39%;color:#606266}.el-date-editor .el-range-input::-webkit-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::-ms-input-placeholder{color:#C0C4CC}.el-date-editor .el-range-input::placeholder{color:#C0C4CC}.el-date-editor .el-range-separator{padding:0 5px;line-height:32px;width:5%;color:#303133}.el-date-editor .el-range__close-icon{font-size:14px;color:#C0C4CC;width:25px;display:inline-block;float:right;line-height:32px}.el-range-editor.el-input__inner{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:3px 10px}.el-range-editor .el-range-input{line-height:1}.el-range-editor.is-active,.el-range-editor.is-active:hover{border-color:#00D1B2}.el-range-editor--medium.el-input__inner{height:36px}.el-range-editor--medium .el-range-separator{line-height:28px;font-size:14px}.el-range-editor--medium .el-range-input{font-size:14px}.el-range-editor--medium .el-range__close-icon,.el-range-editor--medium .el-range__icon{line-height:28px}.el-range-editor--small.el-input__inner{height:32px}.el-range-editor--small .el-range-separator{line-height:24px;font-size:13px}.el-range-editor--small .el-range-input{font-size:13px}.el-range-editor--small .el-range__close-icon,.el-range-editor--small .el-range__icon{line-height:24px}.el-range-editor--mini.el-input__inner{height:28px}.el-range-editor--mini .el-range-separator{line-height:20px;font-size:12px}.el-range-editor--mini .el-range-input{font-size:12px}.el-range-editor--mini .el-range__close-icon,.el-range-editor--mini .el-range__icon{line-height:20px}.el-range-editor.is-disabled{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:#E4E7ED}.el-range-editor.is-disabled input{background-color:#F5F7FA;color:#C0C4CC;cursor:not-allowed}.el-range-editor.is-disabled input::-webkit-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::-ms-input-placeholder{color:#C0C4CC}.el-range-editor.is-disabled input::placeholder{color:#C0C4CC}.el-range-editor.is-disabled .el-range-separator{color:#C0C4CC}.el-picker-panel{color:#606266;border:1px solid #E4E7ED;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);background:#FFF;border-radius:4px;line-height:30px;margin:5px 0}.el-popover,.el-time-panel{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-picker-panel__body-wrapper::after,.el-picker-panel__body::after{content:"";display:table;clear:both}.el-picker-panel__content{position:relative;margin:15px}.el-picker-panel__footer{border-top:1px solid #e4e4e4;padding:4px;text-align:right;background-color:#FFF;position:relative;font-size:0}.el-picker-panel__shortcut{display:block;width:100%;border:0;background-color:transparent;line-height:28px;font-size:14px;color:#606266;padding-left:12px;text-align:left;outline:0;cursor:pointer}.el-picker-panel__shortcut:hover{color:#00D1B2}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:#00D1B2}.el-picker-panel__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-picker-panel__btn[disabled]{color:#ccc;cursor:not-allowed}.el-picker-panel__icon-btn{font-size:12px;color:#303133;border:0;background:0 0;cursor:pointer;outline:0;margin-top:8px}.el-picker-panel__icon-btn:hover{color:#00D1B2}.el-picker-panel__icon-btn.is-disabled{color:#bbb}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{position:absolute;top:0;bottom:0;width:110px;border-right:1px solid #e4e4e4;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;background-color:#FFF;overflow:auto}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{max-height:190px;overflow:auto;display:inline-block;width:50%;vertical-align:top;position:relative}.el-time-spinner__wrapper .el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__wrapper.is-arrow{-webkit-box-sizing:border-box;box-sizing:border-box;text-align:center;overflow:hidden}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{-webkit-transform:translateY(-32px);transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.disabled):not(.active){background:#FFF;cursor:default}.el-time-spinner__arrow{font-size:12px;color:#909399;position:absolute;left:0;width:100%;z-index:1;text-align:center;height:30px;line-height:30px;cursor:pointer}.el-time-spinner__arrow:hover{color:#00D1B2}.el-time-spinner__arrow.el-icon-arrow-up{top:10px}.el-time-spinner__arrow.el-icon-arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__list{margin:0;list-style:none}.el-time-spinner__list::after,.el-time-spinner__list::before{content:'';display:block;width:100%;height:80px}.el-time-spinner__item{height:32px;line-height:32px;font-size:12px;color:#606266}.el-time-spinner__item:hover:not(.disabled):not(.active){background:#F5F7FA;cursor:pointer}.el-time-spinner__item.active:not(.disabled){color:#303133;font-weight:700}.el-time-spinner__item.disabled{color:#C0C4CC;cursor:not-allowed}.el-time-panel{margin:5px 0;border:1px solid #E4E7ED;background-color:#FFF;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);border-radius:2px;position:absolute;width:180px;left:0;z-index:1000;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-box-sizing:content-box;box-sizing:content-box}.el-slider__button,.el-slider__button-wrapper{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content::after,.el-time-panel__content::before{content:"";top:50%;position:absolute;margin-top:-15px;height:32px;z-index:-1;left:0;right:0;-webkit-box-sizing:border-box;box-sizing:border-box;padding-top:6px;text-align:left;border-top:1px solid #E4E7ED;border-bottom:1px solid #E4E7ED}.el-time-panel__content::after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content::before{padding-left:50%;margin-right:12%;margin-left:12%}.el-time-panel__content.has-seconds::after{left:calc(100% / 3 * 2)}.el-time-panel__content.has-seconds::before{padding-left:calc(100% / 3)}.el-time-panel__footer{border-top:1px solid #e4e4e4;padding:4px;height:36px;line-height:25px;text-align:right;-webkit-box-sizing:border-box;box-sizing:border-box}.el-time-panel__btn{border:none;line-height:28px;padding:0 5px;margin:0 5px;cursor:pointer;background-color:transparent;outline:0;font-size:12px;color:#303133}.el-time-panel__btn.confirm{font-weight:800;color:#00D1B2}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{position:relative;text-align:center;padding:10px}.el-time-range-picker__cell{-webkit-box-sizing:border-box;box-sizing:border-box;margin:0;padding:4px 7px 7px;width:50%;display:inline-block}.el-time-range-picker__header{margin-bottom:5px;text-align:center;font-size:14px}.el-time-range-picker__body{border-radius:2px;border:1px solid #E4E7ED}.el-popover{position:absolute;background:#FFF;min-width:150px;border:1px solid #EBEEF5;padding:12px;z-index:2000;color:#606266;line-height:1.4;text-align:justify;font-size:14px;box-shadow:0 2px 12px 0 rgba(0,0,0,.1);word-break:break-all}.el-popover--plain{padding:18px 20px}.el-popover__title{color:#303133;font-size:16px;line-height:1;margin-bottom:12px}.v-modal-enter{-webkit-animation:v-modal-in .2s ease;animation:v-modal-in .2s ease}.v-modal-leave{-webkit-animation:v-modal-out .2s ease forwards;animation:v-modal-out .2s ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{100%{opacity:0}}.v-modal{position:fixed;left:0;top:0;width:100%;height:100%;opacity:.5;background:#000}.el-popup-parent--hidden{overflow:hidden}.el-message-box{display:inline-block;width:420px;padding-bottom:10px;vertical-align:middle;background-color:#FFF;border-radius:4px;border:1px solid #EBEEF5;font-size:18px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);text-align:left;overflow:hidden;-webkit-backface-visibility:hidden;backface-visibility:hidden}.el-message-box__wrapper{position:fixed;top:0;bottom:0;left:0;right:0;text-align:center}.el-message-box__wrapper::after{content:"";display:inline-block;height:100%;width:0;vertical-align:middle}.el-message-box__header{position:relative;padding:15px 15px 10px}.el-message-box__title{padding-left:0;margin-bottom:0;font-size:18px;line-height:1;color:#303133}.el-message-box__headerbtn{position:absolute;top:15px;right:15px;padding:0;border:none;outline:0;background:0 0;font-size:16px;cursor:pointer}.el-form-item.is-error .el-input__inner,.el-form-item.is-error .el-input__inner:focus,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner:focus,.el-message-box__input input.invalid,.el-message-box__input input.invalid:focus{border-color:#F56C6C}.el-message-box__headerbtn .el-message-box__close{color:#909399}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:#00D1B2}.el-message-box__content{padding:10px 15px;color:#606266;font-size:14px}.el-message-box__container{position:relative}.el-message-box__input{padding-top:15px}.el-message-box__status{position:absolute;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);font-size:24px!important}.el-message-box__status::before{padding-left:1px}.el-message-box__status+.el-message-box__message{padding-left:36px;padding-right:12px}.el-message-box__status.el-icon-success{color:#67C23A}.el-message-box__status.el-icon-info{color:#909399}.el-message-box__status.el-icon-warning{color:#E6A23C}.el-message-box__status.el-icon-error{color:#F56C6C}.el-message-box__message{margin:0}.el-message-box__message p{margin:0;line-height:24px}.el-message-box__errormsg{color:#F56C6C;font-size:12px;min-height:18px;margin-top:2px}.el-message-box__btns{padding:5px 15px 0;text-align:right}.el-message-box__btns button:nth-child(2){margin-left:10px}.el-message-box__btns-reverse{-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse}.el-message-box--center{padding-bottom:30px}.el-message-box--center .el-message-box__header{padding-top:30px}.el-message-box--center .el-message-box__title{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message-box--center .el-message-box__status{position:relative;top:auto;padding-right:5px;text-align:center;-webkit-transform:translateY(-1px);transform:translateY(-1px)}.el-message-box--center .el-message-box__message{margin-left:0}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__content{text-align:center}.el-message-box--center .el-message-box__content{padding-left:27px;padding-right:27px}.msgbox-fade-enter-active{-webkit-animation:msgbox-fade-in .3s;animation:msgbox-fade-in .3s}.msgbox-fade-leave-active{-webkit-animation:msgbox-fade-out .3s;animation:msgbox-fade-out .3s}@-webkit-keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes msgbox-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes msgbox-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb::after,.el-breadcrumb::before{display:table;content:""}.el-breadcrumb::after{clear:both}.el-breadcrumb__separator{margin:0 9px;font-weight:700;color:#C0C4CC}.el-breadcrumb__separator[class*=icon]{margin:0 6px;font-weight:400}.el-breadcrumb__item{float:left}.el-breadcrumb__inner{color:#606266}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{font-weight:700;text-decoration:none;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1);color:#303133}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:#00D1B2;cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{font-weight:400;color:#606266;cursor:text}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-form--label-left .el-form-item__label{text-align:left}.el-form--label-top .el-form-item__label{float:none;display:inline-block;text-align:left;padding:0 0 10px}.el-form--inline .el-form-item{display:inline-block;margin-right:10px;vertical-align:top}.el-form--inline .el-form-item__label{float:none;display:inline-block}.el-form--inline .el-form-item__content{display:inline-block;vertical-align:top}.el-form--inline.el-form--label-top .el-form-item__content{display:block}.el-form-item{margin-bottom:22px}.el-form-item::after,.el-form-item::before{display:table;content:""}.el-form-item::after{clear:both}.el-form-item .el-form-item{margin-bottom:0}.el-form-item--mini.el-form-item,.el-form-item--small.el-form-item{margin-bottom:18px}.el-form-item .el-input__validateIcon{display:none}.el-form-item--medium .el-form-item__content,.el-form-item--medium .el-form-item__label{line-height:36px}.el-form-item--small .el-form-item__content,.el-form-item--small .el-form-item__label{line-height:32px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--mini .el-form-item__content,.el-form-item--mini .el-form-item__label{line-height:28px}.el-form-item--mini .el-form-item__error{padding-top:1px}.el-form-item__label-wrap{float:left}.el-form-item__label-wrap .el-form-item__label{display:inline-block;float:none}.el-form-item__label{text-align:right;vertical-align:middle;float:left;font-size:14px;color:#606266;line-height:40px;padding:0 12px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-form-item__content{line-height:40px;position:relative;font-size:14px}.el-form-item__content::after,.el-form-item__content::before{display:table;content:""}.el-form-item__content::after{clear:both}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:#F56C6C;font-size:12px;line-height:1;padding-top:4px;position:absolute;top:100%;left:0}.el-form-item__error--inline{position:relative;top:auto;left:auto;display:inline-block;margin-left:10px}.el-form-item.is-required:not(.is-no-asterisk) .el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk)>.el-form-item__label:before{content:'*';color:#F56C6C;margin-right:4px}.el-form-item.is-error .el-input-group__append .el-input__inner,.el-form-item.is-error .el-input-group__prepend .el-input__inner{border-color:transparent}.el-form-item.is-error .el-input__validateIcon{color:#F56C6C}.el-form-item--feedback .el-input__validateIcon{display:inline-block}.el-tabs__header{padding:0;position:relative;margin:0 0 15px}.el-tabs__active-bar{position:absolute;bottom:0;left:0;height:2px;background-color:#00D1B2;z-index:1;-webkit-transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:-webkit-transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1);transition:transform .3s cubic-bezier(.645,.045,.355,1),-webkit-transform .3s cubic-bezier(.645,.045,.355,1);list-style:none}.el-tabs__new-tab{float:right;border:1px solid #d3dce6;height:18px;width:18px;line-height:18px;margin:12px 0 9px 10px;border-radius:3px;text-align:center;font-size:12px;color:#d3dce6;cursor:pointer;-webkit-transition:all .15s;transition:all .15s}.el-collapse-item__arrow,.el-tabs__nav{-webkit-transition:-webkit-transform .3s}.el-tabs__new-tab .el-icon-plus{-webkit-transform:scale(.8,.8);transform:scale(.8,.8)}.el-tabs__new-tab:hover{color:#00D1B2}.el-tabs__nav-wrap{overflow:hidden;margin-bottom:-1px;position:relative}.el-tabs__nav-wrap::after{content:"";position:absolute;left:0;bottom:0;width:100%;height:2px;background-color:#E4E7ED;z-index:1}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap::after,.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap::after{content:none}.el-tabs__nav-wrap.is-scrollable{padding:0 20px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{position:absolute;cursor:pointer;line-height:44px;font-size:12px;color:#909399}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;position:relative;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;float:left;z-index:2}.el-tabs__nav.is-stretch{min-width:100%;display:-webkit-box;display:-ms-flexbox;display:flex}.el-tabs__nav.is-stretch>*{-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:center}.el-tabs__item{padding:0 20px;height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:40px;display:inline-block;list-style:none;font-size:14px;font-weight:500;color:#303133;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:0}.el-tabs__item:focus.is-active.is-focus:not(:active){-webkit-box-shadow:0 0 2px 2px #00D1B2 inset;box-shadow:0 0 2px 2px #00D1B2 inset;border-radius:3px}.el-tabs__item .el-icon-close{border-radius:50%;text-align:center;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);margin-left:5px}.el-tabs__item .el-icon-close:before{-webkit-transform:scale(.9);transform:scale(.9);display:inline-block}.el-tabs__item .el-icon-close:hover{background-color:#C0C4CC;color:#FFF}.el-tabs__item.is-active{color:#00D1B2}.el-tabs__item:hover{color:#00D1B2;cursor:pointer}.el-tabs__item.is-disabled{color:#C0C4CC;cursor:default}.el-tabs__content{overflow:hidden;position:relative}.el-tabs--card>.el-tabs__header{border-bottom:1px solid #E4E7ED}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid #E4E7ED;border-bottom:none;border-radius:4px 4px 0 0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .el-icon-close{position:relative;font-size:12px;width:0;height:14px;vertical-align:middle;line-height:15px;overflow:hidden;top:-1px;right:-2px;-webkit-transform-origin:100% 50%;transform-origin:100% 50%}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .el-icon-close,.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .el-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid #E4E7ED;-webkit-transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1);transition:color .3s cubic-bezier(.645,.045,.355,1),padding .3s cubic-bezier(.645,.045,.355,1)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:#FFF}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--border-card{background:#FFF;border:1px solid #DCDFE6;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04);box-shadow:0 2px 4px 0 rgba(0,0,0,.12),0 0 6px 0 rgba(0,0,0,.04)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:#F5F7FA;border-bottom:1px solid #E4E7ED;margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__item{-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);border:1px solid transparent;margin-top:-1px;color:#909399}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:#00D1B2;background-color:#FFF;border-right-color:#DCDFE6;border-left-color:#DCDFE6}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:#00D1B2}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:#C0C4CC}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:nth-child(2),.el-tabs--bottom .el-tabs__item.is-top:nth-child(2),.el-tabs--top .el-tabs__item.is-bottom:nth-child(2),.el-tabs--top .el-tabs__item.is-top:nth-child(2){padding-left:0}.el-tabs--bottom .el-tabs__item.is-bottom:last-child,.el-tabs--bottom .el-tabs__item.is-top:last-child,.el-tabs--top .el-tabs__item.is-bottom:last-child,.el-tabs--top .el-tabs__item.is-top:last-child{padding-right:0}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--left>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top .el-tabs--right>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid #DCDFE6}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{top:0;bottom:auto;width:2px;height:auto}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{height:30px;line-height:30px;width:100%;text-align:center;cursor:pointer}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{-webkit-transform:rotateZ(90deg);transform:rotateZ(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{right:auto;bottom:0}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left::after{right:0;left:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left::after,.el-tabs--left .el-tabs__nav-wrap.is-right::after,.el-tabs--right .el-tabs__nav-wrap.is-left::after,.el-tabs--right .el-tabs__nav-wrap.is-right::after{height:100%;width:2px;bottom:auto;top:0}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{float:none}.el-tabs--left .el-tabs__item.is-left,.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-right{display:block}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left,.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--left .el-tabs__header.is-left{float:left;margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-left:none;border-right:1px solid #E4E7ED;border-bottom:none;border-top:1px solid #E4E7ED;text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid #E4E7ED;border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid #E4E7ED;border-right-color:#fff;border-left:none;border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-radius:4px 0 0 4px;border-bottom:1px solid #E4E7ED;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid #dfe4ed}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 transparent}.el-tabs--right .el-tabs__header.is-right{float:right;margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right::after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid #E4E7ED}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid #E4E7ED;border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid #E4E7ED;border-left-color:#fff;border-right:none;border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-radius:0 4px 4px 0;border-bottom:1px solid #E4E7ED;border-left:none}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid #dfe4ed}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 transparent}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{-webkit-animation:slideInRight-enter .3s;animation:slideInRight-enter .3s}.slideInRight-leave{position:absolute;left:0;right:0;-webkit-animation:slideInRight-leave .3s;animation:slideInRight-leave .3s}.slideInLeft-enter{-webkit-animation:slideInLeft-enter .3s;animation:slideInLeft-enter .3s}.slideInLeft-leave{position:absolute;left:0;right:0;-webkit-animation:slideInLeft-leave .3s;animation:slideInLeft-leave .3s}@-webkit-keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@keyframes slideInRight-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(100%);transform:translateX(100%);opacity:0}}@-webkit-keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft-enter{0%{opacity:0;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}to{opacity:1;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0)}}@-webkit-keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}@keyframes slideInLeft-leave{0%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(0);transform:translateX(0);opacity:1}100%{-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:translateX(-100%);transform:translateX(-100%);opacity:0}}.el-tree{position:relative;cursor:default;background:#FFF;color:#606266}.el-tree__empty-block{position:relative;min-height:60px;text-align:center;width:100%;height:100%}.el-tree__empty-text{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#909399;font-size:14px}.el-tree__drop-indicator{position:absolute;left:0;right:0;height:1px;background-color:#00D1B2}.el-tree-node{white-space:nowrap;outline:0}.el-tree-node:focus>.el-tree-node__content{background-color:#F5F7FA}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:#00D1B2;color:#fff}.el-tree-node__content{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:26px;cursor:pointer}.el-tree-node__content>.el-tree-node__expand-icon{padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:#F5F7FA}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{cursor:pointer;color:#C0C4CC;font-size:12px;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.el-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default}.el-tree-node__label{font-size:14px}.el-tree-node__loading-icon{margin-right:8px;font-size:14px;color:#C0C4CC}.el-tree-node>.el-tree-node__children{overflow:hidden;background-color:transparent}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:#ebfbf9}.el-alert{width:100%;padding:8px 16px;margin:0;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;position:relative;background-color:#FFF;overflow:hidden;opacity:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-transition:opacity .2s;transition:opacity .2s}.el-alert.is-light .el-alert__closebtn{color:#C0C4CC}.el-alert.is-dark .el-alert__closebtn,.el-alert.is-dark .el-alert__description{color:#FFF}.el-alert.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-alert--success.is-light{background-color:#f0f9eb;color:#67C23A}.el-alert--success.is-light .el-alert__description{color:#67C23A}.el-alert--success.is-dark{background-color:#67C23A;color:#FFF}.el-alert--info.is-light{background-color:#f4f4f5;color:#909399}.el-alert--info.is-dark{background-color:#909399;color:#FFF}.el-alert--info .el-alert__description{color:#909399}.el-alert--warning.is-light{background-color:#fdf6ec;color:#E6A23C}.el-alert--warning.is-light .el-alert__description{color:#E6A23C}.el-alert--warning.is-dark{background-color:#E6A23C;color:#FFF}.el-alert--error.is-light{background-color:#fef0f0;color:#F56C6C}.el-alert--error.is-light .el-alert__description{color:#F56C6C}.el-alert--error.is-dark{background-color:#F56C6C;color:#FFF}.el-alert__content{display:table-cell;padding:0 8px}.el-alert__icon{font-size:16px;width:16px}.el-alert__icon.is-big{font-size:28px;width:28px}.el-alert__title{font-size:13px;line-height:18px}.el-alert__title.is-bold{font-weight:700}.el-alert .el-alert__description{font-size:12px;margin:5px 0 0}.el-alert__closebtn{font-size:12px;opacity:1;position:absolute;top:12px;right:15px;cursor:pointer}.el-alert-fade-enter,.el-alert-fade-leave-active,.el-loading-fade-enter,.el-loading-fade-leave-active,.el-notification-fade-leave-active{opacity:0}.el-alert__closebtn.is-customed{font-style:normal;font-size:13px;top:9px}.el-notification{display:-webkit-box;display:-ms-flexbox;display:flex;width:330px;padding:14px 26px 14px 13px;border-radius:8px;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #EBEEF5;position:fixed;background-color:#FFF;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1);-webkit-transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s;transition:opacity .3s,transform .3s,left .3s,right .3s,top .4s,bottom .3s,-webkit-transform .3s;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{margin-left:13px;margin-right:8px}.el-notification__title{font-weight:700;font-size:16px;color:#303133;margin:0}.el-notification__content{font-size:14px;line-height:21px;margin:6px 0 0;color:#606266;text-align:justify}.el-notification__content p{margin:0}.el-notification__icon{height:24px;width:24px;font-size:24px}.el-notification__closeBtn{position:absolute;top:18px;right:15px;cursor:pointer;color:#909399;font-size:16px}.el-notification__closeBtn:hover{color:#606266}.el-notification .el-icon-success{color:#67C23A}.el-notification .el-icon-error{color:#F56C6C}.el-notification .el-icon-info{color:#909399}.el-notification .el-icon-warning{color:#E6A23C}.el-notification-fade-enter.right{right:0;-webkit-transform:translateX(100%);transform:translateX(100%)}.el-notification-fade-enter.left{left:0;-webkit-transform:translateX(-100%);transform:translateX(-100%)}.el-input-number{position:relative;display:inline-block;width:180px;line-height:38px}.el-input-number .el-input{display:block}.el-input-number .el-input__inner{-webkit-appearance:none;padding-left:50px;padding-right:50px;text-align:center}.el-input-number__decrease,.el-input-number__increase{position:absolute;z-index:1;top:1px;width:40px;height:auto;text-align:center;background:#F5F7FA;color:#606266;cursor:pointer;font-size:13px}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:#00D1B2}.el-input-number__decrease:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled),.el-input-number__increase:hover:not(.is-disabled)~.el-input .el-input__inner:not(.is-disabled){border-color:#00D1B2}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-input-number__increase{right:1px;border-radius:0 4px 4px 0;border-left:1px solid #DCDFE6}.el-input-number__decrease{left:1px;border-radius:4px 0 0 4px;border-right:1px solid #DCDFE6}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:#E4E7ED;color:#E4E7ED}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:#E4E7ED;cursor:not-allowed}.el-input-number--medium{width:200px;line-height:34px}.el-input-number--medium .el-input-number__decrease,.el-input-number--medium .el-input-number__increase{width:36px;font-size:14px}.el-input-number--medium .el-input__inner{padding-left:43px;padding-right:43px}.el-input-number--small{width:130px;line-height:30px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{width:32px;font-size:13px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.9);transform:scale(.9)}.el-input-number--small .el-input__inner{padding-left:39px;padding-right:39px}.el-input-number--mini{width:130px;line-height:26px}.el-input-number--mini .el-input-number__decrease,.el-input-number--mini .el-input-number__increase{width:28px;font-size:12px}.el-input-number--mini .el-input-number__decrease [class*=el-icon],.el-input-number--mini .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number--mini .el-input__inner{padding-left:35px;padding-right:35px}.el-input-number.is-without-controls .el-input__inner{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__inner{padding-left:15px;padding-right:50px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{height:auto;line-height:19px}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{-webkit-transform:scale(.8);transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 4px 0 0;border-bottom:1px solid #DCDFE6}.el-input-number.is-controls-right .el-input-number__decrease{right:1px;bottom:1px;top:auto;left:auto;border-right:none;border-left:1px solid #DCDFE6;border-radius:0 0 4px}.el-input-number.is-controls-right[class*=medium] [class*=decrease],.el-input-number.is-controls-right[class*=medium] [class*=increase]{line-height:17px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{line-height:15px}.el-input-number.is-controls-right[class*=mini] [class*=decrease],.el-input-number.is-controls-right[class*=mini] [class*=increase]{line-height:13px}.el-tooltip__popper{position:absolute;border-radius:4px;padding:10px;z-index:2000;font-size:12px;line-height:1.2;min-width:10px;word-wrap:break-word}.el-tooltip__popper .popper__arrow,.el-tooltip__popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-tooltip__popper .popper__arrow{border-width:6px}.el-tooltip__popper .popper__arrow::after{content:" ";border-width:5px}.el-progress-bar__inner::after,.el-row::after,.el-row::before,.el-slider::after,.el-slider::before,.el-slider__button-wrapper::after,.el-upload-cover::after{content:""}.el-tooltip__popper[x-placement^=top]{margin-bottom:12px}.el-tooltip__popper[x-placement^=top] .popper__arrow{bottom:-6px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-5px;border-top-color:#303133;border-bottom-width:0}.el-tooltip__popper[x-placement^=bottom]{margin-top:12px}.el-tooltip__popper[x-placement^=bottom] .popper__arrow{top:-6px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-5px;border-top-width:0;border-bottom-color:#303133}.el-tooltip__popper[x-placement^=right]{margin-left:12px}.el-tooltip__popper[x-placement^=right] .popper__arrow{left:-6px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=right] .popper__arrow::after{bottom:-5px;left:1px;border-right-color:#303133;border-left-width:0}.el-tooltip__popper[x-placement^=left]{margin-right:12px}.el-tooltip__popper[x-placement^=left] .popper__arrow{right:-6px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-5px;margin-left:-5px;border-right-width:0;border-left-color:#303133}.el-tooltip__popper.is-dark{background:#303133;color:#FFF}.el-tooltip__popper.is-light{background:#FFF;border:1px solid #303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow{border-top-color:#303133}.el-tooltip__popper.is-light[x-placement^=top] .popper__arrow::after{border-top-color:#FFF}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow{border-bottom-color:#303133}.el-tooltip__popper.is-light[x-placement^=bottom] .popper__arrow::after{border-bottom-color:#FFF}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow{border-left-color:#303133}.el-tooltip__popper.is-light[x-placement^=left] .popper__arrow::after{border-left-color:#FFF}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow{border-right-color:#303133}.el-tooltip__popper.is-light[x-placement^=right] .popper__arrow::after{border-right-color:#FFF}.el-slider::after,.el-slider::before{display:table}.el-slider__button-wrapper .el-tooltip,.el-slider__button-wrapper::after{vertical-align:middle;display:inline-block}.el-slider::after{clear:both}.el-slider__runway{width:100%;height:6px;margin:16px 0;background-color:#E4E7ED;border-radius:3px;position:relative;cursor:pointer;vertical-align:middle}.el-slider__runway.show-input{margin-right:160px;width:auto}.el-slider__runway.disabled{cursor:default}.el-slider__runway.disabled .el-slider__bar{background-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button{border-color:#C0C4CC}.el-slider__runway.disabled .el-slider__button-wrapper.dragging,.el-slider__runway.disabled .el-slider__button-wrapper.hover,.el-slider__runway.disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.disabled .el-slider__button.dragging,.el-slider__runway.disabled .el-slider__button.hover,.el-slider__runway.disabled .el-slider__button:hover{-webkit-transform:scale(1);transform:scale(1);cursor:not-allowed}.el-slider__button-wrapper,.el-slider__stop{-webkit-transform:translateX(-50%);position:absolute}.el-slider__input{float:right;margin-top:3px;width:130px}.el-slider__input.el-input-number--mini{margin-top:5px}.el-slider__input.el-input-number--medium{margin-top:0}.el-slider__input.el-input-number--large{margin-top:-2px}.el-slider__bar{height:6px;background-color:#00D1B2;border-top-left-radius:3px;border-bottom-left-radius:3px;position:absolute}.el-slider__button-wrapper{height:36px;width:36px;z-index:1001;top:-15px;transform:translateX(-50%);background-color:transparent;text-align:center;user-select:none;line-height:normal}.el-slider__button-wrapper::after{height:100%}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button-wrapper.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__button{width:16px;height:16px;border:2px solid #00D1B2;background-color:#FFF;border-radius:50%;-webkit-transition:.2s;transition:.2s;user-select:none}.el-image-viewer__btn,.el-step__icon-inner{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{-webkit-transform:scale(1.2);transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:-webkit-grab;cursor:grab}.el-slider__button.dragging{cursor:-webkit-grabbing;cursor:grabbing}.el-slider__stop{height:6px;width:6px;border-radius:100%;background-color:#FFF;transform:translateX(-50%)}.el-slider__marks{top:0;left:12px;width:18px;height:100%}.el-slider__marks-text{position:absolute;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:14px;color:#909399;margin-top:15px}.el-slider.is-vertical{position:relative}.el-slider.is-vertical .el-slider__runway{width:6px;height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:6px;height:auto;border-radius:0 0 3px 3px}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:-15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{-webkit-transform:translateY(50%);transform:translateY(50%)}.el-slider.is-vertical.el-slider--with-input{padding-bottom:58px}.el-slider.is-vertical.el-slider--with-input .el-slider__input{overflow:visible;float:none;position:absolute;bottom:22px;width:36px;margin-top:15px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input__inner{text-align:center;padding-left:5px;padding-right:5px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{top:32px;margin-top:-1px;border:1px solid #DCDFE6;line-height:20px;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__decrease{width:18px;right:18px;border-bottom-left-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase{width:19px;border-bottom-right-radius:4px}.el-slider.is-vertical.el-slider--with-input .el-slider__input .el-input-number__increase~.el-input .el-input__inner{border-bottom-left-radius:0;border-bottom-right-radius:0}.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:hover .el-input-number__increase{border-color:#C0C4CC}.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__decrease,.el-slider.is-vertical.el-slider--with-input .el-slider__input:active .el-input-number__increase{border-color:#00D1B2}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;-webkit-transform:translateY(50%);transform:translateY(50%)}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{position:absolute;z-index:2000;background-color:rgba(255,255,255,.9);margin:0;top:0;right:0;bottom:0;left:0;-webkit-transition:opacity .3s;transition:opacity .3s}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:-25px}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:50px;width:50px}.el-loading-spinner{top:50%;margin-top:-21px;width:100%;text-align:center;position:absolute}.el-col-pull-0,.el-col-pull-1,.el-col-pull-10,.el-col-pull-11,.el-col-pull-13,.el-col-pull-14,.el-col-pull-15,.el-col-pull-16,.el-col-pull-17,.el-col-pull-18,.el-col-pull-19,.el-col-pull-2,.el-col-pull-20,.el-col-pull-21,.el-col-pull-22,.el-col-pull-23,.el-col-pull-24,.el-col-pull-3,.el-col-pull-4,.el-col-pull-5,.el-col-pull-6,.el-col-pull-7,.el-col-pull-8,.el-col-pull-9,.el-col-push-0,.el-col-push-1,.el-col-push-10,.el-col-push-11,.el-col-push-12,.el-col-push-13,.el-col-push-14,.el-col-push-15,.el-col-push-16,.el-col-push-17,.el-col-push-18,.el-col-push-19,.el-col-push-2,.el-col-push-20,.el-col-push-21,.el-col-push-22,.el-col-push-23,.el-col-push-24,.el-col-push-3,.el-col-push-4,.el-col-push-5,.el-col-push-6,.el-col-push-7,.el-col-push-8,.el-col-push-9,.el-row{position:relative}.el-loading-spinner .el-loading-text{color:#00D1B2;margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:42px;width:42px;-webkit-animation:loading-rotate 2s linear infinite;animation:loading-rotate 2s linear infinite}.el-loading-spinner .path{-webkit-animation:loading-dash 1.5s ease-in-out infinite;animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:#00D1B2;stroke-linecap:round}.el-loading-spinner i{color:#00D1B2}@-webkit-keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes loading-rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}100%{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-row{-webkit-box-sizing:border-box;box-sizing:border-box}.el-row::after,.el-row::before{display:table}.el-row::after{clear:both}.el-row--flex{display:-webkit-box;display:-ms-flexbox;display:flex}.el-col-0,.el-row--flex:after,.el-row--flex:before{display:none}.el-row--flex.is-justify-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-row--flex.is-justify-end{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.el-row--flex.is-justify-space-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.el-row--flex.is-justify-space-around{-ms-flex-pack:distribute;justify-content:space-around}.el-row--flex.is-align-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-row--flex.is-align-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}[class*=el-col-]{float:left;-webkit-box-sizing:border-box;box-sizing:border-box}.el-upload--picture-card,.el-upload-dragger{-webkit-box-sizing:border-box;cursor:pointer}.el-col-0{width:0%}.el-col-offset-0{margin-left:0}.el-col-pull-0{right:0}.el-col-push-0{left:0}.el-col-1{width:4.16667%}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{right:4.16667%}.el-col-push-1{left:4.16667%}.el-col-2{width:8.33333%}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{right:8.33333%}.el-col-push-2{left:8.33333%}.el-col-3{width:12.5%}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{right:12.5%}.el-col-push-3{left:12.5%}.el-col-4{width:16.66667%}.el-col-offset-4{margin-left:16.66667%}.el-col-pull-4{right:16.66667%}.el-col-push-4{left:16.66667%}.el-col-5{width:20.83333%}.el-col-offset-5{margin-left:20.83333%}.el-col-pull-5{right:20.83333%}.el-col-push-5{left:20.83333%}.el-col-6{width:25%}.el-col-offset-6{margin-left:25%}.el-col-pull-6{right:25%}.el-col-push-6{left:25%}.el-col-7{width:29.16667%}.el-col-offset-7{margin-left:29.16667%}.el-col-pull-7{right:29.16667%}.el-col-push-7{left:29.16667%}.el-col-8{width:33.33333%}.el-col-offset-8{margin-left:33.33333%}.el-col-pull-8{right:33.33333%}.el-col-push-8{left:33.33333%}.el-col-9{width:37.5%}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{right:37.5%}.el-col-push-9{left:37.5%}.el-col-10{width:41.66667%}.el-col-offset-10{margin-left:41.66667%}.el-col-pull-10{right:41.66667%}.el-col-push-10{left:41.66667%}.el-col-11{width:45.83333%}.el-col-offset-11{margin-left:45.83333%}.el-col-pull-11{right:45.83333%}.el-col-push-11{left:45.83333%}.el-col-12{width:50%}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%}.el-col-13{width:54.16667%}.el-col-offset-13{margin-left:54.16667%}.el-col-pull-13{right:54.16667%}.el-col-push-13{left:54.16667%}.el-col-14{width:58.33333%}.el-col-offset-14{margin-left:58.33333%}.el-col-pull-14{right:58.33333%}.el-col-push-14{left:58.33333%}.el-col-15{width:62.5%}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{right:62.5%}.el-col-push-15{left:62.5%}.el-col-16{width:66.66667%}.el-col-offset-16{margin-left:66.66667%}.el-col-pull-16{right:66.66667%}.el-col-push-16{left:66.66667%}.el-col-17{width:70.83333%}.el-col-offset-17{margin-left:70.83333%}.el-col-pull-17{right:70.83333%}.el-col-push-17{left:70.83333%}.el-col-18{width:75%}.el-col-offset-18{margin-left:75%}.el-col-pull-18{right:75%}.el-col-push-18{left:75%}.el-col-19{width:79.16667%}.el-col-offset-19{margin-left:79.16667%}.el-col-pull-19{right:79.16667%}.el-col-push-19{left:79.16667%}.el-col-20{width:83.33333%}.el-col-offset-20{margin-left:83.33333%}.el-col-pull-20{right:83.33333%}.el-col-push-20{left:83.33333%}.el-col-21{width:87.5%}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{right:87.5%}.el-col-push-21{left:87.5%}.el-col-22{width:91.66667%}.el-col-offset-22{margin-left:91.66667%}.el-col-pull-22{right:91.66667%}.el-col-push-22{left:91.66667%}.el-col-23{width:95.83333%}.el-col-offset-23{margin-left:95.83333%}.el-col-pull-23{right:95.83333%}.el-col-push-23{left:95.83333%}.el-col-24{width:100%}.el-col-offset-24{margin-left:100%}.el-col-pull-24{right:100%}.el-col-push-24{left:100%}@media only screen and (max-width:767px){.el-col-xs-0{display:none;width:0%}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{position:relative;left:0}.el-col-xs-1{width:4.16667%}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{width:8.33333%}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{width:12.5%}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{position:relative;left:12.5%}.el-col-xs-4{width:16.66667%}.el-col-xs-offset-4{margin-left:16.66667%}.el-col-xs-pull-4{position:relative;right:16.66667%}.el-col-xs-push-4{position:relative;left:16.66667%}.el-col-xs-5{width:20.83333%}.el-col-xs-offset-5{margin-left:20.83333%}.el-col-xs-pull-5{position:relative;right:20.83333%}.el-col-xs-push-5{position:relative;left:20.83333%}.el-col-xs-6{width:25%}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{position:relative;left:25%}.el-col-xs-7{width:29.16667%}.el-col-xs-offset-7{margin-left:29.16667%}.el-col-xs-pull-7{position:relative;right:29.16667%}.el-col-xs-push-7{position:relative;left:29.16667%}.el-col-xs-8{width:33.33333%}.el-col-xs-offset-8{margin-left:33.33333%}.el-col-xs-pull-8{position:relative;right:33.33333%}.el-col-xs-push-8{position:relative;left:33.33333%}.el-col-xs-9{width:37.5%}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{position:relative;left:37.5%}.el-col-xs-10{width:41.66667%}.el-col-xs-offset-10{margin-left:41.66667%}.el-col-xs-pull-10{position:relative;right:41.66667%}.el-col-xs-push-10{position:relative;left:41.66667%}.el-col-xs-11{width:45.83333%}.el-col-xs-offset-11{margin-left:45.83333%}.el-col-xs-pull-11{position:relative;right:45.83333%}.el-col-xs-push-11{position:relative;left:45.83333%}.el-col-xs-12{width:50%}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{position:relative;left:50%}.el-col-xs-13{width:54.16667%}.el-col-xs-offset-13{margin-left:54.16667%}.el-col-xs-pull-13{position:relative;right:54.16667%}.el-col-xs-push-13{position:relative;left:54.16667%}.el-col-xs-14{width:58.33333%}.el-col-xs-offset-14{margin-left:58.33333%}.el-col-xs-pull-14{position:relative;right:58.33333%}.el-col-xs-push-14{position:relative;left:58.33333%}.el-col-xs-15{width:62.5%}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{position:relative;left:62.5%}.el-col-xs-16{width:66.66667%}.el-col-xs-offset-16{margin-left:66.66667%}.el-col-xs-pull-16{position:relative;right:66.66667%}.el-col-xs-push-16{position:relative;left:66.66667%}.el-col-xs-17{width:70.83333%}.el-col-xs-offset-17{margin-left:70.83333%}.el-col-xs-pull-17{position:relative;right:70.83333%}.el-col-xs-push-17{position:relative;left:70.83333%}.el-col-xs-18{width:75%}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{position:relative;left:75%}.el-col-xs-19{width:79.16667%}.el-col-xs-offset-19{margin-left:79.16667%}.el-col-xs-pull-19{position:relative;right:79.16667%}.el-col-xs-push-19{position:relative;left:79.16667%}.el-col-xs-20{width:83.33333%}.el-col-xs-offset-20{margin-left:83.33333%}.el-col-xs-pull-20{position:relative;right:83.33333%}.el-col-xs-push-20{position:relative;left:83.33333%}.el-col-xs-21{width:87.5%}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{position:relative;left:87.5%}.el-col-xs-22{width:91.66667%}.el-col-xs-offset-22{margin-left:91.66667%}.el-col-xs-pull-22{position:relative;right:91.66667%}.el-col-xs-push-22{position:relative;left:91.66667%}.el-col-xs-23{width:95.83333%}.el-col-xs-offset-23{margin-left:95.83333%}.el-col-xs-pull-23{position:relative;right:95.83333%}.el-col-xs-push-23{position:relative;left:95.83333%}.el-col-xs-24{width:100%}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;width:0%}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{position:relative;left:0}.el-col-sm-1{width:4.16667%}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{width:8.33333%}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{width:12.5%}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{position:relative;left:12.5%}.el-col-sm-4{width:16.66667%}.el-col-sm-offset-4{margin-left:16.66667%}.el-col-sm-pull-4{position:relative;right:16.66667%}.el-col-sm-push-4{position:relative;left:16.66667%}.el-col-sm-5{width:20.83333%}.el-col-sm-offset-5{margin-left:20.83333%}.el-col-sm-pull-5{position:relative;right:20.83333%}.el-col-sm-push-5{position:relative;left:20.83333%}.el-col-sm-6{width:25%}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{position:relative;left:25%}.el-col-sm-7{width:29.16667%}.el-col-sm-offset-7{margin-left:29.16667%}.el-col-sm-pull-7{position:relative;right:29.16667%}.el-col-sm-push-7{position:relative;left:29.16667%}.el-col-sm-8{width:33.33333%}.el-col-sm-offset-8{margin-left:33.33333%}.el-col-sm-pull-8{position:relative;right:33.33333%}.el-col-sm-push-8{position:relative;left:33.33333%}.el-col-sm-9{width:37.5%}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{position:relative;left:37.5%}.el-col-sm-10{width:41.66667%}.el-col-sm-offset-10{margin-left:41.66667%}.el-col-sm-pull-10{position:relative;right:41.66667%}.el-col-sm-push-10{position:relative;left:41.66667%}.el-col-sm-11{width:45.83333%}.el-col-sm-offset-11{margin-left:45.83333%}.el-col-sm-pull-11{position:relative;right:45.83333%}.el-col-sm-push-11{position:relative;left:45.83333%}.el-col-sm-12{width:50%}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{position:relative;left:50%}.el-col-sm-13{width:54.16667%}.el-col-sm-offset-13{margin-left:54.16667%}.el-col-sm-pull-13{position:relative;right:54.16667%}.el-col-sm-push-13{position:relative;left:54.16667%}.el-col-sm-14{width:58.33333%}.el-col-sm-offset-14{margin-left:58.33333%}.el-col-sm-pull-14{position:relative;right:58.33333%}.el-col-sm-push-14{position:relative;left:58.33333%}.el-col-sm-15{width:62.5%}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{position:relative;left:62.5%}.el-col-sm-16{width:66.66667%}.el-col-sm-offset-16{margin-left:66.66667%}.el-col-sm-pull-16{position:relative;right:66.66667%}.el-col-sm-push-16{position:relative;left:66.66667%}.el-col-sm-17{width:70.83333%}.el-col-sm-offset-17{margin-left:70.83333%}.el-col-sm-pull-17{position:relative;right:70.83333%}.el-col-sm-push-17{position:relative;left:70.83333%}.el-col-sm-18{width:75%}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{position:relative;left:75%}.el-col-sm-19{width:79.16667%}.el-col-sm-offset-19{margin-left:79.16667%}.el-col-sm-pull-19{position:relative;right:79.16667%}.el-col-sm-push-19{position:relative;left:79.16667%}.el-col-sm-20{width:83.33333%}.el-col-sm-offset-20{margin-left:83.33333%}.el-col-sm-pull-20{position:relative;right:83.33333%}.el-col-sm-push-20{position:relative;left:83.33333%}.el-col-sm-21{width:87.5%}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{position:relative;left:87.5%}.el-col-sm-22{width:91.66667%}.el-col-sm-offset-22{margin-left:91.66667%}.el-col-sm-pull-22{position:relative;right:91.66667%}.el-col-sm-push-22{position:relative;left:91.66667%}.el-col-sm-23{width:95.83333%}.el-col-sm-offset-23{margin-left:95.83333%}.el-col-sm-pull-23{position:relative;right:95.83333%}.el-col-sm-push-23{position:relative;left:95.83333%}.el-col-sm-24{width:100%}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{display:none;width:0%}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{position:relative;left:0}.el-col-md-1{width:4.16667%}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{width:8.33333%}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{width:12.5%}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{position:relative;left:12.5%}.el-col-md-4{width:16.66667%}.el-col-md-offset-4{margin-left:16.66667%}.el-col-md-pull-4{position:relative;right:16.66667%}.el-col-md-push-4{position:relative;left:16.66667%}.el-col-md-5{width:20.83333%}.el-col-md-offset-5{margin-left:20.83333%}.el-col-md-pull-5{position:relative;right:20.83333%}.el-col-md-push-5{position:relative;left:20.83333%}.el-col-md-6{width:25%}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{position:relative;left:25%}.el-col-md-7{width:29.16667%}.el-col-md-offset-7{margin-left:29.16667%}.el-col-md-pull-7{position:relative;right:29.16667%}.el-col-md-push-7{position:relative;left:29.16667%}.el-col-md-8{width:33.33333%}.el-col-md-offset-8{margin-left:33.33333%}.el-col-md-pull-8{position:relative;right:33.33333%}.el-col-md-push-8{position:relative;left:33.33333%}.el-col-md-9{width:37.5%}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{position:relative;left:37.5%}.el-col-md-10{width:41.66667%}.el-col-md-offset-10{margin-left:41.66667%}.el-col-md-pull-10{position:relative;right:41.66667%}.el-col-md-push-10{position:relative;left:41.66667%}.el-col-md-11{width:45.83333%}.el-col-md-offset-11{margin-left:45.83333%}.el-col-md-pull-11{position:relative;right:45.83333%}.el-col-md-push-11{position:relative;left:45.83333%}.el-col-md-12{width:50%}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{position:relative;left:50%}.el-col-md-13{width:54.16667%}.el-col-md-offset-13{margin-left:54.16667%}.el-col-md-pull-13{position:relative;right:54.16667%}.el-col-md-push-13{position:relative;left:54.16667%}.el-col-md-14{width:58.33333%}.el-col-md-offset-14{margin-left:58.33333%}.el-col-md-pull-14{position:relative;right:58.33333%}.el-col-md-push-14{position:relative;left:58.33333%}.el-col-md-15{width:62.5%}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{position:relative;left:62.5%}.el-col-md-16{width:66.66667%}.el-col-md-offset-16{margin-left:66.66667%}.el-col-md-pull-16{position:relative;right:66.66667%}.el-col-md-push-16{position:relative;left:66.66667%}.el-col-md-17{width:70.83333%}.el-col-md-offset-17{margin-left:70.83333%}.el-col-md-pull-17{position:relative;right:70.83333%}.el-col-md-push-17{position:relative;left:70.83333%}.el-col-md-18{width:75%}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{position:relative;left:75%}.el-col-md-19{width:79.16667%}.el-col-md-offset-19{margin-left:79.16667%}.el-col-md-pull-19{position:relative;right:79.16667%}.el-col-md-push-19{position:relative;left:79.16667%}.el-col-md-20{width:83.33333%}.el-col-md-offset-20{margin-left:83.33333%}.el-col-md-pull-20{position:relative;right:83.33333%}.el-col-md-push-20{position:relative;left:83.33333%}.el-col-md-21{width:87.5%}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{position:relative;left:87.5%}.el-col-md-22{width:91.66667%}.el-col-md-offset-22{margin-left:91.66667%}.el-col-md-pull-22{position:relative;right:91.66667%}.el-col-md-push-22{position:relative;left:91.66667%}.el-col-md-23{width:95.83333%}.el-col-md-offset-23{margin-left:95.83333%}.el-col-md-pull-23{position:relative;right:95.83333%}.el-col-md-push-23{position:relative;left:95.83333%}.el-col-md-24{width:100%}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;width:0%}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{position:relative;left:0}.el-col-lg-1{width:4.16667%}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{width:8.33333%}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{width:12.5%}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{position:relative;left:12.5%}.el-col-lg-4{width:16.66667%}.el-col-lg-offset-4{margin-left:16.66667%}.el-col-lg-pull-4{position:relative;right:16.66667%}.el-col-lg-push-4{position:relative;left:16.66667%}.el-col-lg-5{width:20.83333%}.el-col-lg-offset-5{margin-left:20.83333%}.el-col-lg-pull-5{position:relative;right:20.83333%}.el-col-lg-push-5{position:relative;left:20.83333%}.el-col-lg-6{width:25%}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{position:relative;left:25%}.el-col-lg-7{width:29.16667%}.el-col-lg-offset-7{margin-left:29.16667%}.el-col-lg-pull-7{position:relative;right:29.16667%}.el-col-lg-push-7{position:relative;left:29.16667%}.el-col-lg-8{width:33.33333%}.el-col-lg-offset-8{margin-left:33.33333%}.el-col-lg-pull-8{position:relative;right:33.33333%}.el-col-lg-push-8{position:relative;left:33.33333%}.el-col-lg-9{width:37.5%}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{position:relative;left:37.5%}.el-col-lg-10{width:41.66667%}.el-col-lg-offset-10{margin-left:41.66667%}.el-col-lg-pull-10{position:relative;right:41.66667%}.el-col-lg-push-10{position:relative;left:41.66667%}.el-col-lg-11{width:45.83333%}.el-col-lg-offset-11{margin-left:45.83333%}.el-col-lg-pull-11{position:relative;right:45.83333%}.el-col-lg-push-11{position:relative;left:45.83333%}.el-col-lg-12{width:50%}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{position:relative;left:50%}.el-col-lg-13{width:54.16667%}.el-col-lg-offset-13{margin-left:54.16667%}.el-col-lg-pull-13{position:relative;right:54.16667%}.el-col-lg-push-13{position:relative;left:54.16667%}.el-col-lg-14{width:58.33333%}.el-col-lg-offset-14{margin-left:58.33333%}.el-col-lg-pull-14{position:relative;right:58.33333%}.el-col-lg-push-14{position:relative;left:58.33333%}.el-col-lg-15{width:62.5%}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{position:relative;left:62.5%}.el-col-lg-16{width:66.66667%}.el-col-lg-offset-16{margin-left:66.66667%}.el-col-lg-pull-16{position:relative;right:66.66667%}.el-col-lg-push-16{position:relative;left:66.66667%}.el-col-lg-17{width:70.83333%}.el-col-lg-offset-17{margin-left:70.83333%}.el-col-lg-pull-17{position:relative;right:70.83333%}.el-col-lg-push-17{position:relative;left:70.83333%}.el-col-lg-18{width:75%}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{position:relative;left:75%}.el-col-lg-19{width:79.16667%}.el-col-lg-offset-19{margin-left:79.16667%}.el-col-lg-pull-19{position:relative;right:79.16667%}.el-col-lg-push-19{position:relative;left:79.16667%}.el-col-lg-20{width:83.33333%}.el-col-lg-offset-20{margin-left:83.33333%}.el-col-lg-pull-20{position:relative;right:83.33333%}.el-col-lg-push-20{position:relative;left:83.33333%}.el-col-lg-21{width:87.5%}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{position:relative;left:87.5%}.el-col-lg-22{width:91.66667%}.el-col-lg-offset-22{margin-left:91.66667%}.el-col-lg-pull-22{position:relative;right:91.66667%}.el-col-lg-push-22{position:relative;left:91.66667%}.el-col-lg-23{width:95.83333%}.el-col-lg-offset-23{margin-left:95.83333%}.el-col-lg-pull-23{position:relative;right:95.83333%}.el-col-lg-push-23{position:relative;left:95.83333%}.el-col-lg-24{width:100%}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;width:0%}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{position:relative;left:0}.el-col-xl-1{width:4.16667%}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{width:8.33333%}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{width:12.5%}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{position:relative;left:12.5%}.el-col-xl-4{width:16.66667%}.el-col-xl-offset-4{margin-left:16.66667%}.el-col-xl-pull-4{position:relative;right:16.66667%}.el-col-xl-push-4{position:relative;left:16.66667%}.el-col-xl-5{width:20.83333%}.el-col-xl-offset-5{margin-left:20.83333%}.el-col-xl-pull-5{position:relative;right:20.83333%}.el-col-xl-push-5{position:relative;left:20.83333%}.el-col-xl-6{width:25%}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{position:relative;left:25%}.el-col-xl-7{width:29.16667%}.el-col-xl-offset-7{margin-left:29.16667%}.el-col-xl-pull-7{position:relative;right:29.16667%}.el-col-xl-push-7{position:relative;left:29.16667%}.el-col-xl-8{width:33.33333%}.el-col-xl-offset-8{margin-left:33.33333%}.el-col-xl-pull-8{position:relative;right:33.33333%}.el-col-xl-push-8{position:relative;left:33.33333%}.el-col-xl-9{width:37.5%}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{position:relative;left:37.5%}.el-col-xl-10{width:41.66667%}.el-col-xl-offset-10{margin-left:41.66667%}.el-col-xl-pull-10{position:relative;right:41.66667%}.el-col-xl-push-10{position:relative;left:41.66667%}.el-col-xl-11{width:45.83333%}.el-col-xl-offset-11{margin-left:45.83333%}.el-col-xl-pull-11{position:relative;right:45.83333%}.el-col-xl-push-11{position:relative;left:45.83333%}.el-col-xl-12{width:50%}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{position:relative;left:50%}.el-col-xl-13{width:54.16667%}.el-col-xl-offset-13{margin-left:54.16667%}.el-col-xl-pull-13{position:relative;right:54.16667%}.el-col-xl-push-13{position:relative;left:54.16667%}.el-col-xl-14{width:58.33333%}.el-col-xl-offset-14{margin-left:58.33333%}.el-col-xl-pull-14{position:relative;right:58.33333%}.el-col-xl-push-14{position:relative;left:58.33333%}.el-col-xl-15{width:62.5%}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{position:relative;left:62.5%}.el-col-xl-16{width:66.66667%}.el-col-xl-offset-16{margin-left:66.66667%}.el-col-xl-pull-16{position:relative;right:66.66667%}.el-col-xl-push-16{position:relative;left:66.66667%}.el-col-xl-17{width:70.83333%}.el-col-xl-offset-17{margin-left:70.83333%}.el-col-xl-pull-17{position:relative;right:70.83333%}.el-col-xl-push-17{position:relative;left:70.83333%}.el-col-xl-18{width:75%}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{position:relative;left:75%}.el-col-xl-19{width:79.16667%}.el-col-xl-offset-19{margin-left:79.16667%}.el-col-xl-pull-19{position:relative;right:79.16667%}.el-col-xl-push-19{position:relative;left:79.16667%}.el-col-xl-20{width:83.33333%}.el-col-xl-offset-20{margin-left:83.33333%}.el-col-xl-pull-20{position:relative;right:83.33333%}.el-col-xl-push-20{position:relative;left:83.33333%}.el-col-xl-21{width:87.5%}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{position:relative;left:87.5%}.el-col-xl-22{width:91.66667%}.el-col-xl-offset-22{margin-left:91.66667%}.el-col-xl-pull-22{position:relative;right:91.66667%}.el-col-xl-push-22{position:relative;left:91.66667%}.el-col-xl-23{width:95.83333%}.el-col-xl-offset-23{margin-left:95.83333%}.el-col-xl-pull-23{position:relative;right:95.83333%}.el-col-xl-push-23{position:relative;left:95.83333%}.el-col-xl-24{width:100%}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{position:relative;left:100%}}@-webkit-keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-upload{display:inline-block;text-align:center;cursor:pointer;outline:0}.el-upload__input{display:none}.el-upload__tip{font-size:12px;color:#606266;margin-top:7px}.el-upload iframe{position:absolute;z-index:-1;top:0;left:0;opacity:0;filter:alpha(opacity=0)}.el-upload--picture-card{background-color:#fbfdff;border:1px dashed #c0ccda;border-radius:6px;box-sizing:border-box;width:148px;height:148px;line-height:146px;vertical-align:top}.el-upload--picture-card i{font-size:28px;color:#8c939d}.el-upload--picture-card:hover,.el-upload:focus{border-color:#00D1B2;color:#00D1B2}.el-upload:focus .el-upload-dragger{border-color:#00D1B2}.el-upload-dragger{background-color:#fff;border:1px dashed #d9d9d9;border-radius:6px;box-sizing:border-box;width:360px;height:180px;text-align:center;position:relative;overflow:hidden}.el-upload-dragger .el-icon-upload{font-size:67px;color:#C0C4CC;margin:40px 0 16px;line-height:50px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:1px solid #DCDFE6;margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:#606266;font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:#00D1B2;font-style:normal}.el-upload-dragger:hover{border-color:#00D1B2}.el-upload-dragger.is-dragover{background-color:rgba(32,159,255,.06);border:2px dashed #00D1B2}.el-upload-list{margin:0;padding:0;list-style:none}.el-upload-list__item{-webkit-transition:all .5s cubic-bezier(.55,0,.1,1);transition:all .5s cubic-bezier(.55,0,.1,1);font-size:14px;color:#606266;line-height:1.8;margin-top:5px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:4px;width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item:first-child{margin-top:10px}.el-upload-list__item .el-icon-upload-success{color:#67C23A}.el-upload-list__item .el-icon-close{display:none;position:absolute;top:5px;right:5px;cursor:pointer;opacity:.75;color:#606266}.el-upload-list__item .el-icon-close:hover{opacity:1}.el-upload-list__item .el-icon-close-tip{display:none;position:absolute;top:5px;right:5px;font-size:12px;cursor:pointer;opacity:1;color:#00D1B2}.el-upload-list__item:hover{background-color:#F5F7FA}.el-upload-list__item:hover .el-icon-close{display:inline-block}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:block}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:#00D1B2;cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon-close-tip{display:inline-block}.el-upload-list__item.is-success:active .el-icon-close-tip,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:not(.focusing):focus .el-icon-close-tip{display:none}.el-upload-list.is-disabled .el-upload-list__item:hover .el-upload-list__item-status-label{display:block}.el-upload-list__item-name{color:#606266;display:block;margin-right:40px;overflow:hidden;padding-left:4px;text-overflow:ellipsis;-webkit-transition:color .3s;transition:color .3s;white-space:nowrap}.el-upload-list__item-name [class^=el-icon]{height:100%;margin-right:7px;color:#909399;line-height:inherit}.el-upload-list__item-status-label{position:absolute;right:5px;top:0;line-height:inherit;display:none}.el-upload-list__item-delete{position:absolute;right:10px;top:0;font-size:12px;color:#606266;display:none}.el-upload-list__item-delete:hover{color:#00D1B2}.el-upload-list--picture-card{margin:0;display:inline;vertical-align:top}.el-upload-list--picture-card .el-upload-list__item{overflow:hidden;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;width:148px;height:148px;margin:0 8px 8px 0;display:inline-block}.el-upload-list--picture-card .el-upload-list__item .el-icon-check,.el-upload-list--picture-card .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture-card .el-upload-list__item .el-icon-close,.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{position:absolute;width:100%;height:100%;left:0;top:0;cursor:default;text-align:center;color:#fff;opacity:0;font-size:20px;background-color:rgba(0,0,0,.5);-webkit-transition:opacity .3s;transition:opacity .3s}.el-upload-list--picture-card .el-upload-list__item-actions::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-upload-list--picture-card .el-upload-list__item-actions span{display:none;cursor:pointer}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:15px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{position:static;font-size:inherit;color:inherit}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-block}.el-upload-list--picture-card .el-progress{top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);bottom:auto;width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{overflow:hidden;z-index:0;background-color:#fff;border:1px solid #c0ccda;border-radius:6px;-webkit-box-sizing:border-box;box-sizing:border-box;margin-top:10px;padding:10px 10px 10px 90px;height:92px}.el-upload-list--picture .el-upload-list__item .el-icon-check,.el-upload-list--picture .el-upload-list__item .el-icon-circle-check{color:#FFF}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{background:0 0;-webkit-box-shadow:none;box-shadow:none;top:-2px;right:-12px}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name{line-height:70px;margin-top:0}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item-thumbnail{vertical-align:middle;display:inline-block;width:70px;height:70px;float:left;position:relative;z-index:1;margin-left:-80px;background-color:#FFF}.el-upload-list--picture .el-upload-list__item-name{display:block;margin-top:20px}.el-upload-list--picture .el-upload-list__item-name i{font-size:70px;line-height:1;position:absolute;left:9px;top:10px}.el-upload-list--picture .el-upload-list__item-status-label{position:absolute;right:-17px;top:-7px;width:46px;height:26px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 1px 1px #ccc;box-shadow:0 1px 1px #ccc}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden;z-index:10;cursor:default}.el-upload-cover::after{display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;width:100%;height:100%}.el-upload-cover__label{position:absolute;right:-15px;top:-6px;width:40px;height:24px;background:#13ce66;text-align:center;-webkit-transform:rotate(45deg);transform:rotate(45deg);-webkit-box-shadow:0 0 1pc 1px rgba(0,0,0,.2);box-shadow:0 0 1pc 1px rgba(0,0,0,.2)}.el-upload-cover__label i{font-size:12px;margin-top:11px;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);color:#fff}.el-upload-cover__progress{display:inline-block;vertical-align:middle;position:static;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{position:absolute;top:0;left:0;width:100%;height:100%}.el-upload-cover__interact{position:absolute;bottom:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.72);text-align:center}.el-upload-cover__interact .btn{display:inline-block;color:#FFF;font-size:14px;cursor:pointer;vertical-align:middle;-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);margin-top:60px}.el-upload-cover__interact .btn span{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{-webkit-transform:translateY(-13px);transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#FFF;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{position:absolute;bottom:0;left:0;background-color:#FFF;height:36px;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:400;text-align:left;padding:0 10px;margin:0;line-height:36px;font-size:14px;color:#303133}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-progress{position:relative;line-height:1}.el-progress__text{font-size:14px;color:#606266;display:inline-block;vertical-align:middle;margin-left:10px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{position:absolute;top:50%;left:0;width:100%;text-align:center;margin:0;-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{padding-right:0;margin-right:0;display:block}.el-progress-bar,.el-progress-bar__inner::after,.el-progress-bar__innerText,.el-spinner{display:inline-block;vertical-align:middle}.el-progress--text-inside .el-progress-bar{padding-right:0;margin-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:#67C23A}.el-progress.is-success .el-progress__text{color:#67C23A}.el-progress.is-warning .el-progress-bar__inner{background-color:#E6A23C}.el-progress.is-warning .el-progress__text{color:#E6A23C}.el-progress.is-exception .el-progress-bar__inner{background-color:#F56C6C}.el-progress.is-exception .el-progress__text{color:#F56C6C}.el-progress-bar{padding-right:50px;width:100%;margin-right:-55px;-webkit-box-sizing:border-box;box-sizing:border-box}.el-progress-bar__outer{height:6px;border-radius:100px;background-color:#EBEEF5;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{position:absolute;left:0;top:0;height:100%;background-color:#00D1B2;text-align:right;border-radius:100px;line-height:1;white-space:nowrap;-webkit-transition:width .6s ease;transition:width .6s ease}.el-card,.el-message{border-radius:4px;overflow:hidden}.el-progress-bar__inner::after{height:100%}.el-progress-bar__innerText{color:#FFF;font-size:12px;margin:0 5px}@keyframes progress{0%{background-position:0 0}100%{background-position:32px 0}}.el-time-spinner{width:100%;white-space:nowrap}.el-spinner-inner{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;width:50px;height:50px}.el-spinner-inner .path{stroke:#ececec;stroke-linecap:round;-webkit-animation:dash 1.5s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite}@-webkit-keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes rotate{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}100%{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-message{min-width:380px;-webkit-box-sizing:border-box;box-sizing:border-box;border-width:1px;border-style:solid;border-color:#EBEEF5;position:fixed;left:50%;top:20px;-webkit-transform:translateX(-50%);transform:translateX(-50%);background-color:#edf2fc;-webkit-transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,top .4s,-webkit-transform .4s;transition:opacity .3s,transform .4s,top .4s;transition:opacity .3s,transform .4s,top .4s,-webkit-transform .4s;padding:15px 15px 15px 20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-message.is-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-message.is-closable .el-message__content{padding-right:16px}.el-message p{margin:0}.el-message--info .el-message__content{color:#909399}.el-message--success{background-color:#f0f9eb;border-color:#e1f3d8}.el-message--success .el-message__content{color:#67C23A}.el-message--warning{background-color:#fdf6ec;border-color:#faecd8}.el-message--warning .el-message__content{color:#E6A23C}.el-message--error{background-color:#fef0f0;border-color:#fde2e2}.el-message--error .el-message__content{color:#F56C6C}.el-message__icon{margin-right:10px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__closeBtn{position:absolute;top:50%;right:15px;-webkit-transform:translateY(-50%);transform:translateY(-50%);cursor:pointer;color:#C0C4CC;font-size:16px}.el-message__closeBtn:hover{color:#909399}.el-message .el-icon-success{color:#67C23A}.el-message .el-icon-error{color:#F56C6C}.el-message .el-icon-info{color:#909399}.el-message .el-icon-warning{color:#E6A23C}.el-message-fade-enter,.el-message-fade-leave-active{opacity:0;-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.el-badge{position:relative;vertical-align:middle;display:inline-block}.el-badge__content{background-color:#F56C6C;border-radius:10px;color:#FFF;display:inline-block;font-size:12px;height:18px;line-height:18px;padding:0 6px;text-align:center;white-space:nowrap;border:1px solid #FFF}.el-badge__content.is-fixed{position:absolute;top:0;right:10px;-webkit-transform:translateY(-50%) translateX(100%);transform:translateY(-50%) translateX(100%)}.el-rate__icon,.el-rate__item{position:relative;display:inline-block}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{height:8px;width:8px;padding:0;right:0;border-radius:50%}.el-badge__content--primary{background-color:#00D1B2}.el-badge__content--success{background-color:#67C23A}.el-badge__content--warning{background-color:#E6A23C}.el-badge__content--info{background-color:#909399}.el-badge__content--danger{background-color:#F56C6C}.el-card{border:1px solid #EBEEF5;background-color:#FFF;color:#303133;-webkit-transition:.3s;transition:.3s}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-card__header{padding:18px 20px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box}.el-card__body{padding:20px}.el-rate{height:20px;line-height:1}.el-rate__item{font-size:0;vertical-align:middle}.el-rate__icon{font-size:18px;margin-right:6px;color:#C0C4CC;-webkit-transition:.3s;transition:.3s}.el-rate__decimal,.el-rate__icon .path2{position:absolute;top:0;left:0}.el-rate__icon.hover{-webkit-transform:scale(1.15);transform:scale(1.15)}.el-rate__decimal{display:inline-block;overflow:hidden}.el-step.is-vertical,.el-steps{display:-webkit-box;display:-ms-flexbox}.el-rate__text{font-size:14px;vertical-align:middle}.el-steps{display:flex}.el-steps--simple{padding:13px 8%;border-radius:4px;background:#F5F7FA}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{height:100%;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-flow:column;flex-flow:column}.el-step{position:relative;-ms-flex-negative:1;flex-shrink:1}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{-ms-flex-preferred-size:auto!important;flex-basis:auto!important;-ms-flex-negative:0;flex-shrink:0;-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{color:#303133;border-color:#303133}.el-step__head.is-wait{color:#C0C4CC;border-color:#C0C4CC}.el-step__head.is-success{color:#67C23A;border-color:#67C23A}.el-step__head.is-error{color:#F56C6C;border-color:#F56C6C}.el-step__head.is-finish{color:#00D1B2;border-color:#00D1B2}.el-step__icon{position:relative;z-index:1;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;width:24px;height:24px;font-size:14px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#FFF;-webkit-transition:.15s ease-out;transition:.15s ease-out}.el-step__icon.is-text{border-radius:50%;border:2px solid;border-color:inherit}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{display:inline-block;user-select:none;text-align:center;font-weight:700;line-height:1;color:inherit}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{-webkit-transform:translateY(1px);transform:translateY(1px)}.el-step__line{position:absolute;border-color:inherit;background-color:#C0C4CC}.el-step__line-inner{display:block;border-width:1px;border-style:solid;border-color:inherit;-webkit-transition:.15s ease-out;transition:.15s ease-out;-webkit-box-sizing:border-box;box-sizing:border-box;width:0;height:0}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{font-weight:700;color:#303133}.el-step__title.is-wait{color:#C0C4CC}.el-step__title.is-success{color:#67C23A}.el-step__title.is-error{color:#F56C6C}.el-step__title.is-finish{color:#00D1B2}.el-step__description{padding-right:10%;margin-top:-5px;font-size:12px;line-height:20px;font-weight:400}.el-step__description.is-process{color:#303133}.el-step__description.is-wait{color:#C0C4CC}.el-step__description.is-success{color:#67C23A}.el-step__description.is-error{color:#F56C6C}.el-step__description.is-finish{color:#00D1B2}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;top:11px;left:0;right:0}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{-webkit-box-flex:0;-ms-flex-positive:0;flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{padding-left:10px;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-step.is-simple .el-step__head{width:auto;font-size:0;padding-right:10px}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{-webkit-transform:scale(.8) translateY(1px);transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;word-break:break-all}.el-step.is-simple .el-step__arrow{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.el-step.is-simple .el-step__arrow::after,.el-step.is-simple .el-step__arrow::before{content:'';display:inline-block;position:absolute;height:15px;width:1px;background:#C0C4CC}.el-step.is-simple .el-step__arrow::before{-webkit-transform:rotate(-45deg) translateY(-4px);transform:rotate(-45deg) translateY(-4px);-webkit-transform-origin:0 0;transform-origin:0 0}.el-step.is-simple .el-step__arrow::after{-webkit-transform:rotate(45deg) translateY(4px);transform:rotate(45deg) translateY(4px);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-carousel{position:relative}.el-carousel--horizontal{overflow-x:hidden}.el-carousel--vertical{overflow-y:hidden}.el-carousel__container{position:relative;height:300px}.el-carousel__arrow{border:none;outline:0;padding:0;margin:0;height:36px;width:36px;cursor:pointer;-webkit-transition:.3s;transition:.3s;border-radius:50%;background-color:rgba(31,45,61,.11);color:#FFF;position:absolute;top:50%;z-index:10;-webkit-transform:translateY(-50%);transform:translateY(-50%);text-align:center;font-size:12px}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:rgba(31,45,61,.23)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{position:absolute;list-style:none;margin:0;padding:0;z-index:2}.el-carousel__indicators--horizontal{bottom:0;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:26px;text-align:center;position:static;-webkit-transform:none;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:#C0C4CC;opacity:.24}.el-carousel__indicators--labels{left:0;right:0;-webkit-transform:none;transform:none;text-align:center}.el-carousel__indicators--labels .el-carousel__button{height:auto;width:auto;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:12px 4px}.el-carousel__indicator--vertical{padding:4px 12px}.el-carousel__indicator--vertical .el-carousel__button{width:2px;height:15px}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{display:block;opacity:.48;width:30px;height:2px;background-color:#FFF;border:none;outline:0;padding:0;margin:0;cursor:pointer;-webkit-transition:.3s;transition:.3s}.el-carousel__item,.el-carousel__mask{height:100%;top:0;left:0;position:absolute}.carousel-arrow-left-enter,.carousel-arrow-left-leave-active{-webkit-transform:translateY(-50%) translateX(-10px);transform:translateY(-50%) translateX(-10px);opacity:0}.carousel-arrow-right-enter,.carousel-arrow-right-leave-active{-webkit-transform:translateY(-50%) translateX(10px);transform:translateY(-50%) translateX(10px);opacity:0}.el-carousel__item{width:100%;display:inline-block;overflow:hidden;z-index:0}.el-carousel__item.is-active{z-index:2}.el-carousel__item.is-animating{-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card{width:50%;-webkit-transition:-webkit-transform .4s ease-in-out;transition:-webkit-transform .4s ease-in-out;transition:transform .4s ease-in-out;transition:transform .4s ease-in-out,-webkit-transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:1}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:2}.el-carousel__mask{width:100%;background-color:#FFF;opacity:.24;-webkit-transition:.2s;transition:.2s}.el-fade-in-enter,.el-fade-in-leave-active,.el-fade-in-linear-enter,.el-fade-in-linear-leave,.el-fade-in-linear-leave-active,.fade-in-linear-enter,.fade-in-linear-leave,.fade-in-linear-leave-active{opacity:0}.fade-in-linear-enter-active,.fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{-webkit-transition:opacity .2s linear;transition:opacity .2s linear}.el-fade-in-enter-active,.el-fade-in-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{-webkit-transition:all .3s cubic-bezier(.55,0,.1,1);transition:all .3s cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter,.el-zoom-in-center-leave-active{opacity:0;-webkit-transform:scaleX(0);transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center top;transform-origin:center top}.el-zoom-in-top-enter,.el-zoom-in-top-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;-webkit-transform:scaleY(1);transform:scaleY(1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:center bottom;transform-origin:center bottom}.el-zoom-in-bottom-enter,.el-zoom-in-bottom-leave-active{opacity:0;-webkit-transform:scaleY(0);transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;-webkit-transform:scale(1,1);transform:scale(1,1);-webkit-transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1);transition:transform .3s cubic-bezier(.23,1,.32,1),opacity .3s cubic-bezier(.23,1,.32,1),-webkit-transform .3s cubic-bezier(.23,1,.32,1);-webkit-transform-origin:top left;transform-origin:top left}.el-zoom-in-left-enter,.el-zoom-in-left-leave-active{opacity:0;-webkit-transform:scale(.45,.45);transform:scale(.45,.45)}.collapse-transition{-webkit-transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out;transition:.3s height ease-in-out,.3s padding-top ease-in-out,.3s padding-bottom ease-in-out}.horizontal-collapse-transition{-webkit-transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out;transition:.3s width ease-in-out,.3s padding-left ease-in-out,.3s padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{-webkit-transition:all 1s;transition:all 1s}.el-list-enter,.el-list-leave-active{opacity:0;-webkit-transform:translateY(-30px);transform:translateY(-30px)}.el-opacity-transition{-webkit-transition:opacity .3s cubic-bezier(.55,0,.1,1);transition:opacity .3s cubic-bezier(.55,0,.1,1)}.el-collapse{border-top:1px solid #EBEEF5;border-bottom:1px solid #EBEEF5}.el-collapse-item.is-disabled .el-collapse-item__header{color:#bbb;cursor:not-allowed}.el-collapse-item__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:48px;line-height:48px;background-color:#FFF;color:#303133;cursor:pointer;border-bottom:1px solid #EBEEF5;font-size:13px;font-weight:500;-webkit-transition:border-bottom-color .3s;transition:border-bottom-color .3s;outline:0}.el-collapse-item__arrow{margin:0 8px 0 auto;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-weight:300}.el-collapse-item__arrow.is-active{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:#00D1B2}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{will-change:height;background-color:#FFF;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box;border-bottom:1px solid #EBEEF5}.el-cascader__tags,.el-tag{-webkit-box-sizing:border-box}.el-collapse-item__content{padding-bottom:25px;font-size:13px;color:#303133;line-height:1.769230769230769}.el-collapse-item:last-child{margin-bottom:-1px}.el-popper .popper__arrow,.el-popper .popper__arrow::after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.el-popper .popper__arrow{border-width:6px;-webkit-filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03));filter:drop-shadow(0 2px 12px rgba(0, 0, 0, .03))}.el-popper .popper__arrow::after{content:" ";border-width:6px}.el-popper[x-placement^=top]{margin-bottom:12px}.el-popper[x-placement^=top] .popper__arrow{bottom:-6px;left:50%;margin-right:3px;border-top-color:#EBEEF5;border-bottom-width:0}.el-popper[x-placement^=top] .popper__arrow::after{bottom:1px;margin-left:-6px;border-top-color:#FFF;border-bottom-width:0}.el-popper[x-placement^=bottom]{margin-top:12px}.el-popper[x-placement^=bottom] .popper__arrow{top:-6px;left:50%;margin-right:3px;border-top-width:0;border-bottom-color:#EBEEF5}.el-popper[x-placement^=bottom] .popper__arrow::after{top:1px;margin-left:-6px;border-top-width:0;border-bottom-color:#FFF}.el-popper[x-placement^=right]{margin-left:12px}.el-popper[x-placement^=right] .popper__arrow{top:50%;left:-6px;margin-bottom:3px;border-right-color:#EBEEF5;border-left-width:0}.el-popper[x-placement^=right] .popper__arrow::after{bottom:-6px;left:1px;border-right-color:#FFF;border-left-width:0}.el-popper[x-placement^=left]{margin-right:12px}.el-popper[x-placement^=left] .popper__arrow{top:50%;right:-6px;margin-bottom:3px;border-right-width:0;border-left-color:#EBEEF5}.el-popper[x-placement^=left] .popper__arrow::after{right:1px;bottom:-6px;margin-left:-6px;border-right-width:0;border-left-color:#FFF}.el-tag{background-color:#e6faf7;border-color:#ccf6f0;display:inline-block;height:32px;padding:0 10px;line-height:30px;font-size:12px;color:#00D1B2;border-width:1px;border-style:solid;border-radius:4px;box-sizing:border-box;white-space:nowrap}.el-tag.is-hit{border-color:#00D1B2}.el-tag .el-tag__close{color:#00d1b2}.el-tag .el-tag__close:hover{color:#FFF;background-color:#00d1b2}.el-tag.el-tag--info{background-color:#f4f4f5;border-color:#e9e9eb;color:#909399}.el-tag.el-tag--info.is-hit{border-color:#909399}.el-tag.el-tag--info .el-tag__close{color:#909399}.el-tag.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag.el-tag--success{background-color:#f0f9eb;border-color:#e1f3d8;color:#67c23a}.el-tag.el-tag--success.is-hit{border-color:#67C23A}.el-tag.el-tag--success .el-tag__close{color:#67c23a}.el-tag.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag.el-tag--warning{background-color:#fdf6ec;border-color:#faecd8;color:#e6a23c}.el-tag.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag.el-tag--danger{background-color:#fef0f0;border-color:#fde2e2;color:#f56c6c}.el-tag.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag .el-icon-close{border-radius:50%;text-align:center;position:relative;cursor:pointer;font-size:12px;height:16px;width:16px;line-height:16px;vertical-align:middle;top:-1px;right:-5px}.el-tag .el-icon-close::before{display:block}.el-tag--dark{background-color:#00d1b2;border-color:#00d1b2;color:#fff}.el-tag--dark.is-hit{border-color:#00D1B2}.el-tag--dark .el-tag__close{color:#fff}.el-tag--dark .el-tag__close:hover{color:#FFF;background-color:#428bca}.el-tag--dark.el-tag--info{background-color:#909399;border-color:#909399;color:#fff}.el-tag--dark.el-tag--info.is-hit{border-color:#909399}.el-tag--dark.el-tag--info .el-tag__close{color:#fff}.el-tag--dark.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#a6a9ad}.el-tag--dark.el-tag--success{background-color:#67c23a;border-color:#67c23a;color:#fff}.el-tag--dark.el-tag--success.is-hit{border-color:#67C23A}.el-tag--dark.el-tag--success .el-tag__close{color:#fff}.el-tag--dark.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#85ce61}.el-tag--dark.el-tag--warning{background-color:#e6a23c;border-color:#e6a23c;color:#fff}.el-tag--dark.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--dark.el-tag--warning .el-tag__close{color:#fff}.el-tag--dark.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#ebb563}.el-tag--dark.el-tag--danger{background-color:#f56c6c;border-color:#f56c6c;color:#fff}.el-tag--dark.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--dark.el-tag--danger .el-tag__close{color:#fff}.el-tag--dark.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f78989}.el-tag--plain{background-color:#fff;border-color:#99ede0;color:#00d1b2}.el-tag--plain.is-hit{border-color:#00D1B2}.el-tag--plain .el-tag__close{color:#00d1b2}.el-tag--plain .el-tag__close:hover{color:#FFF;background-color:#00d1b2}.el-tag--plain.el-tag--info{background-color:#fff;border-color:#d3d4d6;color:#909399}.el-tag--plain.el-tag--info.is-hit{border-color:#909399}.el-tag--plain.el-tag--info .el-tag__close{color:#909399}.el-tag--plain.el-tag--info .el-tag__close:hover{color:#FFF;background-color:#909399}.el-tag--plain.el-tag--success{background-color:#fff;border-color:#c2e7b0;color:#67c23a}.el-tag--plain.el-tag--success.is-hit{border-color:#67C23A}.el-tag--plain.el-tag--success .el-tag__close{color:#67c23a}.el-tag--plain.el-tag--success .el-tag__close:hover{color:#FFF;background-color:#67c23a}.el-tag--plain.el-tag--warning{background-color:#fff;border-color:#f5dab1;color:#e6a23c}.el-tag--plain.el-tag--warning.is-hit{border-color:#E6A23C}.el-tag--plain.el-tag--warning .el-tag__close{color:#e6a23c}.el-tag--plain.el-tag--warning .el-tag__close:hover{color:#FFF;background-color:#e6a23c}.el-tag--plain.el-tag--danger{background-color:#fff;border-color:#fbc4c4;color:#f56c6c}.el-tag--plain.el-tag--danger.is-hit{border-color:#F56C6C}.el-tag--plain.el-tag--danger .el-tag__close{color:#f56c6c}.el-tag--plain.el-tag--danger .el-tag__close:hover{color:#FFF;background-color:#f56c6c}.el-tag--medium{height:28px;line-height:26px}.el-tag--medium .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--small{height:24px;padding:0 8px;line-height:22px}.el-tag--small .el-icon-close{-webkit-transform:scale(.8);transform:scale(.8)}.el-tag--mini{height:20px;padding:0 5px;line-height:19px}.el-tag--mini .el-icon-close{margin-left:-3px;-webkit-transform:scale(.7);transform:scale(.7)}.el-cascader{display:inline-block;position:relative;font-size:14px;line-height:40px}.el-cascader:not(.is-disabled):hover .el-input__inner{cursor:pointer;border-color:#C0C4CC}.el-cascader .el-input .el-input__inner:focus,.el-cascader .el-input.is-focus .el-input__inner{border-color:#00D1B2}.el-cascader .el-input{cursor:pointer}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-icon-arrow-down{-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;font-size:14px}.el-cascader .el-input .el-icon-arrow-down.is-reverse{-webkit-transform:rotateZ(180deg);transform:rotateZ(180deg)}.el-cascader .el-input .el-icon-circle-close:hover{color:#909399}.el-cascader--medium{font-size:14px;line-height:36px}.el-cascader--small{font-size:13px;line-height:32px}.el-cascader--mini{font-size:12px;line-height:28px}.el-cascader.is-disabled .el-cascader__label{z-index:2;color:#C0C4CC}.el-cascader__dropdown{margin:5px 0;font-size:14px;background:#FFF;border:1px solid #E4E7ED;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-cascader__tags{position:absolute;left:0;right:30px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;line-height:normal;text-align:left;box-sizing:border-box}.el-cascader__tags .el-tag{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-width:100%;margin:2px 0 2px 6px;text-overflow:ellipsis;background:#f0f2f5}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag>span{-webkit-box-flex:1;-ms-flex:1;flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{-webkit-box-flex:0;-ms-flex:none;flex:none;background-color:#C0C4CC;color:#FFF}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:#909399}.el-cascader__suggestion-panel{border-radius:4px}.el-cascader__suggestion-list{max-height:204px;margin:0;padding:6px 0;font-size:14px;color:#606266;text-align:center}.el-cascader__suggestion-item{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:34px;padding:0 15px;text-align:left;outline:0;cursor:pointer}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:#F5F7FA}.el-cascader__suggestion-item.is-checked{color:#00D1B2;font-weight:700}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{margin:10px 0;color:#C0C4CC}.el-cascader__search-input{-webkit-box-flex:1;-ms-flex:1;flex:1;height:24px;min-width:60px;margin:2px 0 2px 15px;padding:0;color:#606266;border:none;outline:0;-webkit-box-sizing:border-box;box-sizing:border-box}.el-cascader__search-input::-webkit-input-placeholder{color:#C0C4CC}.el-cascader__search-input::-ms-input-placeholder{color:#C0C4CC}.el-cascader__search-input::placeholder{color:#C0C4CC}.el-color-predefine{display:-webkit-box;display:-ms-flexbox;display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-wrap:wrap;flex-wrap:wrap}.el-color-predefine__color-selector{margin:0 0 8px 8px;width:20px;height:20px;border-radius:4px;cursor:pointer}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{-webkit-box-shadow:0 0 3px 2px #00D1B2;box-shadow:0 0 3px 2px #00D1B2}.el-color-predefine__color-selector>div{display:-webkit-box;display:-ms-flexbox;display:flex;height:100%;border-radius:3px}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background-color:red;padding:0 2px}.el-color-hue-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to right,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%);height:100%}.el-color-hue-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(red),color-stop(17%,#ff0),color-stop(33%,#0f0),color-stop(50%,#0ff),color-stop(67%,#00f),color-stop(83%,#f0f),to(red));background:linear-gradient(to bottom,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red 100%)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-svpanel{position:relative;width:280px;height:180px}.el-color-svpanel__black,.el-color-svpanel__white{position:absolute;top:0;left:0;right:0;bottom:0}.el-color-svpanel__white{background:-webkit-gradient(linear,left top,right top,from(#fff),to(rgba(255,255,255,0)));background:linear-gradient(to right,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:-webkit-gradient(linear,left bottom,left top,from(#000),to(rgba(0,0,0,0)));background:linear-gradient(to top,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{cursor:head;width:4px;height:4px;-webkit-box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);border-radius:50%;-webkit-transform:translate(-2px,-2px);transform:translate(-2px,-2px)}.el-color-alpha-slider{position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;width:280px;height:12px;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-alpha-slider__bar{position:relative;background:-webkit-gradient(linear,left top,right top,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);height:100%}.el-color-alpha-slider__thumb{position:absolute;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;left:0;top:0;width:4px;height:100%;border-radius:1px;background:#fff;border:1px solid #f0f0f0;-webkit-box-shadow:0 0 2px rgba(0,0,0,.6);box-shadow:0 0 2px rgba(0,0,0,.6);z-index:1}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:-webkit-gradient(linear,left top,left bottom,from(rgba(255,255,255,0)),to(white));background:linear-gradient(to bottom,rgba(255,255,255,0) 0,#fff 100%)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{left:0;top:0;width:100%;height:4px}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper::after{content:"";display:table;clear:both}.el-color-dropdown__btns{margin-top:6px;text-align:right}.el-color-dropdown__value{float:left;line-height:26px;font-size:12px;color:#000;width:160px}.el-color-dropdown__btn{border:1px solid #dcdcdc;color:#333;line-height:24px;border-radius:2px;padding:0 20px;cursor:pointer;background-color:transparent;outline:0;font-size:12px}.el-color-dropdown__btn[disabled]{color:#ccc;cursor:not-allowed}.el-color-dropdown__btn:hover{color:#00D1B2;border-color:#00D1B2}.el-color-dropdown__link-btn{cursor:pointer;color:#00D1B2;text-decoration:none;padding:15px;font-size:12px}.el-color-dropdown__link-btn:hover{color:tint(#00D1B2,20%)}.el-color-picker{display:inline-block;position:relative;line-height:normal;height:40px}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--medium{height:36px}.el-color-picker--medium .el-color-picker__trigger{height:36px;width:36px}.el-color-picker--medium .el-color-picker__mask{height:34px;width:34px}.el-color-picker--small{height:32px}.el-color-picker--small .el-color-picker__trigger{height:32px;width:32px}.el-color-picker--small .el-color-picker__mask{height:30px;width:30px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker--mini{height:28px}.el-color-picker--mini .el-color-picker__trigger{height:28px;width:28px}.el-color-picker--mini .el-color-picker__mask{height:26px;width:26px}.el-color-picker--mini .el-color-picker__empty,.el-color-picker--mini .el-color-picker__icon{-webkit-transform:translate3d(-50%,-50%,0) scale(.8);transform:translate3d(-50%,-50%,0) scale(.8)}.el-color-picker__mask{height:38px;width:38px;border-radius:4px;position:absolute;top:1px;left:1px;z-index:1;cursor:not-allowed;background-color:rgba(255,255,255,.7)}.el-color-picker__trigger{display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px;width:40px;padding:4px;border:1px solid #e6e6e6;border-radius:4px;font-size:0;position:relative;cursor:pointer}.el-color-picker__color{position:relative;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;border:1px solid #999;border-radius:2px;width:100%;height:100%;text-align:center}.el-color-picker__color.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-picker__color-inner{position:absolute;left:0;top:0;right:0;bottom:0}.el-color-picker__empty,.el-color-picker__icon{top:50%;left:50%;font-size:12px;position:absolute}.el-color-picker__empty{color:#999;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0)}.el-color-picker__icon{display:inline-block;width:100%;-webkit-transform:translate3d(-50%,-50%,0);transform:translate3d(-50%,-50%,0);color:#FFF;text-align:center}.el-color-picker__panel{position:absolute;z-index:10;padding:6px;-webkit-box-sizing:content-box;box-sizing:content-box;background-color:#FFF;border:1px solid #EBEEF5;border-radius:4px;-webkit-box-shadow:0 2px 12px 0 rgba(0,0,0,.1);box-shadow:0 2px 12px 0 rgba(0,0,0,.1)}.el-textarea{position:relative;display:inline-block;width:100%;vertical-align:bottom;font-size:14px}.el-textarea__inner{display:block;resize:vertical;padding:5px 15px;line-height:1.5;-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;font-size:inherit;color:#606266;background-color:#FFF;background-image:none;border:1px solid #DCDFE6;border-radius:4px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1)}.el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea__inner:hover{border-color:#C0C4CC}.el-textarea__inner:focus{outline:0;border-color:#00D1B2}.el-textarea .el-input__count{color:#909399;background:#FFF;position:absolute;font-size:12px;bottom:5px;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-webkit-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::-ms-input-placeholder{color:#C0C4CC}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:#C0C4CC}.el-textarea.is-exceed .el-textarea__inner{border-color:#F56C6C}.el-textarea.is-exceed .el-input__count{color:#F56C6C}.el-input{position:relative;font-size:14px;display:inline-block;width:100%}.el-input::-webkit-scrollbar{z-index:11;width:6px}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{border-radius:5px;width:6px;background:#b4bccc}.el-input::-webkit-scrollbar-corner{background:#fff}.el-input::-webkit-scrollbar-track{background:#fff}.el-input::-webkit-scrollbar-track-piece{background:#fff;width:6px}.el-input .el-input__clear{color:#C0C4CC;font-size:14px;cursor:pointer;-webkit-transition:color .2s cubic-bezier(.645,.045,.355,1);transition:color .2s cubic-bezier(.645,.045,.355,1)}.el-input .el-input__clear:hover{color:#909399}.el-input .el-input__count{height:100%;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#909399;font-size:12px}.el-input .el-input__count .el-input__count-inner{background:#FFF;line-height:initial;display:inline-block;padding:0 5px}.el-input__inner{-webkit-appearance:none;background-color:#FFF;background-image:none;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;display:inline-block;font-size:inherit;height:40px;line-height:40px;outline:0;padding:0 15px;-webkit-transition:border-color .2s cubic-bezier(.645,.045,.355,1);transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%}.el-input__prefix,.el-input__suffix{position:absolute;top:0;-webkit-transition:all .3s;height:100%;color:#C0C4CC;text-align:center}.el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input__inner::placeholder{color:#C0C4CC}.el-input__inner:hover{border-color:#C0C4CC}.el-input.is-active .el-input__inner,.el-input__inner:focus{border-color:#00D1B2;outline:0}.el-input__suffix{right:5px;transition:all .3s}.el-input__suffix-inner{pointer-events:all}.el-input__prefix{left:5px;transition:all .3s}.el-input__icon{height:100%;width:25px;text-align:center;-webkit-transition:all .3s;transition:all .3s;line-height:40px}.el-input__icon:after{content:'';height:100%;width:0;display:inline-block;vertical-align:middle}.el-input__validateIcon{pointer-events:none}.el-input.is-disabled .el-input__inner{background-color:#F5F7FA;border-color:#E4E7ED;color:#C0C4CC;cursor:not-allowed}.el-input.is-disabled .el-input__inner::-webkit-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::-ms-input-placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__inner::placeholder{color:#C0C4CC}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-link,.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-input.is-exceed .el-input__inner{border-color:#F56C6C}.el-input.is-exceed .el-input__suffix .el-input__count{color:#F56C6C}.el-input--suffix .el-input__inner{padding-right:30px}.el-input--prefix .el-input__inner{padding-left:30px}.el-input--medium{font-size:14px}.el-input--medium .el-input__inner{height:36px;line-height:36px}.el-input--medium .el-input__icon{line-height:36px}.el-input--small{font-size:13px}.el-input--small .el-input__inner{height:32px;line-height:32px}.el-input--small .el-input__icon{line-height:32px}.el-input--mini{font-size:12px}.el-input--mini .el-input__inner{height:28px;line-height:28px}.el-input--mini .el-input__icon{line-height:28px}.el-input-group{line-height:normal;display:inline-table;width:100%;border-collapse:separate;border-spacing:0}.el-input-group>.el-input__inner{vertical-align:middle;display:table-cell}.el-input-group__append,.el-input-group__prepend{background-color:#F5F7FA;color:#909399;vertical-align:middle;display:table-cell;position:relative;border:1px solid #DCDFE6;border-radius:4px;padding:0 20px;width:1px;white-space:nowrap}.el-input-group--prepend .el-input__inner,.el-input-group__append{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--append .el-input__inner,.el-input-group__prepend{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:0}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:-10px -20px}.el-input-group__append button.el-button,.el-input-group__append div.el-select .el-input__inner,.el-input-group__append div.el-select:hover .el-input__inner,.el-input-group__prepend button.el-button,.el-input-group__prepend div.el-select .el-input__inner,.el-input-group__prepend div.el-select:hover .el-input__inner{border-color:transparent;background-color:transparent;color:inherit;border-top:0;border-bottom:0}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-right:0}.el-input-group__append{border-left:0}.el-input-group--append .el-select .el-input.is-focus .el-input__inner,.el-input-group--prepend .el-select .el-input.is-focus .el-input__inner{border-color:transparent}.el-input__inner::-ms-clear{display:none;width:0;height:0}.el-transfer{font-size:14px}.el-transfer__buttons{display:inline-block;vertical-align:middle;padding:0 30px}.el-transfer__button{display:block;margin:0 auto;padding:10px;border-radius:50%;color:#FFF;background-color:#00D1B2;font-size:0}.el-transfer-panel__item+.el-transfer-panel__item,.el-transfer__button [class*=el-icon-]+span{margin-left:0}.el-transfer__button.is-with-texts{border-radius:4px}.el-transfer__button.is-disabled,.el-transfer__button.is-disabled:hover{border:1px solid #DCDFE6;background-color:#F5F7FA;color:#C0C4CC}.el-transfer__button:first-child{margin-bottom:10px}.el-transfer__button:nth-child(2){margin:0}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer-panel{border:1px solid #EBEEF5;border-radius:4px;overflow:hidden;background:#FFF;display:inline-block;vertical-align:middle;width:200px;max-height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:relative}.el-transfer-panel__body{height:246px}.el-transfer-panel__body.is-with-footer{padding-bottom:40px}.el-transfer-panel__list{margin:0;padding:6px 0;list-style:none;height:246px;overflow:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.el-transfer-panel__list.is-filterable{height:194px;padding-top:0}.el-transfer-panel__item{height:30px;line-height:30px;padding-left:15px;display:block!important}.el-transfer-panel__item.el-checkbox{color:#606266}.el-transfer-panel__item:hover{color:#00D1B2}.el-transfer-panel__item.el-checkbox .el-checkbox__label{width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;-webkit-box-sizing:border-box;box-sizing:border-box;padding-left:24px;line-height:30px}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;margin:15px;-webkit-box-sizing:border-box;box-sizing:border-box;display:block;width:auto}.el-transfer-panel__filter .el-input__inner{height:32px;width:100%;font-size:12px;display:inline-block;-webkit-box-sizing:border-box;box-sizing:border-box;border-radius:16px;padding-right:10px;padding-left:30px}.el-transfer-panel__filter .el-input__icon{margin-left:5px}.el-transfer-panel .el-transfer-panel__header{height:40px;line-height:40px;background:#F5F7FA;margin:0;padding-left:15px;border-bottom:1px solid #EBEEF5;-webkit-box-sizing:border-box;box-sizing:border-box;color:#000}.el-transfer-panel .el-transfer-panel__header .el-checkbox{display:block;line-height:40px}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{font-size:16px;color:#303133;font-weight:400}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{position:absolute;right:15px;color:#909399;font-size:12px;font-weight:400}.el-divider__text,.el-link{font-weight:500;font-size:14px}.el-transfer-panel .el-transfer-panel__footer{height:40px;background:#FFF;margin:0;padding:0;border-top:1px solid #EBEEF5;position:absolute;bottom:0;left:0;width:100%;z-index:1}.el-transfer-panel .el-transfer-panel__footer::after{display:inline-block;content:"";height:100%;vertical-align:middle}.el-container,.el-timeline-item__node{display:-webkit-box;display:-ms-flexbox}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{padding-left:20px;color:#606266}.el-transfer-panel .el-transfer-panel__empty{margin:0;height:30px;line-height:30px;padding:6px 15px 0;color:#909399;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{height:14px;width:14px;border-radius:3px}.el-transfer-panel .el-checkbox__inner::after{height:6px;width:3px;left:4px}.el-container{display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-box-sizing:border-box;box-sizing:border-box;min-width:0}.el-container.is-vertical,.el-drawer{-webkit-box-orient:vertical;-webkit-box-direction:normal}.el-aside,.el-header{-webkit-box-sizing:border-box}.el-container.is-vertical{-ms-flex-direction:column;flex-direction:column}.el-header{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-aside{overflow:auto;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-footer,.el-main{-webkit-box-sizing:border-box}.el-main{display:block;-webkit-box-flex:1;-ms-flex:1;flex:1;-ms-flex-preferred-size:auto;flex-basis:auto;overflow:auto;box-sizing:border-box;padding:20px}.el-footer{padding:0 20px;box-sizing:border-box;-ms-flex-negative:0;flex-shrink:0}.el-timeline{margin:0;font-size:14px;list-style:none}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline-item{position:relative;padding-bottom:20px}.el-timeline-item__wrapper{position:relative;padding-left:28px;top:-3px}.el-timeline-item__tail{position:absolute;left:4px;height:100%;border-left:2px solid #E4E7ED}.el-timeline-item__icon{color:#FFF;font-size:13px}.el-timeline-item__node{position:absolute;background-color:#E4E7ED;border-radius:50%;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image__error,.el-timeline-item__dot{display:-webkit-box;display:-ms-flexbox}.el-timeline-item__node--normal{left:-1px;width:12px;height:12px}.el-timeline-item__node--large{left:-2px;width:14px;height:14px}.el-timeline-item__node--primary{background-color:#00D1B2}.el-timeline-item__node--success{background-color:#67C23A}.el-timeline-item__node--warning{background-color:#E6A23C}.el-timeline-item__node--danger{background-color:#F56C6C}.el-timeline-item__node--info{background-color:#909399}.el-timeline-item__dot{position:absolute;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-timeline-item__content{color:#303133}.el-timeline-item__timestamp{color:#909399;line-height:1;font-size:13px}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-link{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;vertical-align:middle;position:relative;text-decoration:none;outline:0;padding:0}.el-link.is-underline:hover:after{content:"";position:absolute;left:0;right:0;height:0;bottom:0;border-bottom:1px solid #00D1B2}.el-link.el-link--default:after,.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:#00D1B2}.el-link.is-disabled{cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default{color:#606266}.el-link.el-link--default:hover{color:#00D1B2}.el-link.el-link--default.is-disabled{color:#C0C4CC}.el-link.el-link--primary{color:#00D1B2}.el-link.el-link--primary:hover{color:#428bca}.el-link.el-link--primary.is-disabled{color:#80e8d9}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:#F56C6C}.el-link.el-link--danger{color:#F56C6C}.el-link.el-link--danger:hover{color:#f78989}.el-link.el-link--danger.is-disabled{color:#fab6b6}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:#67C23A}.el-link.el-link--success{color:#67C23A}.el-link.el-link--success:hover{color:#85ce61}.el-link.el-link--success.is-disabled{color:#b3e19d}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:#E6A23C}.el-link.el-link--warning{color:#E6A23C}.el-link.el-link--warning:hover{color:#ebb563}.el-link.el-link--warning.is-disabled{color:#f3d19e}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:#909399}.el-link.el-link--info{color:#909399}.el-link.el-link--info:hover{color:#a6a9ad}.el-link.el-link--info.is-disabled{color:#c8c9cc}.el-divider{background-color:#DCDFE6;position:relative}.el-divider--horizontal{display:block;height:1px;width:100%;margin:24px 0}.el-divider--vertical{display:inline-block;width:1px;height:1em;margin:0 8px;vertical-align:middle;position:relative}.el-divider__text{position:absolute;background-color:#FFF;padding:0 20px;color:#303133}.el-image__error,.el-image__placeholder{background:#F5F7FA}.el-divider__text.is-left{left:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-divider__text.is-center{left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.el-image__error,.el-image__inner,.el-image__placeholder{width:100%;height:100%}.el-image{position:relative;display:inline-block;overflow:hidden}.el-image__inner{vertical-align:top}.el-image__inner--center{position:relative;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);display:block}.el-image__error{display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;color:#C0C4CC;vertical-align:middle}.el-image__preview{cursor:pointer}.el-image-viewer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0}.el-image-viewer__btn{position:absolute;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;border-radius:50%;opacity:.8;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box;user-select:none}.el-button,.el-checkbox{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none}.el-image-viewer__close{top:40px;right:40px;width:40px;height:40px;font-size:40px}.el-image-viewer__canvas{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-image-viewer__actions{left:50%;bottom:30px;-webkit-transform:translateX(-50%);transform:translateX(-50%);width:282px;height:44px;padding:0 23px;background-color:#606266;border-color:#fff;border-radius:22px}.el-image-viewer__actions__inner{width:100%;height:100%;text-align:justify;cursor:default;font-size:23px;color:#fff;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-ms-flex-pack:distribute;justify-content:space-around}.el-image-viewer__next,.el-image-viewer__prev{top:50%;width:44px;height:44px;font-size:24px;color:#fff;background-color:#606266;border-color:#fff}.el-image-viewer__prev{-webkit-transform:translateY(-50%);transform:translateY(-50%);left:40px}.el-image-viewer__next{-webkit-transform:translateY(-50%);transform:translateY(-50%);right:40px;text-indent:2px}.el-image-viewer__mask{position:absolute;width:100%;height:100%;top:0;left:0;opacity:.5;background:#000}.viewer-fade-enter-active{-webkit-animation:viewer-fade-in .3s;animation:viewer-fade-in .3s}.viewer-fade-leave-active{-webkit-animation:viewer-fade-out .3s;animation:viewer-fade-out .3s}@-webkit-keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@keyframes viewer-fade-in{0%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}}@-webkit-keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}@keyframes viewer-fade-out{0%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);opacity:1}100%{-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0);opacity:0}}.el-button{display:inline-block;line-height:1;white-space:nowrap;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:.1s;transition:.1s;font-weight:500;padding:12px 20px;font-size:14px;border-radius:4px}.el-button+.el-button{margin-left:10px}.el-button:focus,.el-button:hover{color:#00D1B2;border-color:#b3f1e8;background-color:#e6faf7}.el-button:active{color:#00bca0;border-color:#00bca0;outline:0}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon-]+span{margin-left:5px}.el-button.is-plain:focus,.el-button.is-plain:hover{background:#FFF;border-color:#00D1B2;color:#00D1B2}.el-button.is-active,.el-button.is-plain:active{color:#00bca0;border-color:#00bca0}.el-button.is-plain:active{background:#FFF;outline:0}.el-button.is-disabled,.el-button.is-disabled:focus,.el-button.is-disabled:hover{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5}.el-button.is-disabled.el-button--text{background-color:transparent}.el-button.is-disabled.is-plain,.el-button.is-disabled.is-plain:focus,.el-button.is-disabled.is-plain:hover{background-color:#FFF;border-color:#EBEEF5;color:#C0C4CC}.el-button.is-loading{position:relative;pointer-events:none}.el-button.is-loading:before{pointer-events:none;content:'';position:absolute;left:-1px;top:-1px;right:-1px;bottom:-1px;border-radius:inherit;background-color:rgba(255,255,255,.35)}.el-button.is-round{border-radius:20px;padding:12px 23px}.el-button.is-circle{border-radius:50%;padding:12px}.el-button--primary{color:#FFF;background-color:#00D1B2;border-color:#00D1B2}.el-button--primary:focus,.el-button--primary:hover{background:#428bca;border-color:#428bca;color:#FFF}.el-button--primary.is-active,.el-button--primary:active{background:#00bca0;border-color:#00bca0;color:#FFF}.el-button--primary:active{outline:0}.el-button--primary.is-disabled,.el-button--primary.is-disabled:active,.el-button--primary.is-disabled:focus,.el-button--primary.is-disabled:hover{color:#FFF;background-color:#80e8d9;border-color:#80e8d9}.el-button--primary.is-plain{color:#00D1B2;background:#e6faf7;border-color:#99ede0}.el-button--primary.is-plain:focus,.el-button--primary.is-plain:hover{background:#00D1B2;border-color:#00D1B2;color:#FFF}.el-button--primary.is-plain:active{background:#00bca0;border-color:#00bca0;color:#FFF;outline:0}.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover{color:#66e3d1;background-color:#e6faf7;border-color:#ccf6f0}.el-button--success{color:#FFF;background-color:#67C23A;border-color:#67C23A}.el-button--success:focus,.el-button--success:hover{background:#85ce61;border-color:#85ce61;color:#FFF}.el-button--success.is-active,.el-button--success:active{background:#5daf34;border-color:#5daf34;color:#FFF}.el-button--success:active{outline:0}.el-button--success.is-disabled,.el-button--success.is-disabled:active,.el-button--success.is-disabled:focus,.el-button--success.is-disabled:hover{color:#FFF;background-color:#b3e19d;border-color:#b3e19d}.el-button--success.is-plain{color:#67C23A;background:#f0f9eb;border-color:#c2e7b0}.el-button--success.is-plain:focus,.el-button--success.is-plain:hover{background:#67C23A;border-color:#67C23A;color:#FFF}.el-button--success.is-plain:active{background:#5daf34;border-color:#5daf34;color:#FFF;outline:0}.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover{color:#a4da89;background-color:#f0f9eb;border-color:#e1f3d8}.el-button--warning{color:#FFF;background-color:#E6A23C;border-color:#E6A23C}.el-button--warning:focus,.el-button--warning:hover{background:#ebb563;border-color:#ebb563;color:#FFF}.el-button--warning.is-active,.el-button--warning:active{background:#cf9236;border-color:#cf9236;color:#FFF}.el-button--warning:active{outline:0}.el-button--warning.is-disabled,.el-button--warning.is-disabled:active,.el-button--warning.is-disabled:focus,.el-button--warning.is-disabled:hover{color:#FFF;background-color:#f3d19e;border-color:#f3d19e}.el-button--warning.is-plain{color:#E6A23C;background:#fdf6ec;border-color:#f5dab1}.el-button--warning.is-plain:focus,.el-button--warning.is-plain:hover{background:#E6A23C;border-color:#E6A23C;color:#FFF}.el-button--warning.is-plain:active{background:#cf9236;border-color:#cf9236;color:#FFF;outline:0}.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover{color:#f0c78a;background-color:#fdf6ec;border-color:#faecd8}.el-button--danger{color:#FFF;background-color:#F56C6C;border-color:#F56C6C}.el-button--danger:focus,.el-button--danger:hover{background:#f78989;border-color:#f78989;color:#FFF}.el-button--danger.is-active,.el-button--danger:active{background:#dd6161;border-color:#dd6161;color:#FFF}.el-button--danger:active{outline:0}.el-button--danger.is-disabled,.el-button--danger.is-disabled:active,.el-button--danger.is-disabled:focus,.el-button--danger.is-disabled:hover{color:#FFF;background-color:#fab6b6;border-color:#fab6b6}.el-button--danger.is-plain{color:#F56C6C;background:#fef0f0;border-color:#fbc4c4}.el-button--danger.is-plain:focus,.el-button--danger.is-plain:hover{background:#F56C6C;border-color:#F56C6C;color:#FFF}.el-button--danger.is-plain:active{background:#dd6161;border-color:#dd6161;color:#FFF;outline:0}.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover{color:#f9a7a7;background-color:#fef0f0;border-color:#fde2e2}.el-button--info{color:#FFF;background-color:#909399;border-color:#909399}.el-button--info:focus,.el-button--info:hover{background:#a6a9ad;border-color:#a6a9ad;color:#FFF}.el-button--info.is-active,.el-button--info:active{background:#82848a;border-color:#82848a;color:#FFF}.el-button--info:active{outline:0}.el-button--info.is-disabled,.el-button--info.is-disabled:active,.el-button--info.is-disabled:focus,.el-button--info.is-disabled:hover{color:#FFF;background-color:#c8c9cc;border-color:#c8c9cc}.el-button--info.is-plain{color:#909399;background:#f4f4f5;border-color:#d3d4d6}.el-button--info.is-plain:focus,.el-button--info.is-plain:hover{background:#909399;border-color:#909399;color:#FFF}.el-button--info.is-plain:active{background:#82848a;border-color:#82848a;color:#FFF;outline:0}.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover{color:#bcbec2;background-color:#f4f4f5;border-color:#e9e9eb}.el-button--text,.el-button--text.is-disabled,.el-button--text.is-disabled:focus,.el-button--text.is-disabled:hover,.el-button--text:active{border-color:transparent}.el-button--medium{padding:10px 20px;font-size:14px;border-radius:4px}.el-button--mini,.el-button--small{font-size:12px;border-radius:3px}.el-button--medium.is-round{padding:10px 20px}.el-button--medium.is-circle{padding:10px}.el-button--small,.el-button--small.is-round{padding:9px 15px}.el-button--small.is-circle{padding:9px}.el-button--mini,.el-button--mini.is-round{padding:7px 15px}.el-button--mini.is-circle{padding:7px}.el-button--text{color:#00D1B2;background:0 0;padding-left:0;padding-right:0}.el-button--text:focus,.el-button--text:hover{color:#428bca;border-color:transparent;background-color:transparent}.el-button--text:active{color:#00bca0;background-color:transparent}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group::after,.el-button-group::before{display:table;content:""}.el-button-group::after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button.is-disabled{z-index:1}.el-button-group>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-radius:4px}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:20px}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-top-left-radius:0;border-bottom-left-radius:0;border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:first-child{border-right-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:last-child{border-left-color:rgba(255,255,255,.5)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:rgba(255,255,255,.5);border-right-color:rgba(255,255,255,.5)}.el-calendar{background-color:#fff}.el-calendar__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:12px 20px;border-bottom:1px solid #EBEEF5}.el-backtop,.el-page-header{display:-webkit-box;display:-ms-flexbox}.el-calendar__title{color:#000;-ms-flex-item-align:center;align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{padding:12px 0;color:#606266;font-weight:400}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:#C0C4CC}.el-backtop,.el-calendar-table td.is-today{color:#00D1B2}.el-calendar-table td{border-bottom:1px solid #EBEEF5;border-right:1px solid #EBEEF5;vertical-align:top;-webkit-transition:background-color .2s ease;transition:background-color .2s ease}.el-calendar-table td.is-selected{background-color:#F2F8FE}.el-calendar-table tr:first-child td{border-top:1px solid #EBEEF5}.el-calendar-table tr td:first-child{border-left:1px solid #EBEEF5}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{-webkit-box-sizing:border-box;box-sizing:border-box;padding:8px;height:85px}.el-calendar-table .el-calendar-day:hover{cursor:pointer;background-color:#F2F8FE}.el-backtop{position:fixed;background-color:#FFF;width:40px;height:40px;border-radius:50%;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;font-size:20px;-webkit-box-shadow:0 0 6px rgba(0,0,0,.12);box-shadow:0 0 6px rgba(0,0,0,.12);cursor:pointer;z-index:5}.el-backtop:hover{background-color:#F2F6FC}.el-page-header{display:flex;line-height:24px}.el-page-header__left{display:-webkit-box;display:-ms-flexbox;display:flex;cursor:pointer;margin-right:40px;position:relative}.el-page-header__left::after{content:"";position:absolute;width:1px;height:16px;right:-20px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%);background-color:#DCDFE6}.el-checkbox,.el-checkbox__input{display:inline-block;position:relative;white-space:nowrap}.el-page-header__left .el-icon-back{font-size:18px;margin-right:6px;-ms-flex-item-align:center;align-self:center}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{font-size:18px;color:#303133}.el-checkbox{color:#606266;font-weight:500;font-size:14px;cursor:pointer;user-select:none;margin-right:30px}.el-checkbox-button__inner,.el-radio{font-weight:500;-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none}.el-checkbox.is-bordered{padding:9px 20px 9px 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:normal;height:40px}.el-checkbox.is-bordered.is-checked{border-color:#00D1B2}.el-checkbox.is-bordered.is-disabled{border-color:#EBEEF5;cursor:not-allowed}.el-checkbox.is-bordered+.el-checkbox.is-bordered{margin-left:10px}.el-checkbox.is-bordered.el-checkbox--medium{padding:7px 20px 7px 10px;border-radius:4px;height:36px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__label{line-height:17px;font-size:14px}.el-checkbox.is-bordered.el-checkbox--medium .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{padding:5px 15px 5px 10px;border-radius:3px;height:32px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{line-height:15px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox.is-bordered.el-checkbox--mini{padding:3px 15px 3px 10px;border-radius:3px;height:28px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__label{line-height:12px;font-size:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--mini .el-checkbox__inner::after{height:6px;width:2px}.el-checkbox__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:#edf2fc;border-color:#DCDFE6;cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner::after{cursor:not-allowed;border-color:#C0C4CC}.el-checkbox__input.is-disabled .el-checkbox__inner+.el-checkbox__label{cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner::after{border-color:#C0C4CC}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:#F2F6FC;border-color:#DCDFE6}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner::before{background-color:#C0C4CC;border-color:#C0C4CC}.el-checkbox__input.is-checked .el-checkbox__inner,.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:#00D1B2;border-color:#00D1B2}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:#C0C4CC;cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:#00D1B2}.el-checkbox__input.is-focus .el-checkbox__inner{border-color:#00D1B2}.el-checkbox__input.is-indeterminate .el-checkbox__inner::before{content:'';position:absolute;display:block;background-color:#FFF;height:2px;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:5px}.el-checkbox__input.is-indeterminate .el-checkbox__inner::after{display:none}.el-checkbox__inner{display:inline-block;position:relative;border:1px solid #DCDFE6;border-radius:2px;-webkit-box-sizing:border-box;box-sizing:border-box;width:14px;height:14px;background-color:#FFF;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.el-checkbox__inner:hover{border-color:#00D1B2}.el-checkbox__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:1px solid #FFF;border-left:0;border-top:0;height:7px;left:4px;position:absolute;top:1px;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:3px;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.el-checkbox__original{opacity:0;outline:0;position:absolute;margin:0;width:0;height:0;z-index:-1}.el-checkbox-button,.el-checkbox-button__inner{display:inline-block;position:relative}.el-checkbox__label{display:inline-block;padding-left:10px;line-height:19px;font-size:14px}.el-checkbox:last-of-type{margin-right:0}.el-checkbox-button__inner{line-height:1;white-space:nowrap;vertical-align:middle;cursor:pointer;background:#FFF;border:1px solid #DCDFE6;border-left:0;color:#606266;-webkit-appearance:none;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;outline:0;margin:0;-webkit-transition:all .3s cubic-bezier(.645,.045,.355,1);transition:all .3s cubic-bezier(.645,.045,.355,1);padding:12px 20px;font-size:14px;border-radius:0}.el-checkbox-button__inner.is-round{padding:12px 20px}.el-checkbox-button__inner:hover{color:#00D1B2}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-radio,.el-radio__input{line-height:1;outline:0;white-space:nowrap}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{opacity:0;outline:0;position:absolute;margin:0;z-index:-1}.el-radio,.el-radio__inner,.el-radio__input{position:relative;display:inline-block}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:#FFF;background-color:#00D1B2;border-color:#00D1B2;-webkit-box-shadow:-1px 0 0 0 #66e3d1;box-shadow:-1px 0 0 0 #66e3d1}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:#00D1B2}.el-checkbox-button.is-disabled .el-checkbox-button__inner{color:#C0C4CC;cursor:not-allowed;background-image:none;background-color:#FFF;border-color:#EBEEF5;-webkit-box-shadow:none;box-shadow:none}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:#EBEEF5}.el-checkbox-button:first-child .el-checkbox-button__inner{border-left:1px solid #DCDFE6;border-radius:4px 0 0 4px;-webkit-box-shadow:none!important;box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:#00D1B2}.el-checkbox-button:last-child .el-checkbox-button__inner{border-radius:0 4px 4px 0}.el-checkbox-button--medium .el-checkbox-button__inner{padding:10px 20px;font-size:14px;border-radius:0}.el-checkbox-button--medium .el-checkbox-button__inner.is-round{padding:10px 20px}.el-checkbox-button--small .el-checkbox-button__inner{padding:9px 15px;font-size:12px;border-radius:0}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:9px 15px}.el-checkbox-button--mini .el-checkbox-button__inner{padding:7px 15px;font-size:12px;border-radius:0}.el-checkbox-button--mini .el-checkbox-button__inner.is-round{padding:7px 15px}.el-checkbox-group{font-size:0}.el-radio,.el-radio--medium.is-bordered .el-radio__label{font-size:14px}.el-radio{color:#606266;cursor:pointer;margin-right:30px}.el-cascader-node>.el-radio,.el-radio:last-child{margin-right:0}.el-radio.is-bordered{padding:12px 20px 0 10px;border-radius:4px;border:1px solid #DCDFE6;-webkit-box-sizing:border-box;box-sizing:border-box;height:40px}.el-radio.is-bordered.is-checked{border-color:#00D1B2}.el-radio.is-bordered.is-disabled{cursor:not-allowed;border-color:#EBEEF5}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:#F5F7FA;border-color:#E4E7ED}.el-radio.is-bordered+.el-radio.is-bordered{margin-left:10px}.el-radio--medium.is-bordered{padding:10px 20px 0 10px;border-radius:4px;height:36px}.el-radio--mini.is-bordered .el-radio__label,.el-radio--small.is-bordered .el-radio__label{font-size:12px}.el-radio--medium.is-bordered .el-radio__inner{height:14px;width:14px}.el-radio--small.is-bordered{padding:8px 15px 0 10px;border-radius:3px;height:32px}.el-radio--small.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio--mini.is-bordered{padding:6px 15px 0 10px;border-radius:3px;height:28px}.el-radio--mini.is-bordered .el-radio__inner{height:12px;width:12px}.el-radio__input{cursor:pointer;vertical-align:middle}.el-radio__input.is-disabled .el-radio__inner{cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner::after{cursor:not-allowed;background-color:#F5F7FA}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner::after{background-color:#C0C4CC}.el-radio__input.is-disabled+span.el-radio__label{color:#C0C4CC;cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{border-color:#00D1B2;background:#00D1B2}.el-radio__input.is-checked .el-radio__inner::after{-webkit-transform:translate(-50%,-50%) scale(1);transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:#00D1B2}.el-radio__input.is-focus .el-radio__inner{border-color:#00D1B2}.el-radio__inner{border:1px solid #DCDFE6;border-radius:100%;width:14px;height:14px;background-color:#FFF;cursor:pointer;-webkit-box-sizing:border-box;box-sizing:border-box}.el-radio__inner:hover{border-color:#00D1B2}.el-radio__inner::after{width:4px;height:4px;border-radius:100%;background-color:#FFF;content:"";position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%) scale(0);transform:translate(-50%,-50%) scale(0);-webkit-transition:-webkit-transform .15s ease-in;transition:-webkit-transform .15s ease-in;transition:transform .15s ease-in;transition:transform .15s ease-in,-webkit-transform .15s ease-in}.el-radio__original{opacity:0;outline:0;position:absolute;z-index:-1;top:0;left:0;right:0;bottom:0;margin:0}.el-radio:focus:not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{-webkit-box-shadow:0 0 2px 2px #00D1B2;box-shadow:0 0 2px 2px #00D1B2}.el-radio__label{font-size:14px;padding-left:10px}.el-scrollbar{overflow:hidden;position:relative}.el-scrollbar:active>.el-scrollbar__bar,.el-scrollbar:focus>.el-scrollbar__bar,.el-scrollbar:hover>.el-scrollbar__bar{opacity:1;-webkit-transition:opacity 340ms ease-out;transition:opacity 340ms ease-out}.el-scrollbar__wrap{overflow:scroll;height:100%}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{width:0;height:0}.el-scrollbar__thumb{position:relative;display:block;width:0;height:0;cursor:pointer;border-radius:inherit;background-color:rgba(144,147,153,.3);-webkit-transition:.3s background-color;transition:.3s background-color}.el-scrollbar__thumb:hover{background-color:rgba(144,147,153,.5)}.el-scrollbar__bar{position:absolute;right:2px;bottom:2px;z-index:1;border-radius:4px;opacity:0;-webkit-transition:opacity 120ms ease-out;transition:opacity 120ms ease-out}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-cascader-panel{display:-webkit-box;display:-ms-flexbox;display:flex;border-radius:4px;font-size:14px}.el-cascader-panel.is-bordered{border:1px solid #E4E7ED;border-radius:4px}.el-cascader-menu{min-width:180px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#606266;border-right:solid 1px #E4E7ED}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap{height:204px}.el-cascader-menu__list{position:relative;min-height:100%;margin:0;padding:6px 0;list-style:none;-webkit-box-sizing:border-box;box-sizing:border-box}.el-avatar,.el-drawer{-webkit-box-sizing:border-box;overflow:hidden}.el-cascader-menu__hover-zone{position:absolute;top:0;left:0;width:100%;height:100%;pointer-events:none}.el-cascader-menu__empty-text{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;color:#C0C4CC}.el-cascader-node{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 30px 0 20px;height:34px;line-height:34px;outline:0}.el-cascader-node.is-selectable.in-active-path{color:#606266}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:#00D1B2;font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:#F5F7FA}.el-cascader-node.is-disabled{color:#C0C4CC;cursor:not-allowed}.el-cascader-node__prefix{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{-webkit-box-flex:1;-ms-flex:1;flex:1;padding:0 10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-avatar{display:inline-block;box-sizing:border-box;text-align:center;color:#fff;background:#C0C4CC;width:40px;height:40px;line-height:40px;font-size:14px}.el-avatar>img{display:block;height:100%;vertical-align:middle}.el-drawer,.el-drawer__header{display:-webkit-box;display:-ms-flexbox}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:4px}.el-avatar--icon{font-size:18px}.el-avatar--large{width:40px;height:40px;line-height:40px}.el-avatar--medium{width:36px;height:36px;line-height:36px}.el-avatar--small{width:28px;height:28px;line-height:28px}.el-drawer.btt,.el-drawer.ttb,.el-drawer__container{left:0;right:0;width:100%}.el-drawer.ltr,.el-drawer.rtl,.el-drawer__container{top:0;bottom:0;height:100%}@-webkit-keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@keyframes el-drawer-fade-in{0%{opacity:0}100%{opacity:1}}@-webkit-keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes rtl-drawer-in{0%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@keyframes rtl-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(100%,0);transform:translate(100%,0)}}@-webkit-keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ltr-drawer-in{0%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@keyframes ltr-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}}@-webkit-keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes ttb-drawer-in{0%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@keyframes ttb-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}}@-webkit-keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@keyframes btt-drawer-in{0%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}100%{-webkit-transform:translate(0,0);transform:translate(0,0)}}@-webkit-keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}@keyframes btt-drawer-out{0%{-webkit-transform:translate(0,0);transform:translate(0,0)}100%{-webkit-transform:translate(0,100%);transform:translate(0,100%)}}.el-drawer{position:absolute;box-sizing:border-box;background-color:#FFF;display:flex;-ms-flex-direction:column;flex-direction:column;-webkit-box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12);box-shadow:0 8px 10px -5px rgba(0,0,0,.2),0 16px 24px 2px rgba(0,0,0,.14),0 6px 30px 5px rgba(0,0,0,.12)}.el-drawer.rtl{-webkit-animation:rtl-drawer-out .3s;animation:rtl-drawer-out .3s;right:0}.el-drawer__open .el-drawer.rtl{-webkit-animation:rtl-drawer-in .3s 1ms;animation:rtl-drawer-in .3s 1ms}.el-drawer.ltr{-webkit-animation:ltr-drawer-out .3s;animation:ltr-drawer-out .3s;left:0}.el-drawer__open .el-drawer.ltr{-webkit-animation:ltr-drawer-in .3s 1ms;animation:ltr-drawer-in .3s 1ms}.el-drawer.ttb{-webkit-animation:ttb-drawer-out .3s;animation:ttb-drawer-out .3s;top:0}.el-drawer__open .el-drawer.ttb{-webkit-animation:ttb-drawer-in .3s 1ms;animation:ttb-drawer-in .3s 1ms}.el-drawer.btt{-webkit-animation:btt-drawer-out .3s;animation:btt-drawer-out .3s;bottom:0}.el-drawer__open .el-drawer.btt{-webkit-animation:btt-drawer-in .3s 1ms;animation:btt-drawer-in .3s 1ms}.el-drawer__wrapper{position:fixed;top:0;right:0;bottom:0;left:0;overflow:hidden;margin:0}.el-drawer__header{-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#72767b;display:flex;margin-bottom:32px;padding:20px 20px 0}.el-drawer__header>:first-child{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__title{margin:0;-webkit-box-flex:1;-ms-flex:1;flex:1;line-height:inherit;font-size:1rem}.el-drawer__close-btn{border:none;cursor:pointer;font-size:20px;color:inherit;background-color:transparent}.el-drawer__body{-webkit-box-flex:1;-ms-flex:1;flex:1}.el-drawer__body>*{-webkit-box-sizing:border-box;box-sizing:border-box}.el-drawer__container{position:relative}.el-drawer-fade-enter-active{-webkit-animation:el-drawer-fade-in .3s;animation:el-drawer-fade-in .3s}.el-drawer-fade-leave-active{animation:el-drawer-fade-in .3s reverse}.el-popconfirm__main{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin:0}
diff --git a/src/assets/css/viewer.css b/src/assets/css/viewer.css
new file mode 100644
index 0000000..2716fdb
--- /dev/null
+++ b/src/assets/css/viewer.css
@@ -0,0 +1,461 @@
+/*!
+ * Viewer.js v1.11.1
+ * https://fengyuanchen.github.io/viewerjs
+ *
+ * Copyright 2015-present Chen Fengyuan
+ * Released under the MIT license
+ *
+ * Date: 2022-11-06T05:18:17.414Z
+ */
+
+.viewer-zoom-in::before, .viewer-zoom-out::before, .viewer-one-to-one::before, .viewer-reset::before, .viewer-prev::before, .viewer-play::before, .viewer-next::before, .viewer-rotate-left::before, .viewer-rotate-right::before, .viewer-flip-horizontal::before, .viewer-flip-vertical::before, .viewer-fullscreen::before, .viewer-fullscreen-exit::before, .viewer-close::before {
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARgAAAAUCAYAAABWOyJDAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAQPSURBVHic7Zs/iFxVFMa/0U2UaJGksUgnIVhYxVhpjDbZCBmLdAYECxsRFBTUamcXUiSNncgKQbSxsxH8gzAP3FU2jY0kKKJNiiiIghFlccnP4p3nPCdv3p9778vsLOcHB2bfveeb7955c3jvvNkBIMdxnD64a94GHMfZu3iBcRynN7zAOI7TG15gHCeeNUkr8zaxG2lbYDYsdgMbktBsP03jdQwljSXdtBhLOmtjowC9Mg9L+knSlcD8TNKpSA9lBpK2JF2VdDSR5n5J64m0qli399hNFMUlpshQii5jbXTbHGviB0nLNeNDSd9VO4A2UdB2fp+x0eCnaXxWXGA2X0au/3HgN9P4LFCjIANOJdrLr0zzZ+BEpNYDwKbpnQMeAw4m8HjQtM6Z9qa917zPQwFr3M5KgA6J5rTJCdFZJj9/lyvGhsDvwFNVuV2MhhjrK6b9bFiE+j1r87eBl4HDwCF7/U/k+ofAX5b/EXBv5JoLMuILzf3Ap6Z3EzgdqHMCuF7hcQf4HDgeoHnccncqdK/TvSDWffFXI/exICY/xZyqc6XLWF1UFZna4gJ7q8BsRvgd2/xXpo6P+D9dfT7PpECtA3cnWPM0GXGFZh/wgWltA+cDNC7X+AP4GzjZQe+k5dRxuYPeiuXU7e1qwLpDz7dFjXKRaSwuMLvAlG8zZlG+YmiK1HoFqT7wP2z+4Q45TfEGcMt01xLoNZEBTwRqD4BLpnMLeC1A41UmVxsXgXeBayV/Wx20rpTyrpnWRft7p6O/FdqzGrDukPNtkaMoMo3FBdBSQMOnYBCReyf05s126fU9ytfX98+mY54Kxnp7S9K3kj6U9KYdG0h6UdLbkh7poFXMfUnSOyVvL0h6VtIXHbS6nOP+s/Zm9mvyXW1uuC9ohZ72E9uDmXWLJOB1GxsH+DxPftsB8B6wlGDN02TAkxG6+4D3TWsbeC5CS8CDFce+AW500LhhOW2020TRjK3b21HEmgti9m0RonxbdMZeVzV+/4tF3cBpP7E9mKHNL5q8h5g0eYsCMQz0epq8gQrwMXAgcs0FGXGFRcB9wCemF9PkbYqM/Bas7fxLwNeJPdTdpo4itQti8lPMqTpXuozVRVXPpbHI3KkNTB1NfkL81j2mvhDp91HgV9MKuRIqrykj3WPq4rHyL+axj8/qGPmTqi6F9YDlHOvJU6oYcTsh/TYSzWmTE6JT19CtLTJt32D6CmHe0eQn1O8z5AXgT4sx4Vcu0/EQecMydB8z0hUWkTd2t4CrwNEePqMBcAR4mrBbwyXLPWJa8zrXmmLEhNBmfpkuY2102xxrih+pb+ieAb6vGhuA97UcJ5KR8gZ77K+99xxeYBzH6Q3/Z0fHcXrDC4zjOL3hBcZxnN74F+zlvXFWXF9PAAAAAElFTkSuQmCC");
+ background-repeat: no-repeat;
+ background-size: 280px;
+ color: transparent;
+ display: block;
+ font-size: 0;
+ height: 20px;
+ line-height: 0;
+ width: 20px;
+}
+
+.viewer-zoom-in::before {
+ background-position: 0 0;
+ content: "Zoom In";
+}
+
+.viewer-zoom-out::before {
+ background-position: -20px 0;
+ content: "Zoom Out";
+}
+
+.viewer-one-to-one::before {
+ background-position: -40px 0;
+ content: "One to One";
+}
+
+.viewer-reset::before {
+ background-position: -60px 0;
+ content: "Reset";
+}
+
+.viewer-prev::before {
+ background-position: -80px 0;
+ content: "Previous";
+}
+
+.viewer-play::before {
+ background-position: -100px 0;
+ content: "Play";
+}
+
+.viewer-next::before {
+ background-position: -120px 0;
+ content: "Next";
+}
+
+.viewer-rotate-left::before {
+ background-position: -140px 0;
+ content: "Rotate Left";
+}
+
+.viewer-rotate-right::before {
+ background-position: -160px 0;
+ content: "Rotate Right";
+}
+
+.viewer-flip-horizontal::before {
+ background-position: -180px 0;
+ content: "Flip Horizontal";
+}
+
+.viewer-flip-vertical::before {
+ background-position: -200px 0;
+ content: "Flip Vertical";
+}
+
+.viewer-fullscreen::before {
+ background-position: -220px 0;
+ content: "Enter Full Screen";
+}
+
+.viewer-fullscreen-exit::before {
+ background-position: -240px 0;
+ content: "Exit Full Screen";
+}
+
+.viewer-close::before {
+ background-position: -260px 0;
+ content: "Close";
+}
+
+.viewer-fixed.viewer-container {
+ z-index: 20000!important;
+ bottom: 0;
+ direction: ltr;
+ font-size: 0;
+ left: 0;
+ line-height: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ -webkit-tap-highlight-color: transparent;
+ top: 0;
+ -ms-touch-action: none;
+ touch-action: none;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+.viewer-container::-moz-selection, .viewer-container *::-moz-selection {
+ background-color: transparent;
+}
+
+.viewer-container::selection,
+.viewer-container *::selection {
+ background-color: transparent;
+}
+
+.viewer-container:focus {
+ outline: 0;
+}
+
+.viewer-prev{
+ position: fixed!important;
+ top: 50%!important;
+ left: 100px!important;
+ transform: scale(2) translateY(-50%)!important;
+}
+
+.viewer-next{
+ position: fixed!important;
+ top: 50%!important;
+ right: 100px!important;
+ transform: scale(2) translateY(-50%)!important;
+}
+
+.viewer-container img {
+ display: block;
+ height: auto;
+ max-height: none !important;
+ max-width: none !important;
+ min-height: 0 !important;
+ min-width: 0 !important;
+ width: 100%;
+}
+
+.viewer-canvas {
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ top: 0;
+}
+
+.viewer-canvas > img {
+ height: auto;
+ margin: 15px auto;
+ max-width: 90% !important;
+ width: auto;
+}
+
+.viewer-footer {
+ bottom: 0;
+ left: 0;
+ overflow: hidden;
+ position: absolute;
+ right: 0;
+ text-align: center;
+}
+
+.viewer-navbar {
+ background-color: rgba(0, 0, 0, 50%);
+ overflow: hidden;
+}
+
+.viewer-list {
+ box-sizing: content-box;
+ height: 50px;
+ margin: 0;
+ overflow: hidden;
+ padding: 1px 0;
+}
+
+.viewer-list > li {
+ color: transparent;
+ cursor: pointer;
+ float: left;
+ font-size: 0;
+ height: 50px;
+ line-height: 0;
+ opacity: 0.5;
+ overflow: hidden;
+ transition: opacity 0.15s;
+ width: 30px;
+}
+
+.viewer-list > li:focus,
+.viewer-list > li:hover {
+ opacity: 0.75;
+}
+
+.viewer-list > li:focus {
+ outline: 0;
+}
+
+.viewer-list > li + li {
+ margin-left: 1px;
+}
+
+.viewer-list > .viewer-loading {
+ position: relative;
+}
+
+.viewer-list > .viewer-loading::after {
+ border-width: 2px;
+ height: 20px;
+ margin-left: -10px;
+ margin-top: -10px;
+ width: 20px;
+}
+
+.viewer-list > .viewer-active,
+.viewer-list > .viewer-active:focus,
+.viewer-list > .viewer-active:hover {
+ opacity: 1;
+}
+
+.viewer-player {
+ background-color: #000;
+ bottom: 0;
+ cursor: none;
+ display: none;
+ left: 0;
+ position: absolute;
+ right: 0;
+ top: 0;
+ z-index: 1;
+}
+
+.viewer-player > img {
+ left: 0;
+ position: absolute;
+ top: 0;
+}
+
+.viewer-toolbar > ul {
+ display: inline-block;
+ margin: 0 auto 5px;
+ overflow: hidden;
+ padding: 6px 3px;
+}
+
+.viewer-toolbar > ul > li {
+ background-color: rgba(0, 0, 0, 50%);
+ border-radius: 50%;
+ cursor: pointer;
+ float: left;
+ height: 24px;
+ overflow: hidden;
+ transition: background-color 0.15s;
+ width: 24px;
+}
+
+.viewer-toolbar > ul > li:focus,
+.viewer-toolbar > ul > li:hover {
+ background-color: rgba(0, 0, 0, 80%);
+}
+
+.viewer-toolbar > ul > li:focus {
+ box-shadow: 0 0 3px #fff;
+ outline: 0;
+ position: relative;
+ z-index: 1;
+}
+
+.viewer-toolbar > ul > li::before {
+ margin: 2px;
+}
+
+.viewer-toolbar > ul > li + li {
+ margin-left: 1px;
+}
+
+.viewer-toolbar > ul > .viewer-small {
+ height: 18px;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ width: 18px;
+}
+
+.viewer-toolbar > ul > .viewer-small::before {
+ margin: -1px;
+}
+
+.viewer-toolbar > ul > .viewer-large {
+ height: 30px;
+ margin-bottom: -3px;
+ margin-top: -3px;
+ width: 30px;
+}
+
+.viewer-toolbar > ul > .viewer-large::before {
+ margin: 5px;
+}
+
+.viewer-tooltip {
+ background-color: rgba(0, 0, 0, 80%);
+ border-radius: 10px;
+ color: #fff;
+ display: none;
+ font-size: 12px;
+ height: 20px;
+ left: 50%;
+ line-height: 20px;
+ margin-left: -25px;
+ margin-top: -10px;
+ position: absolute;
+ text-align: center;
+ top: 50%;
+ width: 50px;
+}
+
+.viewer-title {
+ color: #ccc;
+ display: inline-block;
+ font-size: 12px;
+ line-height: 1.2;
+ margin: 5px 5%;
+ max-width: 90%;
+ min-height: 14px;
+ opacity: 0.8;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ transition: opacity 0.15s;
+ white-space: nowrap;
+}
+
+.viewer-title:hover {
+ opacity: 1;
+}
+
+.viewer-button {
+ -webkit-app-region: no-drag;
+ background-color: rgba(0, 0, 0, 50%);
+ border-radius: 50%;
+ cursor: pointer;
+ height: 80px;
+ overflow: hidden;
+ position: absolute;
+ right: -40px;
+ top: -40px;
+ transition: background-color 0.15s;
+ width: 80px;
+}
+
+.viewer-button:focus,
+.viewer-button:hover {
+ background-color: rgba(0, 0, 0, 80%);
+}
+
+.viewer-button:focus {
+ box-shadow: 0 0 3px #fff;
+ outline: 0;
+}
+
+.viewer-button::before {
+ bottom: 15px;
+ left: 15px;
+ position: absolute;
+}
+
+.viewer-fixed {
+ position: fixed;
+}
+
+.viewer-open {
+ overflow: hidden;
+}
+
+.viewer-show {
+ display: block;
+}
+
+.viewer-hide {
+ display: none;
+}
+
+.viewer-backdrop {
+ background-color: rgba(0, 0, 0, 50%);
+}
+
+.viewer-invisible {
+ visibility: hidden;
+}
+
+.viewer-move {
+ cursor: move;
+ cursor: grab;
+}
+
+.viewer-fade {
+ opacity: 0;
+}
+
+.viewer-in {
+ opacity: 1;
+}
+
+.viewer-transition {
+ transition: all 0.3s;
+}
+
+@keyframes viewer-spinner {
+ 0% {
+ transform: rotate(0deg);
+ }
+
+ 100% {
+ transform: rotate(360deg);
+ }
+}
+
+.viewer-loading::after {
+ animation: viewer-spinner 1s linear infinite;
+ border: 4px solid rgba(255, 255, 255, 10%);
+ border-left-color: rgba(255, 255, 255, 50%);
+ border-radius: 50%;
+ content: "";
+ display: inline-block;
+ height: 40px;
+ left: 50%;
+ margin-left: -20px;
+ margin-top: -20px;
+ position: absolute;
+ top: 50%;
+ width: 40px;
+ z-index: 1;
+}
+
+@media (max-width: 767px) {
+ .viewer-hide-xs-down {
+ display: none;
+ }
+}
+
+@media (max-width: 991px) {
+ .viewer-hide-sm-down {
+ display: none;
+ }
+}
+
+@media (max-width: 1199px) {
+ .viewer-hide-md-down {
+ display: none;
+ }
+}
diff --git a/src/assets/filing.png b/src/assets/filing.png
new file mode 100644
index 0000000..9f76394
Binary files /dev/null and b/src/assets/filing.png differ
diff --git a/src/assets/head_bg.png b/src/assets/head_bg.png
new file mode 100644
index 0000000..a2e45f6
Binary files /dev/null and b/src/assets/head_bg.png differ
diff --git a/src/assets/icons/index.js b/src/assets/icons/index.js
new file mode 100644
index 0000000..2c6b309
--- /dev/null
+++ b/src/assets/icons/index.js
@@ -0,0 +1,9 @@
+import Vue from 'vue'
+import SvgIcon from '@/components/SvgIcon'// svg component
+
+// register globally
+Vue.component('svg-icon', SvgIcon)
+
+const req = require.context('./svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys().map(requireContext)
+requireAll(req)
diff --git a/src/assets/icons/svg/404.svg b/src/assets/icons/svg/404.svg
new file mode 100644
index 0000000..6df5019
--- /dev/null
+++ b/src/assets/icons/svg/404.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/bug.svg b/src/assets/icons/svg/bug.svg
new file mode 100644
index 0000000..05a150d
--- /dev/null
+++ b/src/assets/icons/svg/bug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/build.svg b/src/assets/icons/svg/build.svg
new file mode 100644
index 0000000..97c4688
--- /dev/null
+++ b/src/assets/icons/svg/build.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/chart.svg b/src/assets/icons/svg/chart.svg
new file mode 100644
index 0000000..27728fb
--- /dev/null
+++ b/src/assets/icons/svg/chart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/clipboard.svg b/src/assets/icons/svg/clipboard.svg
new file mode 100644
index 0000000..90923ff
--- /dev/null
+++ b/src/assets/icons/svg/clipboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/component.svg b/src/assets/icons/svg/component.svg
new file mode 100644
index 0000000..207ada3
--- /dev/null
+++ b/src/assets/icons/svg/component.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/dashboard.svg b/src/assets/icons/svg/dashboard.svg
new file mode 100644
index 0000000..5317d37
--- /dev/null
+++ b/src/assets/icons/svg/dashboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/date.svg b/src/assets/icons/svg/date.svg
new file mode 100644
index 0000000..2a28112
--- /dev/null
+++ b/src/assets/icons/svg/date.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/dict.svg b/src/assets/icons/svg/dict.svg
new file mode 100644
index 0000000..4849377
--- /dev/null
+++ b/src/assets/icons/svg/dict.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/documentation.svg b/src/assets/icons/svg/documentation.svg
new file mode 100644
index 0000000..7043122
--- /dev/null
+++ b/src/assets/icons/svg/documentation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/download.svg b/src/assets/icons/svg/download.svg
new file mode 100644
index 0000000..c896951
--- /dev/null
+++ b/src/assets/icons/svg/download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/drag.svg b/src/assets/icons/svg/drag.svg
new file mode 100644
index 0000000..4185d3c
--- /dev/null
+++ b/src/assets/icons/svg/drag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/druid.svg b/src/assets/icons/svg/druid.svg
new file mode 100644
index 0000000..a2b4b4e
--- /dev/null
+++ b/src/assets/icons/svg/druid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/edit.svg b/src/assets/icons/svg/edit.svg
new file mode 100644
index 0000000..d26101f
--- /dev/null
+++ b/src/assets/icons/svg/edit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/education.svg b/src/assets/icons/svg/education.svg
new file mode 100644
index 0000000..7bfb01d
--- /dev/null
+++ b/src/assets/icons/svg/education.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/email.svg b/src/assets/icons/svg/email.svg
new file mode 100644
index 0000000..74d25e2
--- /dev/null
+++ b/src/assets/icons/svg/email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/example.svg b/src/assets/icons/svg/example.svg
new file mode 100644
index 0000000..46f42b5
--- /dev/null
+++ b/src/assets/icons/svg/example.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/excel.svg b/src/assets/icons/svg/excel.svg
new file mode 100644
index 0000000..74d97b8
--- /dev/null
+++ b/src/assets/icons/svg/excel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/exit-fullscreen.svg b/src/assets/icons/svg/exit-fullscreen.svg
new file mode 100644
index 0000000..485c128
--- /dev/null
+++ b/src/assets/icons/svg/exit-fullscreen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/eye-open.svg b/src/assets/icons/svg/eye-open.svg
new file mode 100644
index 0000000..88dcc98
--- /dev/null
+++ b/src/assets/icons/svg/eye-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/eye.svg b/src/assets/icons/svg/eye.svg
new file mode 100644
index 0000000..16ed2d8
--- /dev/null
+++ b/src/assets/icons/svg/eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/form.svg b/src/assets/icons/svg/form.svg
new file mode 100644
index 0000000..dcbaa18
--- /dev/null
+++ b/src/assets/icons/svg/form.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/fullscreen.svg b/src/assets/icons/svg/fullscreen.svg
new file mode 100644
index 0000000..0e86b6f
--- /dev/null
+++ b/src/assets/icons/svg/fullscreen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/guide.svg b/src/assets/icons/svg/guide.svg
new file mode 100644
index 0000000..b271001
--- /dev/null
+++ b/src/assets/icons/svg/guide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/icon.svg b/src/assets/icons/svg/icon.svg
new file mode 100644
index 0000000..82be8ee
--- /dev/null
+++ b/src/assets/icons/svg/icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/international.svg b/src/assets/icons/svg/international.svg
new file mode 100644
index 0000000..e9b56ee
--- /dev/null
+++ b/src/assets/icons/svg/international.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/job.svg b/src/assets/icons/svg/job.svg
new file mode 100644
index 0000000..2a93a25
--- /dev/null
+++ b/src/assets/icons/svg/job.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/language.svg b/src/assets/icons/svg/language.svg
new file mode 100644
index 0000000..0082b57
--- /dev/null
+++ b/src/assets/icons/svg/language.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/link.svg b/src/assets/icons/svg/link.svg
new file mode 100644
index 0000000..48197ba
--- /dev/null
+++ b/src/assets/icons/svg/link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/list.svg b/src/assets/icons/svg/list.svg
new file mode 100644
index 0000000..20259ed
--- /dev/null
+++ b/src/assets/icons/svg/list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/lock.svg b/src/assets/icons/svg/lock.svg
new file mode 100644
index 0000000..74fee54
--- /dev/null
+++ b/src/assets/icons/svg/lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/log.svg b/src/assets/icons/svg/log.svg
new file mode 100644
index 0000000..d879d33
--- /dev/null
+++ b/src/assets/icons/svg/log.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/logininfor.svg b/src/assets/icons/svg/logininfor.svg
new file mode 100644
index 0000000..267f844
--- /dev/null
+++ b/src/assets/icons/svg/logininfor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/message.svg b/src/assets/icons/svg/message.svg
new file mode 100644
index 0000000..14ca817
--- /dev/null
+++ b/src/assets/icons/svg/message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/money.svg b/src/assets/icons/svg/money.svg
new file mode 100644
index 0000000..c1580de
--- /dev/null
+++ b/src/assets/icons/svg/money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/monitor.svg b/src/assets/icons/svg/monitor.svg
new file mode 100644
index 0000000..bc308cb
--- /dev/null
+++ b/src/assets/icons/svg/monitor.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/nested.svg b/src/assets/icons/svg/nested.svg
new file mode 100644
index 0000000..06713a8
--- /dev/null
+++ b/src/assets/icons/svg/nested.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/online.svg b/src/assets/icons/svg/online.svg
new file mode 100644
index 0000000..330a202
--- /dev/null
+++ b/src/assets/icons/svg/online.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/password.svg b/src/assets/icons/svg/password.svg
new file mode 100644
index 0000000..e291d85
--- /dev/null
+++ b/src/assets/icons/svg/password.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/pdf.svg b/src/assets/icons/svg/pdf.svg
new file mode 100644
index 0000000..957aa0c
--- /dev/null
+++ b/src/assets/icons/svg/pdf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/people.svg b/src/assets/icons/svg/people.svg
new file mode 100644
index 0000000..2bd54ae
--- /dev/null
+++ b/src/assets/icons/svg/people.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/peoples.svg b/src/assets/icons/svg/peoples.svg
new file mode 100644
index 0000000..aab852e
--- /dev/null
+++ b/src/assets/icons/svg/peoples.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/phone.svg b/src/assets/icons/svg/phone.svg
new file mode 100644
index 0000000..ab8e8c4
--- /dev/null
+++ b/src/assets/icons/svg/phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/post.svg b/src/assets/icons/svg/post.svg
new file mode 100644
index 0000000..2922c61
--- /dev/null
+++ b/src/assets/icons/svg/post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/qq.svg b/src/assets/icons/svg/qq.svg
new file mode 100644
index 0000000..ee13d4e
--- /dev/null
+++ b/src/assets/icons/svg/qq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/row.svg b/src/assets/icons/svg/row.svg
new file mode 100644
index 0000000..0780992
--- /dev/null
+++ b/src/assets/icons/svg/row.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/search.svg b/src/assets/icons/svg/search.svg
new file mode 100644
index 0000000..84233dd
--- /dev/null
+++ b/src/assets/icons/svg/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/server.svg b/src/assets/icons/svg/server.svg
new file mode 100644
index 0000000..ca37b00
--- /dev/null
+++ b/src/assets/icons/svg/server.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/shopping.svg b/src/assets/icons/svg/shopping.svg
new file mode 100644
index 0000000..87513e7
--- /dev/null
+++ b/src/assets/icons/svg/shopping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/size.svg b/src/assets/icons/svg/size.svg
new file mode 100644
index 0000000..ddb25b8
--- /dev/null
+++ b/src/assets/icons/svg/size.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/skill.svg b/src/assets/icons/svg/skill.svg
new file mode 100644
index 0000000..a3b7312
--- /dev/null
+++ b/src/assets/icons/svg/skill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/star.svg b/src/assets/icons/svg/star.svg
new file mode 100644
index 0000000..6cf86e6
--- /dev/null
+++ b/src/assets/icons/svg/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/swagger.svg b/src/assets/icons/svg/swagger.svg
new file mode 100644
index 0000000..05d4e7b
--- /dev/null
+++ b/src/assets/icons/svg/swagger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/system.svg b/src/assets/icons/svg/system.svg
new file mode 100644
index 0000000..dba28cf
--- /dev/null
+++ b/src/assets/icons/svg/system.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/tab.svg b/src/assets/icons/svg/tab.svg
new file mode 100644
index 0000000..b4b48e4
--- /dev/null
+++ b/src/assets/icons/svg/tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/table.svg b/src/assets/icons/svg/table.svg
new file mode 100644
index 0000000..0e3dc9d
--- /dev/null
+++ b/src/assets/icons/svg/table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/theme.svg b/src/assets/icons/svg/theme.svg
new file mode 100644
index 0000000..5982a2f
--- /dev/null
+++ b/src/assets/icons/svg/theme.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/tool.svg b/src/assets/icons/svg/tool.svg
new file mode 100644
index 0000000..c813067
--- /dev/null
+++ b/src/assets/icons/svg/tool.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/tree-table.svg b/src/assets/icons/svg/tree-table.svg
new file mode 100644
index 0000000..8aafdb8
--- /dev/null
+++ b/src/assets/icons/svg/tree-table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/tree.svg b/src/assets/icons/svg/tree.svg
new file mode 100644
index 0000000..dd4b7dd
--- /dev/null
+++ b/src/assets/icons/svg/tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/user.svg b/src/assets/icons/svg/user.svg
new file mode 100644
index 0000000..0ba0716
--- /dev/null
+++ b/src/assets/icons/svg/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/validCode.svg b/src/assets/icons/svg/validCode.svg
new file mode 100644
index 0000000..cfb1021
--- /dev/null
+++ b/src/assets/icons/svg/validCode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/wechat.svg b/src/assets/icons/svg/wechat.svg
new file mode 100644
index 0000000..c586e55
--- /dev/null
+++ b/src/assets/icons/svg/wechat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svg/zip.svg b/src/assets/icons/svg/zip.svg
new file mode 100644
index 0000000..f806fc4
--- /dev/null
+++ b/src/assets/icons/svg/zip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/svgo.yml b/src/assets/icons/svgo.yml
new file mode 100644
index 0000000..ce5d0a9
--- /dev/null
+++ b/src/assets/icons/svgo.yml
@@ -0,0 +1,7 @@
+
+plugins:
+
+- removeAttrs:
+ attrs:
+ - 'fill'
+ - 'fill-rule'
diff --git a/src/assets/line.png b/src/assets/line.png
new file mode 100644
index 0000000..05db7f8
Binary files /dev/null and b/src/assets/line.png differ
diff --git a/src/assets/login-bg.png b/src/assets/login-bg.png
new file mode 100644
index 0000000..81a23c8
Binary files /dev/null and b/src/assets/login-bg.png differ
diff --git a/src/assets/login-logo.png b/src/assets/login-logo.png
new file mode 100644
index 0000000..1e25599
Binary files /dev/null and b/src/assets/login-logo.png differ
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000..9bfd3bc
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/assets/pic-1.png b/src/assets/pic-1.png
new file mode 100644
index 0000000..bf1a78c
Binary files /dev/null and b/src/assets/pic-1.png differ
diff --git a/src/assets/zzlogo.png b/src/assets/zzlogo.png
new file mode 100644
index 0000000..5eb7884
Binary files /dev/null and b/src/assets/zzlogo.png differ
diff --git a/src/assets/zzlogo2.png b/src/assets/zzlogo2.png
new file mode 100644
index 0000000..3cbd82a
Binary files /dev/null and b/src/assets/zzlogo2.png differ
diff --git a/src/assets/zzlogo3.png b/src/assets/zzlogo3.png
new file mode 100644
index 0000000..a2fefc7
Binary files /dev/null and b/src/assets/zzlogo3.png differ
diff --git a/src/components/Affix/index.vue b/src/components/Affix/index.vue
new file mode 100644
index 0000000..7aea99b
--- /dev/null
+++ b/src/components/Affix/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/BaseContainer/index.vue b/src/components/BaseContainer/index.vue
new file mode 100644
index 0000000..eeb7c1e
--- /dev/null
+++ b/src/components/BaseContainer/index.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
diff --git a/src/components/BaseForm/search-form.vue b/src/components/BaseForm/search-form.vue
new file mode 100644
index 0000000..dfaadf4
--- /dev/null
+++ b/src/components/BaseForm/search-form.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ ra.label }}
+
+
+
+ {{ ra.label }}
+
+
+
+ {{ ch.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
diff --git a/src/components/BaseModel/index.vue b/src/components/BaseModel/index.vue
new file mode 100644
index 0000000..ac3d730
--- /dev/null
+++ b/src/components/BaseModel/index.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
diff --git a/src/components/BaseTable/index.vue b/src/components/BaseTable/index.vue
new file mode 100644
index 0000000..1df28e4
--- /dev/null
+++ b/src/components/BaseTable/index.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ operate.name }}
+
+
+
+ {{ scope.row[column.prop] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/BoxContent/index.vue b/src/components/BoxContent/index.vue
new file mode 100644
index 0000000..886fd3d
--- /dev/null
+++ b/src/components/BoxContent/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
diff --git a/src/components/Breadcrumb/index.vue b/src/components/Breadcrumb/index.vue
new file mode 100644
index 0000000..50c958b
--- /dev/null
+++ b/src/components/Breadcrumb/index.vue
@@ -0,0 +1,76 @@
+
+
+
+
+ {{ item.meta.title }}
+ {{ item.meta.title }}
+ {{ item.meta.title }}
+
+
+
+
+
+
+
+
diff --git a/src/components/ChatForm/index.vue b/src/components/ChatForm/index.vue
new file mode 100644
index 0000000..186b4d5
--- /dev/null
+++ b/src/components/ChatForm/index.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+

+
+
+ {{ record.userName }}
+ ({{ record.chatTime }})
+
+
{{ record.contactText }}
+
+
+
+
+
+
+ {{ record.userName }}
+ ({{ record.chatTime }})
+
+
{{ record.contactText }}
+
+
+

+
+
+
+
+
+ 发送
+
+
+
+
+
diff --git a/src/components/Dicom/CustomWwwcForm.vue b/src/components/Dicom/CustomWwwcForm.vue
new file mode 100644
index 0000000..8e1f4c4
--- /dev/null
+++ b/src/components/Dicom/CustomWwwcForm.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Dicom/DicomCanvas.vue b/src/components/Dicom/DicomCanvas.vue
new file mode 100644
index 0000000..b5f9304
--- /dev/null
+++ b/src/components/Dicom/DicomCanvas.vue
@@ -0,0 +1,1160 @@
+
+
+
+
Series #{{ dicomInfo.series }}
+
Image #{{ dicomInfo.frame }}
+
{{ dicomInfo.modality }}
+
+
+
+
+
+ Pos: {{ mousePosition.x?mousePosition.x.toFixed(0):'' }}, {{ mousePosition.y?mousePosition.y.toFixed(0):'' }}
+
+
+ HU: {{ mousePosition.mo }}
+
+
+ SUVbw(g/ml): {{ mousePosition.suv.toFixed(3) }}
+
+
+ Density: {{ mousePosition.mo }}
+
+
+ W*H: {{ dicomInfo.size }}
+
+
+
Zoom: {{ dicomInfo.zoom }}
+
+
+
+
{{ stack.description }}
+
+
+
+
+
+
+
+
+
+ {{ markers.top }}
+
+
+ {{ markers.right }}
+
+
+
+ {{ markers.bottom }}
+
+
+ {{ markers.left }}
+
+
+
+
+
Location: {{ dicomInfo.location }}
+
Slice Thickness: {{ dicomInfo.thick }}mm
+
WW/WL: {{ dicomInfo.wwwc }}
+
+
+
+
+
+
+
+
diff --git a/src/components/Dicom/DicomPreview.vue b/src/components/Dicom/DicomPreview.vue
new file mode 100644
index 0000000..62d67a8
--- /dev/null
+++ b/src/components/Dicom/DicomPreview.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/src/components/Dicom/DicomViewer.vue b/src/components/Dicom/DicomViewer.vue
new file mode 100644
index 0000000..21cbbc4
--- /dev/null
+++ b/src/components/Dicom/DicomViewer.vue
@@ -0,0 +1,891 @@
+
+
+
+
+
+
+
diff --git a/src/components/DictData/index.js b/src/components/DictData/index.js
new file mode 100644
index 0000000..c56c082
--- /dev/null
+++ b/src/components/DictData/index.js
@@ -0,0 +1,21 @@
+import Vue from 'vue'
+import DataDict from '@/utils/dict'
+import { getBasicDataSelect } from '@/api/dictionary/dictionary'
+
+function install() {
+ Vue.use(DataDict, {
+ metas: {
+ '*': {
+ labelField: 'dictLabel',
+ valueField: 'dictValue',
+ request(dictMeta) {
+ return getBasicDataSelect(dictMeta.type).then(res => res.Result)
+ }
+ }
+ }
+ })
+}
+
+export default {
+ install
+}
diff --git a/src/components/DictTag/index.vue b/src/components/DictTag/index.vue
new file mode 100644
index 0000000..2989dee
--- /dev/null
+++ b/src/components/DictTag/index.vue
@@ -0,0 +1,52 @@
+
+
+
+
+ {{ item.label }}
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
diff --git a/src/components/Global/index.vue b/src/components/Global/index.vue
new file mode 100644
index 0000000..7468e23
--- /dev/null
+++ b/src/components/Global/index.vue
@@ -0,0 +1,13 @@
+
diff --git a/src/components/Hamburger/index.vue b/src/components/Hamburger/index.vue
new file mode 100644
index 0000000..368b002
--- /dev/null
+++ b/src/components/Hamburger/index.vue
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
diff --git a/src/components/IconSelect/index.vue b/src/components/IconSelect/index.vue
new file mode 100644
index 0000000..b0ec9fa
--- /dev/null
+++ b/src/components/IconSelect/index.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
diff --git a/src/components/IconSelect/requireIcons.js b/src/components/IconSelect/requireIcons.js
new file mode 100644
index 0000000..99e5c54
--- /dev/null
+++ b/src/components/IconSelect/requireIcons.js
@@ -0,0 +1,11 @@
+
+const req = require.context('../../assets/icons/svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys()
+
+const re = /\.\/(.*)\.svg/
+
+const icons = requireAll(req).map(i => {
+ return i.match(re)[1]
+})
+
+export default icons
diff --git a/src/components/Pagination/index.vue b/src/components/Pagination/index.vue
new file mode 100644
index 0000000..3199e64
--- /dev/null
+++ b/src/components/Pagination/index.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
diff --git a/src/components/PreviewFile/index.vue b/src/components/PreviewFile/index.vue
new file mode 100644
index 0000000..1c62ea2
--- /dev/null
+++ b/src/components/PreviewFile/index.vue
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:message:downloadFile') }}
+ {{ $t('common:button:download') }}
+
+
+
+
+
diff --git a/src/components/Screenfull/index.vue b/src/components/Screenfull/index.vue
new file mode 100644
index 0000000..260c90d
--- /dev/null
+++ b/src/components/Screenfull/index.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/SignForm/index.vue b/src/components/SignForm/index.vue
new file mode 100644
index 0000000..b923896
--- /dev/null
+++ b/src/components/SignForm/index.vue
@@ -0,0 +1,92 @@
+
+
+
+
+
diff --git a/src/components/Sticky/index.vue b/src/components/Sticky/index.vue
new file mode 100644
index 0000000..97ce0e9
--- /dev/null
+++ b/src/components/Sticky/index.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
diff --git a/src/components/SvgIcon/index.vue b/src/components/SvgIcon/index.vue
new file mode 100644
index 0000000..dbca903
--- /dev/null
+++ b/src/components/SvgIcon/index.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
diff --git a/src/components/TrialsSelect/index.vue b/src/components/TrialsSelect/index.vue
new file mode 100644
index 0000000..2761ed5
--- /dev/null
+++ b/src/components/TrialsSelect/index.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
{{$t('trials:trials-list:table:researchNumber')}}
+
{{ $t('trials:trials-list:table:experimentName') }}
+
+
+
+
+ {{$t('trials:trials-list:table:researchNumber')}}: {{ item.ResearchProgramNo }}
+
+ {{ $t('trials:trials-list:table:experimentName') }}: {{ item.ExperimentName }}
+
+
+
+ {{ item.ResearchProgramNo }}
+
+
+ {{ item.ExperimentName }}
+
+
+
+
+
+
+
+ {{$t('trials:trials-list:table:researchNumber')}}: {{ options.find(v => { return v.Id === tabTrialsId}) ? options.find(v => { return v.Id === tabTrialsId}).ResearchProgramNo : '' }}
+
+ {{ $t('trials:trials-list:table:experimentName') }}: {{ options.find(v => { return v.Id === tabTrialsId}) ? options.find(v => { return v.Id === tabTrialsId}).ExperimentName : '' }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/TrialsTab/index.vue b/src/components/TrialsTab/index.vue
new file mode 100644
index 0000000..09e8302
--- /dev/null
+++ b/src/components/TrialsTab/index.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:trials:title:back') }}
+
+
+
+
+
+
diff --git a/src/components/Upload/index.vue b/src/components/Upload/index.vue
new file mode 100644
index 0000000..e1c594e
--- /dev/null
+++ b/src/components/Upload/index.vue
@@ -0,0 +1,105 @@
+
+
+
+
+ Upload
+ (must be in pdf format)
+
+
+
+
+
diff --git a/src/components/UploadFile/index.vue b/src/components/UploadFile/index.vue
new file mode 100644
index 0000000..14b48db
--- /dev/null
+++ b/src/components/UploadFile/index.vue
@@ -0,0 +1,168 @@
+
+
+
+
+ Upload
+ (must be in pdf format)
+
+
+
+
+
diff --git a/src/components/UploadFiles/index.vue b/src/components/UploadFiles/index.vue
new file mode 100644
index 0000000..c7cbd53
--- /dev/null
+++ b/src/components/UploadFiles/index.vue
@@ -0,0 +1,189 @@
+
+
+
+
+ Upload
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/components/QuestionFormItem.vue b/src/components/clinicalDataQuestions/components/QuestionFormItem.vue
new file mode 100644
index 0000000..dc77328
--- /dev/null
+++ b/src/components/clinicalDataQuestions/components/QuestionFormItem.vue
@@ -0,0 +1,632 @@
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/components/QuestionTableFormItem.vue b/src/components/clinicalDataQuestions/components/QuestionTableFormItem.vue
new file mode 100644
index 0000000..7c4e443
--- /dev/null
+++ b/src/components/clinicalDataQuestions/components/QuestionTableFormItem.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+ {{ item.label }}
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+ {{ val }}
+
+
+
+ {{ question.Unit }}
+
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/components/QuestionsForm.vue b/src/components/clinicalDataQuestions/components/QuestionsForm.vue
new file mode 100644
index 0000000..8b8bf1c
--- /dev/null
+++ b/src/components/clinicalDataQuestions/components/QuestionsForm.vue
@@ -0,0 +1,395 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/components/previousFiles.vue b/src/components/clinicalDataQuestions/components/previousFiles.vue
new file mode 100644
index 0000000..074a3fc
--- /dev/null
+++ b/src/components/clinicalDataQuestions/components/previousFiles.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:uploadClinicalData:button:uploadFile') }}
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/components/previousOther.vue b/src/components/clinicalDataQuestions/components/previousOther.vue
new file mode 100644
index 0000000..ba15ecb
--- /dev/null
+++ b/src/components/clinicalDataQuestions/components/previousOther.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/components/previousRadiotherapy.vue b/src/components/clinicalDataQuestions/components/previousRadiotherapy.vue
new file mode 100644
index 0000000..80e124d
--- /dev/null
+++ b/src/components/clinicalDataQuestions/components/previousRadiotherapy.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/components/previousSurgery.vue b/src/components/clinicalDataQuestions/components/previousSurgery.vue
new file mode 100644
index 0000000..81fbd11
--- /dev/null
+++ b/src/components/clinicalDataQuestions/components/previousSurgery.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/components/uploadClinicalData.vue b/src/components/clinicalDataQuestions/components/uploadClinicalData.vue
new file mode 100644
index 0000000..a523a6c
--- /dev/null
+++ b/src/components/clinicalDataQuestions/components/uploadClinicalData.vue
@@ -0,0 +1,572 @@
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:pastTreatment') }}
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ $fd('IsPdEnum', scope.row.IsPD) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:pastSurgery') }}
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.OperationTime?moment(scope.row.OperationTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:others') }}
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:uploadClinicalData:button:downloadTemplate') }}
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/clinicalDataQuestions/index.vue b/src/components/clinicalDataQuestions/index.vue
new file mode 100644
index 0000000..19529c5
--- /dev/null
+++ b/src/components/clinicalDataQuestions/index.vue
@@ -0,0 +1,170 @@
+
+
+
+
{}">
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/element-ui/upload/index.js b/src/components/element-ui/upload/index.js
new file mode 100644
index 0000000..d53883b
--- /dev/null
+++ b/src/components/element-ui/upload/index.js
@@ -0,0 +1,8 @@
+import Upload from './src';
+
+/* istanbul ignore next */
+Upload.install = function(Vue) {
+ Vue.component(Upload.name, Upload);
+};
+
+export default Upload;
diff --git a/src/components/element-ui/upload/src/ajax.js b/src/components/element-ui/upload/src/ajax.js
new file mode 100644
index 0000000..e5744c4
--- /dev/null
+++ b/src/components/element-ui/upload/src/ajax.js
@@ -0,0 +1,85 @@
+function getError(action, option, xhr) {
+ let msg;
+ if (xhr.response) {
+ msg = `${xhr.response.error || xhr.response}`;
+ } else if (xhr.responseText) {
+ msg = `${xhr.responseText}`;
+ } else {
+ msg = `fail to post ${action} ${xhr.status}`;
+ }
+
+ const err = new Error(msg);
+ err.status = xhr.status;
+ err.method = 'post';
+ err.url = action;
+ return err;
+}
+
+function getBody(xhr) {
+ const text = xhr.responseText || xhr.response;
+ if (!text) {
+ return text;
+ }
+
+ try {
+ return JSON.parse(text);
+ } catch (e) {
+ return text;
+ }
+}
+
+export default function upload(option) {
+ if (typeof XMLHttpRequest === 'undefined') {
+ return;
+ }
+
+ const xhr = new XMLHttpRequest();
+ const action = option.action;
+
+ if (xhr.upload) {
+ xhr.upload.onprogress = function progress(e) {
+ if (e.total > 0) {
+ e.percent = e.loaded / e.total * 100;
+ }
+ option.onProgress(e);
+ };
+ }
+
+ const formData = new FormData();
+
+ if (option.data) {
+ Object.keys(option.data).forEach(key => {
+ formData.append(key, option.data[key]);
+ });
+ }
+
+ formData.append(option.filename, option.file, option.file.name);
+
+ xhr.onerror = function error(e) {
+ option.onError(e);
+ };
+
+ xhr.onload = function onload() {
+ if (xhr.status < 200 || xhr.status >= 300) {
+ return option.onError(getError(action, option, xhr));
+ }
+
+ option.onSuccess(getBody(xhr));
+ };
+
+ xhr.open('post', action, true);
+
+ if (option.withCredentials && 'withCredentials' in xhr) {
+ xhr.withCredentials = true;
+ }
+
+ const headers = option.headers || {};
+
+ for (let item in headers) {
+ if (headers.hasOwnProperty(item) && headers[item] !== null) {
+ xhr.setRequestHeader(item, headers[item]);
+ }
+ }
+ xhr.send(formData);
+ return xhr;
+}
diff --git a/src/components/element-ui/upload/src/index.vue b/src/components/element-ui/upload/src/index.vue
new file mode 100644
index 0000000..7d00568
--- /dev/null
+++ b/src/components/element-ui/upload/src/index.vue
@@ -0,0 +1,340 @@
+
diff --git a/src/components/element-ui/upload/src/upload-dragger.vue b/src/components/element-ui/upload/src/upload-dragger.vue
new file mode 100644
index 0000000..b3293c6
--- /dev/null
+++ b/src/components/element-ui/upload/src/upload-dragger.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
diff --git a/src/components/element-ui/upload/src/upload-list.vue b/src/components/element-ui/upload/src/upload-list.vue
new file mode 100644
index 0000000..42a349e
--- /dev/null
+++ b/src/components/element-ui/upload/src/upload-list.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+ {{file.name}}
+
+
+
+ {{ t('el.upload.deleteTip') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/element-ui/upload/src/upload.vue b/src/components/element-ui/upload/src/upload.vue
new file mode 100644
index 0000000..200ca0a
--- /dev/null
+++ b/src/components/element-ui/upload/src/upload.vue
@@ -0,0 +1,211 @@
+
diff --git a/src/components/videoPlayer/index.vue b/src/components/videoPlayer/index.vue
new file mode 100644
index 0000000..30d10e7
--- /dev/null
+++ b/src/components/videoPlayer/index.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
diff --git a/src/components/videos/index.vue b/src/components/videos/index.vue
new file mode 100644
index 0000000..2f13a13
--- /dev/null
+++ b/src/components/videos/index.vue
@@ -0,0 +1,180 @@
+
+
+
+
+
+ 请选择视频文件
+
+
+
+
+
+ 选择文件
+ 转码
+ 上传
+
+
+
+
+
+
diff --git a/src/const/check/index.js b/src/const/check/index.js
new file mode 100644
index 0000000..8b2ea22
--- /dev/null
+++ b/src/const/check/index.js
@@ -0,0 +1,12 @@
+import { SubjectCheckConfig } from './module/Subject'
+
+console.log(SubjectCheckConfig.moduleType)
+export const checkConfig = {
+ ModuleType: {
+ ...SubjectCheckConfig.ModuleType
+ },
+ OptType: {
+ ...SubjectCheckConfig.OptType
+ },
+ ChildrenType: ['基本信息', '状态']
+}
diff --git a/src/const/check/module/Subject.js b/src/const/check/module/Subject.js
new file mode 100644
index 0000000..dc3c4c2
--- /dev/null
+++ b/src/const/check/module/Subject.js
@@ -0,0 +1,9 @@
+export const SubjectCheckConfig = {
+ ModuleType: {
+ 'Subject': '受试者模块'
+ },
+ OptType: {
+ 'addSubject': '新增受试者',
+ 'updateSubject': '修改受试者'
+ }
+}
diff --git a/src/const/sign-code.vue b/src/const/sign-code.vue
new file mode 100644
index 0000000..4c30984
--- /dev/null
+++ b/src/const/sign-code.vue
@@ -0,0 +1,32 @@
+
diff --git a/src/directive/adaptive/adaptive.js b/src/directive/adaptive/adaptive.js
new file mode 100644
index 0000000..fe949b3
--- /dev/null
+++ b/src/directive/adaptive/adaptive.js
@@ -0,0 +1,42 @@
+import {
+ addResizeListener,
+ removeResizeListener
+} from 'element-ui/src/utils/resize-event'
+
+// 设置表格高度
+const doResize = async(el, binding, vnode) => {
+ // 获取表格Dom对象
+ const { componentInstance: $table } = await vnode
+ // 获取调用传递过来的数据
+ const { value } = binding
+ // 获取距底部距离(用于展示页码等信息)
+ const bottomOffset = (value && value.bottomOffset) || 40
+ if (!$table) return
+ // 计算列表高度并设置
+ const height = window.innerHeight - el.getBoundingClientRect().top - bottomOffset
+ // $table.layout.setMaxHeight(height)
+ $table.layout.setHeight(height)
+ // $table.maxHeight = height
+ $table.doLayout()
+}
+
+export default {
+ // 初始化设置
+ bind(el, binding, vnode) {
+ // 设置resize监听方法
+ el.resizeListener = async() => {
+ await doResize(el, binding, vnode)
+ }
+ // 绑定监听方法到addResizeListener
+ addResizeListener(window.document.body, el.resizeListener)
+ },
+ // // 绑定默认高度
+ async inserted(el, binding, vnode) {
+ await doResize(el, binding, vnode)
+ },
+ // // 销毁时设置
+ unbind(el) {
+ // 移除resize监听
+ removeResizeListener(el, el.resizeListener)
+ }
+}
diff --git a/src/directive/adaptive/index.js b/src/directive/adaptive/index.js
new file mode 100644
index 0000000..09cf542
--- /dev/null
+++ b/src/directive/adaptive/index.js
@@ -0,0 +1,16 @@
+import adaptive from './adaptive'
+
+const install = function(Vue) {
+ // 绑定v-adaptive指令
+ Vue.directive('adaptive', adaptive)
+}
+
+if (window.Vue) {
+ window['adaptive'] = adaptive
+ // eslint-disable-next-line no-undef
+ Vue.use(install)
+}
+
+adaptive.install = install
+
+export default adaptive
diff --git a/src/directive/dialogDrag.js b/src/directive/dialogDrag.js
new file mode 100644
index 0000000..ac3e7dd
--- /dev/null
+++ b/src/directive/dialogDrag.js
@@ -0,0 +1,80 @@
+import Vue from 'vue'
+
+// v-dialogDrag: 弹窗拖拽属性
+const dialogDrag = Vue.directive('dialogDrag', {
+ bind(el, binding, vnode, oldVnode) {
+ const dialogHeaderEl = el.querySelector('.el-dialog__header')
+ const dragDom = el.querySelector('.el-dialog')
+ // dialogHeaderEl.style.cursor = 'move';
+ dialogHeaderEl.style.cssText += ';cursor:move;'
+ dragDom.style.cssText += ';top:0px;'
+
+ // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
+ const sty = (function() {
+ if (window.document.currentStyle) {
+ return (dom, attr) => dom.currentStyle[attr]
+ } else {
+ return (dom, attr) => getComputedStyle(dom, false)[attr]
+ }
+ })()
+
+ dialogHeaderEl.onmousedown = (e) => {
+ // 鼠标按下,计算当前元素距离可视区的距离
+ const disX = e.clientX - dialogHeaderEl.offsetLeft
+ const disY = e.clientY - dialogHeaderEl.offsetTop
+
+ const screenWidth = document.body.clientWidth // body当前宽度
+ // const screenHeight = document.documentElement.clientHeight // 可见区域高度(应为body高度,可某些环境下无法获取)
+
+ const dragDomWidth = dragDom.offsetWidth // 对话框宽度
+ // const dragDomheight = dragDom.offsetHeight // 对话框高度
+
+ const minDragDomLeft = dragDom.offsetLeft
+ const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth
+
+ // const minDragDomTop = dragDom.offsetTop
+ // const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight
+
+ // 获取到的值带px 正则匹配替换
+ let styL = sty(dragDom, 'left')
+ let styT = sty(dragDom, 'top')
+
+ // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
+ if (styL.includes('%')) {
+ styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100)
+ styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100)
+ } else {
+ styL = +styL.replace(/\px/g, '')
+ styT = +styT.replace(/\px/g, '')
+ }
+
+ document.onmousemove = function(e) {
+ // 通过事件委托,计算移动的距离
+ let left = e.clientX - disX
+ const top = e.clientY - disY
+
+ // 边界处理
+ if (-(left) > minDragDomLeft) {
+ left = -(minDragDomLeft)
+ } else if (left > maxDragDomLeft) {
+ left = maxDragDomLeft
+ }
+
+ // if (-(top) > minDragDomTop) {
+ // top = -(minDragDomTop);
+ // } else if (top > maxDragDomTop) {
+ // top = maxDragDomTop + dragDomheight * 0.8;
+ // }
+
+ // 移动当前元素
+ dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`
+ }
+
+ document.onmouseup = function(e) {
+ document.onmousemove = null
+ document.onmouseup = null
+ }
+ }
+ }
+})
+export default dialogDrag
diff --git a/src/directive/loading/index.js b/src/directive/loading/index.js
new file mode 100644
index 0000000..6d28faf
--- /dev/null
+++ b/src/directive/loading/index.js
@@ -0,0 +1,11 @@
+import directive from './src/directive';
+import service from './src/index';
+
+export default {
+ install(Vue) {
+ Vue.use(directive);
+ Vue.prototype.$loading = service;
+ },
+ directive,
+ service
+};
diff --git a/src/directive/loading/src/directive.js b/src/directive/loading/src/directive.js
new file mode 100644
index 0000000..b16b030
--- /dev/null
+++ b/src/directive/loading/src/directive.js
@@ -0,0 +1,133 @@
+import Vue from 'vue';
+import Loading from './loading.vue';
+import { addClass, removeClass, getStyle } from 'element-ui/src/utils/dom';
+import { PopupManager } from 'element-ui/src/utils/popup';
+import afterLeave from 'element-ui/src/utils/after-leave';
+const Mask = Vue.extend(Loading);
+
+const loadingDirective = {};
+loadingDirective.install = Vue => {
+ if (Vue.prototype.$isServer) return;
+ const toggleLoading = (el, binding) => {
+ if (binding.value) {
+ Vue.nextTick(() => {
+ if (binding.modifiers.fullscreen) {
+ el.originalPosition = getStyle(document.body, 'position');
+ el.originalOverflow = getStyle(document.body, 'overflow');
+ el.maskStyle.zIndex = PopupManager.nextZIndex();
+
+ addClass(el.mask, 'is-fullscreen');
+ insertDom(document.body, el, binding);
+ } else {
+ removeClass(el.mask, 'is-fullscreen');
+
+ if (binding.modifiers.body) {
+ el.originalPosition = getStyle(document.body, 'position');
+
+ ['top', 'left'].forEach(property => {
+ const scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';
+ el.maskStyle[property] = el.getBoundingClientRect()[property] +
+ document.body[scroll] +
+ document.documentElement[scroll] -
+ parseInt(getStyle(document.body, `margin-${ property }`), 10) +
+ 'px';
+ });
+ ['height', 'width'].forEach(property => {
+ el.maskStyle[property] = el.getBoundingClientRect()[property] + 'px';
+ });
+
+ insertDom(document.body, el, binding);
+ } else {
+ el.originalPosition = getStyle(el, 'position');
+ insertDom(el, el, binding);
+ }
+ }
+ });
+ } else {
+ afterLeave(el.instance, _ => {
+ if (!el.instance.hiding) return;
+ el.domVisible = false;
+ const target = binding.modifiers.fullscreen || binding.modifiers.body
+ ? document.body
+ : el;
+ removeClass(target, 'el-loading-parent--relative');
+ removeClass(target, 'el-loading-parent--hidden');
+ el.instance.hiding = false;
+ }, 300, true);
+ el.instance.visible = false;
+ el.instance.hiding = true;
+ }
+ };
+ const insertDom = (parent, el, binding) => {
+ if (!el.domVisible && getStyle(el, 'display') !== 'none' && getStyle(el, 'visibility') !== 'hidden') {
+ Object.keys(el.maskStyle).forEach(property => {
+ el.mask.style[property] = el.maskStyle[property];
+ });
+
+ if (el.originalPosition !== 'absolute' && el.originalPosition !== 'fixed') {
+ addClass(parent, 'el-loading-parent--relative');
+ }
+ if (binding.modifiers.fullscreen && binding.modifiers.lock) {
+ addClass(parent, 'el-loading-parent--hidden');
+ }
+ el.domVisible = true;
+
+ parent.appendChild(el.mask);
+ Vue.nextTick(() => {
+ if (el.instance.hiding) {
+ el.instance.$emit('after-leave');
+ } else {
+ el.instance.visible = true;
+ }
+ });
+ el.domInserted = true;
+ } else if (el.domVisible && el.instance.hiding === true) {
+ el.instance.visible = true;
+ el.instance.hiding = false;
+ }
+ };
+
+ Vue.directive('loading', {
+ bind: function(el, binding, vnode) {
+ const textExr = el.getAttribute('element-loading-text');
+ const spinnerExr = el.getAttribute('element-loading-spinner');
+ const backgroundExr = el.getAttribute('element-loading-background');
+ const customClassExr = el.getAttribute('element-loading-custom-class');
+ const vm = vnode.context;
+ const mask = new Mask({
+ el: document.createElement('div'),
+ data: {
+ text: '拼命加载中',
+ spinner: 'el-icon-loading',
+ background: 'rgb(0, 0, 0, .3)',
+ customClass: vm && vm[customClassExr] || customClassExr,
+ fullscreen: !!binding.modifiers.fullscreen
+ }
+ });
+ el.instance = mask;
+ el.mask = mask.$el;
+ el.maskStyle = {};
+
+ binding.value && toggleLoading(el, binding);
+ },
+
+ update: function(el, binding) {
+ el.instance.setText(el.getAttribute('element-loading-text'));
+ if (binding.oldValue !== binding.value) {
+ toggleLoading(el, binding);
+ }
+ },
+
+ unbind: function(el, binding) {
+ if (el.domInserted) {
+ el.mask &&
+ el.mask.parentNode &&
+ el.mask.parentNode.removeChild(el.mask);
+ toggleLoading(el, { value: false, modifiers: binding.modifiers });
+ }
+ el.instance && el.instance.$destroy();
+ }
+ });
+};
+
+export default loadingDirective;
diff --git a/src/directive/loading/src/index.js b/src/directive/loading/src/index.js
new file mode 100644
index 0000000..a89c8b3
--- /dev/null
+++ b/src/directive/loading/src/index.js
@@ -0,0 +1,110 @@
+import Vue from 'vue';
+import loadingVue from './loading.vue';
+import { addClass, removeClass, getStyle } from 'element-ui/src/utils/dom';
+import { PopupManager } from 'element-ui/src/utils/popup';
+import afterLeave from 'element-ui/src/utils/after-leave';
+import merge from 'element-ui/src/utils/merge';
+
+const LoadingConstructor = Vue.extend(loadingVue);
+
+const defaults = {
+ text: '拼命加载中',
+ spinner: 'el-icon-loading',
+ background: 'rgb(0, 0, 0, .3)',
+ fullscreen: true,
+ body: false,
+ lock: false,
+ customClass: ''
+};
+
+let fullscreenLoading;
+
+LoadingConstructor.prototype.originalPosition = '';
+LoadingConstructor.prototype.originalOverflow = '';
+
+LoadingConstructor.prototype.close = function() {
+ if (this.fullscreen) {
+ fullscreenLoading = undefined;
+ }
+ afterLeave(this, _ => {
+ const target = this.fullscreen || this.body
+ ? document.body
+ : this.target;
+ removeClass(target, 'el-loading-parent--relative');
+ removeClass(target, 'el-loading-parent--hidden');
+ if (this.$el && this.$el.parentNode) {
+ this.$el.parentNode.removeChild(this.$el);
+ }
+ this.$destroy();
+ }, 300);
+ this.visible = false;
+};
+
+const addStyle = (options, parent, instance) => {
+ let maskStyle = {};
+ if (options.fullscreen) {
+ instance.originalPosition = getStyle(document.body, 'position');
+ instance.originalOverflow = getStyle(document.body, 'overflow');
+ maskStyle.zIndex = PopupManager.nextZIndex();
+ } else if (options.body) {
+ instance.originalPosition = getStyle(document.body, 'position');
+ ['top', 'left'].forEach(property => {
+ let scroll = property === 'top' ? 'scrollTop' : 'scrollLeft';
+ maskStyle[property] = options.target.getBoundingClientRect()[property] +
+ document.body[scroll] +
+ document.documentElement[scroll] +
+ 'px';
+ });
+ ['height', 'width'].forEach(property => {
+ maskStyle[property] = options.target.getBoundingClientRect()[property] + 'px';
+ });
+ } else {
+ instance.originalPosition = getStyle(parent, 'position');
+ }
+ Object.keys(maskStyle).forEach(property => {
+ instance.$el.style[property] = maskStyle[property];
+ });
+};
+
+const Loading = (options = {}) => {
+ if (Vue.prototype.$isServer) return;
+ options = merge({}, defaults, {text: '拼命加载中',
+ spinner: 'el-icon-loading',
+ background: 'rgb(0, 0, 0, .3)',});
+ if (typeof options.target === 'string') {
+ options.target = document.querySelector(options.target);
+ }
+ options.target = options.target || document.body;
+ if (options.target !== document.body) {
+ options.fullscreen = false;
+ } else {
+ options.body = true;
+ }
+ if (options.fullscreen && fullscreenLoading) {
+ return fullscreenLoading;
+ }
+
+ let parent = options.body ? document.body : options.target;
+ let instance = new LoadingConstructor({
+ el: document.createElement('div'),
+ data: options
+ });
+
+ addStyle(options, parent, instance);
+ if (instance.originalPosition !== 'absolute' && instance.originalPosition !== 'fixed') {
+ addClass(parent, 'el-loading-parent--relative');
+ }
+ if (options.fullscreen && options.lock) {
+ addClass(parent, 'el-loading-parent--hidden');
+ }
+ parent.appendChild(instance.$el);
+ Vue.nextTick(() => {
+ instance.visible = true;
+ });
+ if (options.fullscreen) {
+ fullscreenLoading = instance;
+ }
+ return instance;
+};
+
+export default Loading;
diff --git a/src/directive/loading/src/loading.vue b/src/directive/loading/src/loading.vue
new file mode 100644
index 0000000..c56e566
--- /dev/null
+++ b/src/directive/loading/src/loading.vue
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
diff --git a/src/directive/permission/hasPermi.js b/src/directive/permission/hasPermi.js
new file mode 100644
index 0000000..058df33
--- /dev/null
+++ b/src/directive/permission/hasPermi.js
@@ -0,0 +1,22 @@
+import store from '@/store'
+
+export default {
+ inserted(el, binding, vnode) {
+ const { value } = binding
+ const all_permission = '*:*:*'
+ const permissions = store.getters && store.getters.permissions
+ if (value && value instanceof Array && value.length > 0) {
+ const permissionFlag = value
+
+ const hasPermissions = permissions.some(permission => {
+ return all_permission === permission || permissionFlag.includes(permission)
+ })
+
+ if (!hasPermissions) {
+ el.parentNode && el.parentNode.removeChild(el)
+ }
+ } else {
+ throw new Error(`请设置操作权限标签值`)
+ }
+ }
+}
diff --git a/src/directive/permission/hasRole.js b/src/directive/permission/hasRole.js
new file mode 100644
index 0000000..3ed4810
--- /dev/null
+++ b/src/directive/permission/hasRole.js
@@ -0,0 +1,23 @@
+import store from '@/store'
+
+export default {
+ inserted(el, binding, vnode) {
+ const { value } = binding
+ const super_admin = 'admin'
+ const roles = store.getters && store.getters.roles
+
+ if (value && value instanceof Array && value.length > 0) {
+ const roleFlag = value
+
+ const hasRole = roles.some(role => {
+ return super_admin === role || roleFlag.includes(role)
+ })
+
+ if (!hasRole) {
+ el.parentNode && el.parentNode.removeChild(el)
+ }
+ } else {
+ throw new Error(`请设置角色权限标签值"`)
+ }
+ }
+}
diff --git a/src/directive/permission/index.js b/src/directive/permission/index.js
new file mode 100644
index 0000000..e3d76d3
--- /dev/null
+++ b/src/directive/permission/index.js
@@ -0,0 +1,15 @@
+import hasRole from './hasRole'
+import hasPermi from './hasPermi'
+
+const install = function(Vue) {
+ Vue.directive('hasRole', hasRole)
+ Vue.directive('hasPermi', hasPermi)
+}
+
+if (window.Vue) {
+ window['hasRole'] = hasRole
+ window['hasPermi'] = hasPermi
+ Vue.use(install); // eslint-disable-line
+}
+
+export default install
diff --git a/src/icons/index.js b/src/icons/index.js
new file mode 100644
index 0000000..6e39ed0
--- /dev/null
+++ b/src/icons/index.js
@@ -0,0 +1,10 @@
+import Vue from 'vue'
+import SvgIcon from '@/components/SvgIcon'// svg component
+
+// register globally
+Vue.component('svg-icon', SvgIcon)
+
+// eslint-disable-next-line no-undef
+const req = require.context('./svg', false, /\.svg$/)
+const requireAll = requireContext => requireContext.keys().map(requireContext)
+requireAll(req)
diff --git a/src/icons/svg/404.svg b/src/icons/svg/404.svg
new file mode 100644
index 0000000..6df5019
--- /dev/null
+++ b/src/icons/svg/404.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/admin.svg b/src/icons/svg/admin.svg
new file mode 100644
index 0000000..c53cf18
--- /dev/null
+++ b/src/icons/svg/admin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/angle.svg b/src/icons/svg/angle.svg
new file mode 100644
index 0000000..055309c
--- /dev/null
+++ b/src/icons/svg/angle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/arrow.svg b/src/icons/svg/arrow.svg
new file mode 100644
index 0000000..c5192b1
--- /dev/null
+++ b/src/icons/svg/arrow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/bidirection.svg b/src/icons/svg/bidirection.svg
new file mode 100644
index 0000000..290623e
--- /dev/null
+++ b/src/icons/svg/bidirection.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/bug.svg b/src/icons/svg/bug.svg
new file mode 100644
index 0000000..05a150d
--- /dev/null
+++ b/src/icons/svg/bug.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/build.svg b/src/icons/svg/build.svg
new file mode 100644
index 0000000..97c4688
--- /dev/null
+++ b/src/icons/svg/build.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/chart.svg b/src/icons/svg/chart.svg
new file mode 100644
index 0000000..27728fb
--- /dev/null
+++ b/src/icons/svg/chart.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/clear.svg b/src/icons/svg/clear.svg
new file mode 100644
index 0000000..3d09e94
--- /dev/null
+++ b/src/icons/svg/clear.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/clipboard.svg b/src/icons/svg/clipboard.svg
new file mode 100644
index 0000000..90923ff
--- /dev/null
+++ b/src/icons/svg/clipboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/close.svg b/src/icons/svg/close.svg
new file mode 100644
index 0000000..6ca52cf
--- /dev/null
+++ b/src/icons/svg/close.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/cobb.svg b/src/icons/svg/cobb.svg
new file mode 100644
index 0000000..0c94154
--- /dev/null
+++ b/src/icons/svg/cobb.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/component.svg b/src/icons/svg/component.svg
new file mode 100644
index 0000000..207ada3
--- /dev/null
+++ b/src/icons/svg/component.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/dClose.svg b/src/icons/svg/dClose.svg
new file mode 100644
index 0000000..a31ee1e
--- /dev/null
+++ b/src/icons/svg/dClose.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/dashboard.svg b/src/icons/svg/dashboard.svg
new file mode 100644
index 0000000..5317d37
--- /dev/null
+++ b/src/icons/svg/dashboard.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/date.svg b/src/icons/svg/date.svg
new file mode 100644
index 0000000..2a28112
--- /dev/null
+++ b/src/icons/svg/date.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/dict.svg b/src/icons/svg/dict.svg
new file mode 100644
index 0000000..4849377
--- /dev/null
+++ b/src/icons/svg/dict.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/dictionary.svg b/src/icons/svg/dictionary.svg
new file mode 100644
index 0000000..e4ca111
--- /dev/null
+++ b/src/icons/svg/dictionary.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/documentation.svg b/src/icons/svg/documentation.svg
new file mode 100644
index 0000000..7043122
--- /dev/null
+++ b/src/icons/svg/documentation.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/download.svg b/src/icons/svg/download.svg
new file mode 100644
index 0000000..c896951
--- /dev/null
+++ b/src/icons/svg/download.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/drag.svg b/src/icons/svg/drag.svg
new file mode 100644
index 0000000..4185d3c
--- /dev/null
+++ b/src/icons/svg/drag.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/druid.svg b/src/icons/svg/druid.svg
new file mode 100644
index 0000000..a2b4b4e
--- /dev/null
+++ b/src/icons/svg/druid.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/edit.svg b/src/icons/svg/edit.svg
new file mode 100644
index 0000000..d26101f
--- /dev/null
+++ b/src/icons/svg/edit.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/education.svg b/src/icons/svg/education.svg
new file mode 100644
index 0000000..7bfb01d
--- /dev/null
+++ b/src/icons/svg/education.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/email.svg b/src/icons/svg/email.svg
new file mode 100644
index 0000000..74d25e2
--- /dev/null
+++ b/src/icons/svg/email.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/example.svg b/src/icons/svg/example.svg
new file mode 100644
index 0000000..46f42b5
--- /dev/null
+++ b/src/icons/svg/example.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/excel.svg b/src/icons/svg/excel.svg
new file mode 100644
index 0000000..74d97b8
--- /dev/null
+++ b/src/icons/svg/excel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/exit-fullscreen.svg b/src/icons/svg/exit-fullscreen.svg
new file mode 100644
index 0000000..485c128
--- /dev/null
+++ b/src/icons/svg/exit-fullscreen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/eye-open.svg b/src/icons/svg/eye-open.svg
new file mode 100644
index 0000000..88dcc98
--- /dev/null
+++ b/src/icons/svg/eye-open.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/eye.svg b/src/icons/svg/eye.svg
new file mode 100644
index 0000000..16ed2d8
--- /dev/null
+++ b/src/icons/svg/eye.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/financials.svg b/src/icons/svg/financials.svg
new file mode 100644
index 0000000..7fc420b
--- /dev/null
+++ b/src/icons/svg/financials.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/firstframe.svg b/src/icons/svg/firstframe.svg
new file mode 100644
index 0000000..dcb0289
--- /dev/null
+++ b/src/icons/svg/firstframe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/fitToImage.svg b/src/icons/svg/fitToImage.svg
new file mode 100644
index 0000000..3bf71f3
--- /dev/null
+++ b/src/icons/svg/fitToImage.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/fitToWindow.svg b/src/icons/svg/fitToWindow.svg
new file mode 100644
index 0000000..cd26c61
--- /dev/null
+++ b/src/icons/svg/fitToWindow.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/form.svg b/src/icons/svg/form.svg
new file mode 100644
index 0000000..dcbaa18
--- /dev/null
+++ b/src/icons/svg/form.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/fullscreen.svg b/src/icons/svg/fullscreen.svg
new file mode 100644
index 0000000..0e86b6f
--- /dev/null
+++ b/src/icons/svg/fullscreen.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/fusion.svg b/src/icons/svg/fusion.svg
new file mode 100644
index 0000000..e20f585
--- /dev/null
+++ b/src/icons/svg/fusion.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/guide.svg b/src/icons/svg/guide.svg
new file mode 100644
index 0000000..b271001
--- /dev/null
+++ b/src/icons/svg/guide.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/hidden.svg b/src/icons/svg/hidden.svg
new file mode 100644
index 0000000..a19a56f
--- /dev/null
+++ b/src/icons/svg/hidden.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/highlight.svg b/src/icons/svg/highlight.svg
new file mode 100644
index 0000000..b1cae6b
--- /dev/null
+++ b/src/icons/svg/highlight.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/icon.svg b/src/icons/svg/icon.svg
new file mode 100644
index 0000000..82be8ee
--- /dev/null
+++ b/src/icons/svg/icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/image.svg b/src/icons/svg/image.svg
new file mode 100644
index 0000000..cddc508
--- /dev/null
+++ b/src/icons/svg/image.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/international.svg b/src/icons/svg/international.svg
new file mode 100644
index 0000000..e9b56ee
--- /dev/null
+++ b/src/icons/svg/international.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/job.svg b/src/icons/svg/job.svg
new file mode 100644
index 0000000..2a93a25
--- /dev/null
+++ b/src/icons/svg/job.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/label.svg b/src/icons/svg/label.svg
new file mode 100644
index 0000000..1c9104d
--- /dev/null
+++ b/src/icons/svg/label.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/language.svg b/src/icons/svg/language.svg
new file mode 100644
index 0000000..0082b57
--- /dev/null
+++ b/src/icons/svg/language.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/lastframe.svg b/src/icons/svg/lastframe.svg
new file mode 100644
index 0000000..f04d188
--- /dev/null
+++ b/src/icons/svg/lastframe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/layout.svg b/src/icons/svg/layout.svg
new file mode 100644
index 0000000..a3b03dc
--- /dev/null
+++ b/src/icons/svg/layout.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/length.svg b/src/icons/svg/length.svg
new file mode 100644
index 0000000..de58131
--- /dev/null
+++ b/src/icons/svg/length.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/link.svg b/src/icons/svg/link.svg
new file mode 100644
index 0000000..48197ba
--- /dev/null
+++ b/src/icons/svg/link.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/list.svg b/src/icons/svg/list.svg
new file mode 100644
index 0000000..20259ed
--- /dev/null
+++ b/src/icons/svg/list.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/lock.svg b/src/icons/svg/lock.svg
new file mode 100644
index 0000000..74fee54
--- /dev/null
+++ b/src/icons/svg/lock.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/log.svg b/src/icons/svg/log.svg
new file mode 100644
index 0000000..d879d33
--- /dev/null
+++ b/src/icons/svg/log.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/logininfor.svg b/src/icons/svg/logininfor.svg
new file mode 100644
index 0000000..267f844
--- /dev/null
+++ b/src/icons/svg/logininfor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/magnifier.svg b/src/icons/svg/magnifier.svg
new file mode 100644
index 0000000..e26033a
--- /dev/null
+++ b/src/icons/svg/magnifier.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/message.svg b/src/icons/svg/message.svg
new file mode 100644
index 0000000..14ca817
--- /dev/null
+++ b/src/icons/svg/message.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/money.svg b/src/icons/svg/money.svg
new file mode 100644
index 0000000..c1580de
--- /dev/null
+++ b/src/icons/svg/money.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/monitor.svg b/src/icons/svg/monitor.svg
new file mode 100644
index 0000000..bc308cb
--- /dev/null
+++ b/src/icons/svg/monitor.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/more.svg b/src/icons/svg/more.svg
new file mode 100644
index 0000000..ca3a35a
--- /dev/null
+++ b/src/icons/svg/more.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/move.svg b/src/icons/svg/move.svg
new file mode 100644
index 0000000..a19fc0c
--- /dev/null
+++ b/src/icons/svg/move.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/multiframe.svg b/src/icons/svg/multiframe.svg
new file mode 100644
index 0000000..115f148
--- /dev/null
+++ b/src/icons/svg/multiframe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/nested.svg b/src/icons/svg/nested.svg
new file mode 100644
index 0000000..06713a8
--- /dev/null
+++ b/src/icons/svg/nested.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/nextframe.svg b/src/icons/svg/nextframe.svg
new file mode 100644
index 0000000..c950f5f
--- /dev/null
+++ b/src/icons/svg/nextframe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/online.svg b/src/icons/svg/online.svg
new file mode 100644
index 0000000..330a202
--- /dev/null
+++ b/src/icons/svg/online.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/oval.svg b/src/icons/svg/oval.svg
new file mode 100644
index 0000000..4cbcf68
--- /dev/null
+++ b/src/icons/svg/oval.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/password.svg b/src/icons/svg/password.svg
new file mode 100644
index 0000000..e291d85
--- /dev/null
+++ b/src/icons/svg/password.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/pdf.svg b/src/icons/svg/pdf.svg
new file mode 100644
index 0000000..957aa0c
--- /dev/null
+++ b/src/icons/svg/pdf.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/people.svg b/src/icons/svg/people.svg
new file mode 100644
index 0000000..2bd54ae
--- /dev/null
+++ b/src/icons/svg/people.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/peoples.svg b/src/icons/svg/peoples.svg
new file mode 100644
index 0000000..aab852e
--- /dev/null
+++ b/src/icons/svg/peoples.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/phone.svg b/src/icons/svg/phone.svg
new file mode 100644
index 0000000..ab8e8c4
--- /dev/null
+++ b/src/icons/svg/phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/pixel.svg b/src/icons/svg/pixel.svg
new file mode 100644
index 0000000..10f2fad
--- /dev/null
+++ b/src/icons/svg/pixel.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/play.svg b/src/icons/svg/play.svg
new file mode 100644
index 0000000..e5625f3
--- /dev/null
+++ b/src/icons/svg/play.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/polygon.svg b/src/icons/svg/polygon.svg
new file mode 100644
index 0000000..4784792
--- /dev/null
+++ b/src/icons/svg/polygon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/post.svg b/src/icons/svg/post.svg
new file mode 100644
index 0000000..2922c61
--- /dev/null
+++ b/src/icons/svg/post.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/previousframe.svg b/src/icons/svg/previousframe.svg
new file mode 100644
index 0000000..3cb5f47
--- /dev/null
+++ b/src/icons/svg/previousframe.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/qq.svg b/src/icons/svg/qq.svg
new file mode 100644
index 0000000..ee13d4e
--- /dev/null
+++ b/src/icons/svg/qq.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/rectangle.svg b/src/icons/svg/rectangle.svg
new file mode 100644
index 0000000..2ffeeb2
--- /dev/null
+++ b/src/icons/svg/rectangle.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/refresh.svg b/src/icons/svg/refresh.svg
new file mode 100644
index 0000000..631fb49
--- /dev/null
+++ b/src/icons/svg/refresh.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/reverse.svg b/src/icons/svg/reverse.svg
new file mode 100644
index 0000000..d944532
--- /dev/null
+++ b/src/icons/svg/reverse.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/reversecolor.svg b/src/icons/svg/reversecolor.svg
new file mode 100644
index 0000000..126d9c0
--- /dev/null
+++ b/src/icons/svg/reversecolor.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/rotate.svg b/src/icons/svg/rotate.svg
new file mode 100644
index 0000000..d6c1e13
--- /dev/null
+++ b/src/icons/svg/rotate.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/row.svg b/src/icons/svg/row.svg
new file mode 100644
index 0000000..0780992
--- /dev/null
+++ b/src/icons/svg/row.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/search.svg b/src/icons/svg/search.svg
new file mode 100644
index 0000000..84233dd
--- /dev/null
+++ b/src/icons/svg/search.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/server.svg b/src/icons/svg/server.svg
new file mode 100644
index 0000000..ca37b00
--- /dev/null
+++ b/src/icons/svg/server.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/shopping.svg b/src/icons/svg/shopping.svg
new file mode 100644
index 0000000..87513e7
--- /dev/null
+++ b/src/icons/svg/shopping.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/show.svg b/src/icons/svg/show.svg
new file mode 100644
index 0000000..7198b65
--- /dev/null
+++ b/src/icons/svg/show.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/size.svg b/src/icons/svg/size.svg
new file mode 100644
index 0000000..ddb25b8
--- /dev/null
+++ b/src/icons/svg/size.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/skill.svg b/src/icons/svg/skill.svg
new file mode 100644
index 0000000..a3b7312
--- /dev/null
+++ b/src/icons/svg/skill.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/speaker.svg b/src/icons/svg/speaker.svg
new file mode 100644
index 0000000..456624f
--- /dev/null
+++ b/src/icons/svg/speaker.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/spin.svg b/src/icons/svg/spin.svg
new file mode 100644
index 0000000..6c44034
--- /dev/null
+++ b/src/icons/svg/spin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/star.svg b/src/icons/svg/star.svg
new file mode 100644
index 0000000..6cf86e6
--- /dev/null
+++ b/src/icons/svg/star.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/statistics.svg b/src/icons/svg/statistics.svg
new file mode 100644
index 0000000..2190e6d
--- /dev/null
+++ b/src/icons/svg/statistics.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/stop.svg b/src/icons/svg/stop.svg
new file mode 100644
index 0000000..eeb20cc
--- /dev/null
+++ b/src/icons/svg/stop.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/swagger.svg b/src/icons/svg/swagger.svg
new file mode 100644
index 0000000..05d4e7b
--- /dev/null
+++ b/src/icons/svg/swagger.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/system.svg b/src/icons/svg/system.svg
new file mode 100644
index 0000000..dba28cf
--- /dev/null
+++ b/src/icons/svg/system.svg
@@ -0,0 +1,2 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/tab.svg b/src/icons/svg/tab.svg
new file mode 100644
index 0000000..b4b48e4
--- /dev/null
+++ b/src/icons/svg/tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/table.svg b/src/icons/svg/table.svg
new file mode 100644
index 0000000..0e3dc9d
--- /dev/null
+++ b/src/icons/svg/table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/theme.svg b/src/icons/svg/theme.svg
new file mode 100644
index 0000000..5982a2f
--- /dev/null
+++ b/src/icons/svg/theme.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/tool.svg b/src/icons/svg/tool.svg
new file mode 100644
index 0000000..d684718
--- /dev/null
+++ b/src/icons/svg/tool.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/tree-table.svg b/src/icons/svg/tree-table.svg
new file mode 100644
index 0000000..8aafdb8
--- /dev/null
+++ b/src/icons/svg/tree-table.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/tree.svg b/src/icons/svg/tree.svg
new file mode 100644
index 0000000..dd4b7dd
--- /dev/null
+++ b/src/icons/svg/tree.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/trial.svg b/src/icons/svg/trial.svg
new file mode 100644
index 0000000..a0fc89c
--- /dev/null
+++ b/src/icons/svg/trial.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/user.svg b/src/icons/svg/user.svg
new file mode 100644
index 0000000..0ba0716
--- /dev/null
+++ b/src/icons/svg/user.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/validCode.svg b/src/icons/svg/validCode.svg
new file mode 100644
index 0000000..cfb1021
--- /dev/null
+++ b/src/icons/svg/validCode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/view.svg b/src/icons/svg/view.svg
new file mode 100644
index 0000000..ad7308c
--- /dev/null
+++ b/src/icons/svg/view.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/wechat.svg b/src/icons/svg/wechat.svg
new file mode 100644
index 0000000..c586e55
--- /dev/null
+++ b/src/icons/svg/wechat.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/wwwcRegion.svg b/src/icons/svg/wwwcRegion.svg
new file mode 100644
index 0000000..decb351
--- /dev/null
+++ b/src/icons/svg/wwwcRegion.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/zip.svg b/src/icons/svg/zip.svg
new file mode 100644
index 0000000..f806fc4
--- /dev/null
+++ b/src/icons/svg/zip.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svg/zoom.svg b/src/icons/svg/zoom.svg
new file mode 100644
index 0000000..183cde4
--- /dev/null
+++ b/src/icons/svg/zoom.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/icons/svgo.yml b/src/icons/svgo.yml
new file mode 100644
index 0000000..d11906a
--- /dev/null
+++ b/src/icons/svgo.yml
@@ -0,0 +1,22 @@
+# replace default config
+
+# multipass: true
+# full: true
+
+plugins:
+
+ # - name
+ #
+ # or:
+ # - name: false
+ # - name: true
+ #
+ # or:
+ # - name:
+ # param1: 1
+ # param2: 2
+
+- removeAttrs:
+ attrs:
+ - 'fill'
+ - 'fill-rule'
diff --git a/src/lang/en.js b/src/lang/en.js
new file mode 100644
index 0000000..54e7146
--- /dev/null
+++ b/src/lang/en.js
@@ -0,0 +1,2401 @@
+/* eslint-disable */
+export default {
+ 'common:button:search': `Search`,
+ 'common:button:reset': `Reset`,
+ 'common:button:save': `Save`,
+ 'common:button:cancel': `Cancel`,
+ 'common:button:new': `New`,
+ 'common:button:add': `Add`,
+ 'common:button:edit': `Edit`,
+ 'common:button:delete': `Delete`,
+ 'common:button:remove': `Remove`,
+ 'common:button:sign': `Sign`,
+ 'common:button:export': `Export`,
+ 'common:button:submit': `Submit`,
+ 'common:button:download': `Download`,
+ 'common:button:upload': `Upload`,
+ 'common:button:confirm': `Confirm`,
+ 'common:button:close': `Close`,
+ 'common:button:batchDelete': `Batch Delete`,
+ 'common:button:preview': `Preview`,
+ 'common:button:view': `View`,
+ 'common:button:downloadTpl': `Download Template`,
+ 'common:action:action': `Action`,
+ 'common:ruleMessage:specify': `Please specify!`,
+ 'common:ruleMessage:select': `Please select!`,
+ 'common:ruleMessage:maxLength': `The maximum length is`,
+ 'common:message:savedSuccessfully': `Saved successfully!`,
+ 'common:message:deletedSuccessfully': `Deleted successfully!`,
+ 'common:message:removedSuccessfully': `Removed successfully!`,
+ 'common:message:addedSuccessfully': `Added successfully!`,
+ 'common:message:updatedSuccessfully': `Updated successfully!`,
+ 'common:message:signSuccessfully': `Signed successfully!`,
+ 'common:message:signTip': `Please read the document carefully before signing.`,
+ 'common:dialogTitle:sign': `Sign`,
+ 'common:label:sign': `Current User ID:`,
+ 'common:form:sign:userName': `User ID`,
+ 'common:form:sign:password': `Password`,
+ 'common:message:signWarning': `Incorrect user ID!`,
+ 'common:message:downloadFile': `This file cannot be previewed online.`,
+ 'common:placeholder:selectorsearch': `Select or Search`,
+ 'common:placeholder:select': `Select`,
+ 'common:title:languageType': `Language`,
+ 'common:title:error': `Error`,
+ 'common:title:goHome': `Return`,
+ 'trials:trials-list:table:trialId': `Trial ID`,
+ 'trials:trials-list:table:experimentName': `Study Name`,
+ 'trials:trials-list:table:researchNumber': `Protocol ID`,
+ 'trials:trials-list:table:sponsor': `Sponsor`,
+ 'trials:trials-list:table:isDeleted': `Confirm to delete?`,
+ 'trials:trials-list:table:status': `Status`,
+ 'trials:trials-list:table:createDate': `Date Created`,
+ 'trials:trials-list:table:ExpetiedTaskCount': `Expedited`,
+ 'trials:trials-list:table:ReReadingApprovalCount': `Re-Read Approval`,
+ 'trials:trials-list:table:PendingReconciliationCount': `Pending Reconciliation`,
+ 'trials:trials-list:table:PendingResponseCount': `Pending Response`,
+ 'trials:trials-list:action:panel': `Details`,
+ 'trials:trials-list:action:edit': `Edit`,
+ 'trials:trials-list:action:status': `Status`,
+ 'trials:trials-list:action:abolition': `Delete`,
+ 'trials:trials-list:dialogTitle:new': `New`,
+ 'trials:trials-list:dialogTitle:edit': `Edit`,
+ 'trials:trials-list:form:trialId': `Trial ID`,
+ 'trials:trials-list:form:trialType': `Trial Type`,
+ 'trials:trials-list:form:experimentName': `Study Name`,
+ 'trials:trials-list:form:researchNumber': `Protocol ID`,
+ 'trials:trials-list:form:researchUnit': `Leading Study Site`,
+ 'trials:trials-list:form:pi': `Principal Investigator`,
+ 'trials:trials-list:form:sponsor': `Sponsor`,
+ 'trials:trials-list:form:cro': `CRO`,
+ 'trials:trials-list:form:isDeclaration': `undefined`,
+ 'trials:trials-list:form:declarationType': `Type of Application`,
+ 'trials:trials-list:form:phase': `Phase`,
+ 'trials:trials-list:form:indicationType': `Type of Indication`,
+ 'trials:trials-list:form:indication': `Indication`,
+ 'trials:trials-list:form:siteCount': `No. of Sites`,
+ 'trials:trials-list:form:visitCount': `Total Visits`,
+ 'trials:trials-list:form:patientsNum': `No. of Subjects`,
+ 'trials:trials-list:form:timePointsPerPatient': `Avg No. of Visits Per Subject`,
+ 'trials:trials-list:form:modality': `Modality`,
+ 'trials:trials-list:form:criterion': `Review Criteria`,
+ 'trials:trials-list:form:reviewType': `Review Type`,
+ 'trials:trials-list:form:reviewMode': `Read Mode`,
+ 'trials:trials-list:form:expedited': `Real-time Reading`,
+ 'trials:trials-list:form:projectCycle': `Trial Period (month)`,
+ 'trials:trials-list:form:totalReviewers': `No. of Reviewers`,
+ 'trials:trials-list:form:typeofReviewers': `Type of Reviewers`,
+ 'trials:trials-list:form:save': `Save`,
+ 'trials:trials-list:form:cancel': `Cancel`,
+ 'trials:trials-list:message:addedSuccessfully': `Added successfully!`,
+ 'trials:trials-list:message:updatedSuccessfully': `Updated successfully!`,
+ 'trials:trials-list:message:abolition': `Confirm to delete?`,
+ 'trials:trials-list:message:abolitionSuccessfully': `Deleted successfully!`,
+ 'trials:trials-list:button:abolitionCancel': `Cancel`,
+ 'trials:trials-list:button:abolitionConfirm': `Confirm`,
+ 'trials:trials-list:dialogTitle:changeStatus': `Change of Trial Status`,
+ 'trials:trials-list:label:reason': `Reason`,
+ 'trials:trials-list:button:changeStatusCancel': `Cancel`,
+ 'trials:trials-list:button:changeStatusConfirm': `Confirm`,
+ 'trials:trials-list:message:changeStatusMes1': `Once the trial status changes to Ongoing, certain configurations cannot be modified anymore.`,
+ 'trials:trials-list:message:changeStatusMes2': `Data cannot be modified if a trial is completed! `,
+ 'trials:trials-list:message:changeStatusMes3': `Data cannot be modified if a trial is paused! `,
+ 'trials:tab:recordsManage': `Document Signing`,
+ 'trials:tab:selfAttachment': `Document Signing`,
+ 'trials:self-attachment:table:fileType': `Document Type`,
+ 'trials:self-attachment:table:fileName': `File Name`,
+ 'trials:self-attachment:table:isDeleted': `Revoked`,
+ 'trials:self-attachment:table:uploadTime': `Time Uploaded`,
+ 'trials:self-attachment:table:isSign': `Signed `,
+ 'trials:self-attachment:table:signTime': `Time Signed`,
+ 'trials:self-attachment:action:preview': `Preview`,
+ 'trials:self-attachment:action:sign': `Sign`,
+ 'trials:tab:signRecords': `Signing Records`,
+ 'trials:signRecords:table:fileType': `Document Type`,
+ 'trials:signRecords:table:fileName': `File Name`,
+ 'trials:signRecords:table:fileLevel': `Document Level`,
+ 'trials:signRecords:table:isDeleted': `Revoked`,
+ 'trials:signRecords:table:uploadTime': `Time Uploaded`,
+ 'trials:signRecords:table:isSign': `Signed `,
+ 'trials:signRecords:table:user': `Signed by`,
+ 'trials:signRecords:table:userName': `User ID`,
+ 'trials:signRecords:table:userType': `User Type`,
+ 'trials:signRecords:table:confirmTime': `Time Signed`,
+ 'trials:signRecords:action:preview': `Preview`,
+ 'trials:tab:siteResearch': `Site Survey`,
+ 'trials:researchRecord:button:questionStaffs': `Site Staff`,
+ 'trials:researchRecord:button:questionLink': `Site Survey URL`,
+ 'trials:researchRecord:placeholder:contactorInfo': `Name/Email/Phone`,
+ 'trials:researchRecord:table:siteId': `Site ID`,
+ 'trials:researchRecord:table:siteName': `Site Name`,
+ 'trials:researchRecord:table:contactor': `Contact Person`,
+ 'trials:researchRecord:table:contactorPhone': `Tel`,
+ 'trials:researchRecord:table:contactorEmail': `Email`,
+ 'trials:researchRecord:table:preliminaryUser': `Primary Approver`,
+ 'trials:researchRecord:table:ReviewerUser': `Approver`,
+ 'trials:researchRecord:table:status': `Questionnaire Status`,
+ 'trials:researchRecord:table:isDeleted': `Revoked`,
+ 'trials:researchRecord:table:updateTime': `Time Updated`,
+ 'trials:researchRecord:action:view': `Examine`,
+ 'trials:researchRecord:action:abolish': `Abolish`,
+ 'trials:researchRecord:dialogTitle:questionStaff': `Site Staff List`,
+ 'trials:researchRecord:dialogButton:sendEmail': `Send Email`,
+ 'trials:researchRecord:message:createLinkSuccessfully': `URL to the site survey questionnaire is generated successfully!`,
+ 'trials:researchRecord:label:link': `URL:`,
+ 'trials:researchRecord:button:copyLink': `Copy the URL`,
+ 'trials:researchRecord:message:abolish': `Confirm to revoke?`,
+ 'trials:researchRecord:message:abolishSuccessfully': `Saved Successfully!`,
+ 'trials:researchRecord:message:researchFormLink': `Site Survey URL`,
+ 'trials:researchRecord:message:copySuccessfully': `Copied Successfully`,
+ 'trials:researchRecord:message:copyFailed': `Copy Failed`,
+ 'trials:researchStaff:table:siteId': `Site ID`,
+ 'trials:researchStaff:table:siteName': `Site Name`,
+ 'trials:researchStaff:table:Name': `Name`,
+ 'trials:researchStaff:table:role': `Role`,
+ 'trials:researchStaff:table:phone': `Tel`,
+ 'trials:researchStaff:table:email': `Email`,
+ 'trials:researchStaff:table:organization': `Affiliation`,
+ 'trials:researchStaff:table:isGenerateAccount': `Create an account?`,
+ 'trials:researchStaff:table:userType': `User Type`,
+ 'trials:researchStaff:table:status': `Status`,
+ 'trials:researchStaff:table:isJoin': `Joined`,
+ 'trials:researchStaff:message:sendEmalil': `The message was sent successfully.`,
+ 'trials:researchForm:title:question': `Site Survey Questionnaire`,
+ 'trials:researchForm:form:trialId': `Trial ID`,
+ 'trials:researchForm:form:researchNo': `Protocol ID`,
+ 'trials:researchForm:form:researchName': `Study Name`,
+ 'trials:researchForm:form:decleareType': `Type of Indication`,
+ 'trials:researchForm:form:siteName': `Site Name`,
+ 'trials:researchForm:form:siteId': `Site ID`,
+ 'trials:researchForm:button:updateQsForm': `Update the Site Checklist`,
+ 'trials:researchForm:button:cancelUpdateQsForm': `Cancel to update the Site Checklist`,
+ 'trials:researchForm:form:originalEmail': `Email address of the Site Checklist Author`,
+ 'trials:researchForm:form:contactorEmail': `Email`,
+ 'trials:researchForm:form:verifyCode': `Verification Code`,
+ 'trials:researchForm:form:contactor': `Contact Person`,
+ 'trials:researchForm:form:contactorPhone': `Tel`,
+ 'trials:researchForm:form:contactorEmail': `Email`,
+ 'trials:researchForm:form:engravingCycle': `Average days to burn DICOM disks`,
+ 'trials:researchForm:form:isQualified': `Please confirm that technologists participating in this trial’s image acquisitions have the required certification & licensure.`,
+ 'trials:researchForm:form:notQualifiedReason': `Reason`,
+ 'trials:researchForm:form:staffType': `Type of physicians for assessments at this trial site`,
+ 'trials:researchForm:form:isFollowStudyParam': `Image acquisitions strictly follow Site Image Manual`,
+ 'trials:researchForm:form:notFollowStudyParam': `Reasons for not strictly following Site Image Manual`,
+ 'trials:researchForm:button:send': `Send`,
+ 'trials:researchForm:button:verifyCode': `Verification Code`,
+ 'trials:researchForm:formRule:phone': `Invalid Tel.`,
+ 'trials:researchForm:formRule:email': `Invalid email address`,
+ 'trials:researchForm:formRule:maxLength': `The maximum length is 50`,
+ 'trials:researchForm:formRule:specify': `Please specify`,
+ 'trials:researchForm:formRule:select': `Please Select`,
+ 'trials:researchForm:button:submit': `Submit`,
+ 'trials:researchForm:button:auditPasses': `Approve`,
+ 'trials:researchForm:button:auditRejected': `Reject`,
+ 'trials:researchForm:button:historicalRecord': `undefined`,
+ 'trials:researchForm:title:researchSurveyStatus': `Questionnaire Status:`,
+ 'trials:researchForm:dialogTitle:reject': `Reject`,
+ 'trials:researchForm:form:rejectReson': `Reason for Rejection`,
+ 'trials:researchForm:message:saveWarning': `There must be one personnel record or modality record at least.`,
+ 'trials:researchForm:message:saveWarning1': `undefined`,
+ 'trials:researchForm:message:saveWarning2': `undefined`,
+ 'trials:researchForm:message:submitWarning': `Confirm to submit?`,
+ 'trials:researchForm:message:auditWarning': `Confirm to approve?`,
+ 'trials:researchForm:button:loginOut': `Log out`,
+ 'trials:staffResearch:title:staff': `Staff Information Collection`,
+ 'trials:staffResearch:title:historicalStaff': `undefined`,
+ 'trials:staffResearch:title:newStaff': `undefined`,
+ 'trials:staffResearch:form:originalState': `undefined`,
+ 'trials:staffResearch:form:updateState': `undefined`,
+ 'trials:staffResearch:form:lastName': `Last Name`,
+ 'trials:staffResearch:form:firstName': `First Name`,
+ 'trials:staffResearch:form:name': `Name`,
+ 'trials:staffResearch:form:role': `Role`,
+ 'trials:staffResearch:form:phone': `Tel`,
+ 'trials:staffResearch:form:email': `Email`,
+ 'trials:staffResearch:form:organization': `Affiliation`,
+ 'trials:staffResearch:form:isGenerate': `Create an account?`,
+ 'trials:staffResearch:form:userType': `User Type`,
+ 'trials:staffResearch:form:status': `Joined`,
+ 'trials:staffResearch:form:isSuccess': `Created account successfully?`,
+ 'trials:staffResearch:dialogTitle:add': `Add`,
+ 'trials:staffResearch:dialogTitle:edit': `Edit`,
+ 'trials:staffResearch:message:confirmDel': `Confirm to delete?`,
+ 'trials:staffResearch:message:delSuccessfully': `Deleted successfully!`,
+ 'trials:equiptResearch:title:equiptResearch': `Modality Information Collection`,
+ 'trials:equiptResearch:form:equipment': `Modality`,
+ 'trials:equiptResearch:form:param': `Specification`,
+ 'trials:equiptResearch:form:manufacturer': `Manufacturer`,
+ 'trials:equiptResearch:form:model': `Model`,
+ 'trials:equiptResearch:dialogTitle:add': `Add`,
+ 'trials:equiptResearch:dialogTitle:edit': `Edit`,
+ 'trials:equiptResearch:message:confirmDel': `Confirm to delete?`,
+ 'trials:equiptResearch:message:delSuccessfully': `Deleted successfully!`,
+ 'trials:equiptResearch:form:remark': `Note`,
+ 'trials:equiptResearch:form:precautions': `Note`,
+ 'trials:equiptResearch:form:item1': `Whenever possible, please make sure that images of each subject are acquired through the above imaging modality(modalities).`,
+ 'trials:equiptResearch:form:item2': `Please make sure that scaning parameters for each subjeect are kept consistent throughtout the entire trial.`,
+ 'trials:equiptResearch:form:item3': `za`,
+ 'trials:equiptResearch:form:item4': `Please keep the original (non-compressed, non-reconstructed) data.`,
+ 'trials:tab:seletctedReviews': `Reviewer Selection`,
+ 'trials:seletctedReviews:title:trialInfor': `Trial Information`,
+ 'trials:seletctedReviews:title:enrollment': `Enrollment
+`,
+ 'trials:seletctedReviews:timeline:selection': `Select`,
+ 'trials:seletctedReviews:timeline:submission': `Submit`,
+ 'trials:seletctedReviews:timeline:approval': `Approve`,
+ 'trials:seletctedReviews:timeline:confirmation': `Confirm`,
+ 'trials:seletctedReviews:form:modality': `Modality`,
+ 'trials:seletctedReviews:form:subspeciality': `Sub-Specialty`,
+ 'trials:seletctedReviews:form:position': `Position`,
+ 'trials:seletctedReviews:form:rank': `Professional Title`,
+ 'trials:seletctedReviews:form:institution': `Institution`,
+ 'trials:seletctedReviews:table:name': `Name`,
+ 'trials:seletctedReviews:table:nameCN': `Name CN`,
+ 'trials:seletctedReviews:table:id': `User ID`,
+ 'trials:seletctedReviews:table:status': `Status`,
+ 'trials:seletctedReviews:table:submitted': `No. of Submissions`,
+ 'trials:seletctedReviews:table:approved': `No. of Approvals`,
+ 'trials:seletctedReviews:table:reading': `In Reading`,
+ 'trials:seletctedReviews:table:specialty': `Speciality`,
+ 'trials:seletctedReviews:table:subspecialty': `Sub-Speciality`,
+ 'trials:seletctedReviews:table:institution': `Institution`,
+ 'trials:seletctedReviews:table:city': `City`,
+ 'trials:seletctedReviews:table:country': `Country`,
+ 'trials:seletctedReviews:table:selector': `Selected by`,
+ 'trials:seletctedReviews:table:selectionTime': `Time Selected `,
+ 'trials:seletctedReviews:table:submitter': `Submited by`,
+ 'trials:seletctedReviews:table:submissionTime': `Time Submited `,
+ 'trials:seletctedReviews:table:approver': `Approved by`,
+ 'trials:seletctedReviews:table:approvalTime': `Time Approved`,
+ 'trials:seletctedReviews:table:confirmor': `Confirmed by`,
+ 'trials:seletctedReviews:table:confirmationTime': `Time Confirmed`,
+ 'trials:seletctedReviews:label:language': `Language`,
+ 'trials:seletctedReviews:button:select': `Select`,
+ 'trials:seletctedReviews:button:submissionDownAll': `Download`,
+ 'trials:seletctedReviews:button:submissionDown': `Download`,
+ 'trials:seletctedReviews:button:submit': `Submit`,
+ 'trials:seletctedReviews:button:approve': `Approve`,
+ 'trials:seletctedReviews:button:confirm': `Confirm`,
+ 'trials:seletctedReviews:message:msg1': `Confirm the selection?`,
+ 'trials:seletctedReviews:message:msg2': `Confirm?`,
+ 'trials:seletctedReviews:title:language': `Language`,
+ 'trials:enrolledReviews:button:tackNum': `Workload (Pending/Completed/Total)`,
+ 'trials:spmAudit:button:agree': `Agree`,
+ 'trials:spmAudit:button:reject': `Reject`,
+ 'trials:spmAudit:button:influenceList': `Affected Read Queue`,
+ 'trials:spmAudit:title:rejected': `Reject`,
+ 'trials:spmAudit:title:rejectedReason': `Reasons of rejection`,
+ 'trials:spmAudit:title:title1': `Read Queue Affected by rejection`,
+ 'trials:spmAudit:title:title2': `Affected Read Queue`,
+ 'trials:spmAudit:title:title3': `Return Application Submitted!`,
+ 'trials:spmAudit:title:title4': `Agree to Return`,
+ 'trials:spmAudit:title:title5': `Reject to Return`,
+ 'trials:spmEnroll:title:userList': `Reviewer Candidates`,
+ 'trials:spmEnroll:table:blindNameCN': `Name CN`,
+ 'trials:spmEnroll:table:blindName': `Name`,
+ 'trials:spmEnroll:table:specialityId': `Speciality`,
+ 'trials:spmEnroll:table:subspecialityIds': `Sub-Speciality`,
+ 'trials:spmEnroll:table:submmitUserName': `Submitted by`,
+ 'trials:spmEnroll:table:submmitTime': `Time Submitted`,
+ 'trials:spmEnroll:table:optUserName': `Approved by`,
+ 'trials:spmEnroll:table:optTimeStr': `Time Approved`,
+ 'trials:spmEnroll:button:view': `Read Candidate's CV`,
+ 'trials:spmEnroll:button:agree': `Agree`,
+ 'trials:spmEnroll:title:msg1': `Confirm the approval?`,
+ 'trials:tab:enrolledReviews': `Reviewers`,
+ 'trials:enrolledReviews:table:name': `Name`,
+ 'trials:enrolledReviews:table:nameCN': `Name CN`,
+ 'trials:enrolledReviews:table:userName': `User ID`,
+ 'trials:enrolledReviews:table:enrollmentTime': `Time Enrolled`,
+ 'trials:enrolledReviews:table:enable': `Enable`,
+ 'trials:enrolledReviews:table:disable': `Disable `,
+ 'trials:enrolledReviews:table:id': `ID`,
+ 'trials:enrolledReviews:table:status': `Status`,
+ 'trials:enrolledReviews:table:training': `Training`,
+ 'trials:enrolledReviews:table:refresherTraining': `Retraining`,
+ 'trials:enrolledReviews:table:tp': `Time Point`,
+ 'trials:enrolledReviews:table:tpRegular': `Regular`,
+ 'trials:enrolledReviews:table:tp48H': `48 hours expedited`,
+ 'trials:enrolledReviews:table:tp24H': `24 hours expedited`,
+ 'trials:enrolledReviews:table:ad': `Adjudication`,
+ 'trials:enrolledReviews:table:adRegular': `Regular`,
+ 'trials:enrolledReviews:table:ad48H': `48 hours expedited`,
+ 'trials:enrolledReviews:table:ad24H': `24 hours expedited`,
+ 'trials:enrolledReviews:table:gl': `Global Review`,
+ 'trials:enrolledReviews:table:downtime': `Downtime`,
+ 'trials:enrolledReviews:table:readingType': `Review Type`,
+ 'trials:enrolledReviews:table:ackOfSow': `ACK of SOW`,
+ 'trials:enrolledReviews:table:action': `Operate`,
+ 'trials:enrolledReviews:button:config': `Config`,
+ 'trials:enrolledReviews:button:view': `View`,
+ 'trials:enrolledReviews:button:delete': `Delete`,
+ 'trials:enrolledReviews:button:upload': `Upload`,
+ 'trials:enrolledReviews:action:stats': `Count`,
+ 'trials:enrolledReviews:label:notUpload': `Not uploaded`,
+ 'trials:enrolledReviews:label:enrolled': `Enrolled`,
+ 'trials:enrolledReviews:label:outOfEnrollment': `Out of Enrollment`,
+ 'trials:enrolledReviews:label:enrollmentStatus': `Status of Enrollment`,
+ 'trials:enrolledReviews:label:outOfEnrollmentTime': `Time of Out of Enrollment`,
+ 'trials:enrolledReviews:label:mustBepdf': `It must be in PDF format.`,
+ 'trials:enrolledReviews:dialogTitle:changeStatus': `Edit the status of Reviewer`,
+ 'trials:enrolledReviews:label:enrollmentStaus': `Status of Enrollment`,
+ 'trials:enrolledReviews:dialogTitle:changeReadingType': `Config Review Type`,
+ 'trials:enrolledReviews:dialogTitle:signedAckOfSow': `Signed ACK of SOW`,
+ 'trials:enrolledReviews:message:statsWarning': `Ack-Sow has not been uploaded. Do you want to continue?`,
+ 'trials:enrolledReviews:message:uploadSowWaring1': `Only 1 file is allowed to be uploaded.`,
+ 'trials:enrolledReviews:message:deleteSOWWarning': `Confirm to delete?`,
+ 'trials:enrolledReviews:message:SOW': `Prior Reading Experience Statement `,
+ 'trials:enrolledReviews:message:EQC': `Enrollment Qualification Confirmation`,
+ 'trials:stats:form:name': `Name`,
+ 'trials:stats:form:source': `Source`,
+ 'trials:stats:form:beginMonth': `Start Month`,
+ 'trials:stats:form:endMonth': `End Month`,
+ 'trials:stats:table:month': `Month`,
+ 'trials:stats:table:action': `Operate`,
+ 'trials:stats:action:add': `Add`,
+ 'trials:stats:action:reset': `Reset`,
+ 'trials:stats:action:edit': `Edit`,
+ 'trials:stats:action:del': `Delete`,
+ 'trials:stats:form:expedited': `Real-time Reading`,
+ 'trials:stats:form:dispalyAll': `Show all`,
+ 'trials:stats:form:workmonth': `Working Month`,
+ 'trials:stats:form:workdate': `Working Date`,
+ 'trials:stats:dialogTitle:add': `Add`,
+ 'trials:stats:dialogTitle:edit': `Edit`,
+ 'trials:stats:message:del': `Confirm to delete?`,
+ 'trials:stats:message:reset': `Confirm to reset?`,
+ 'trials:stats:message:training': `The training data from customers is:`,
+ 'trials:stats:message:refresherTraining': `The retraining data from the customer is:`,
+ 'trials:stats:message:tp': `TP from the customer is:`,
+ 'trials:stats:message:tp48H': `TP(48-hour) from the customer is:`,
+ 'trials:stats:message:tp24H': `TP(24-hour) from the customer is:`,
+ 'trials:stats:message:ad': `The Adjudication data from the customer is:`,
+ 'trials:stats:message:ad48H': `The 48-hour Adjudication data from the customer is:`,
+ 'trials:stats:message:ad24H': `The 24-hour Adjudication data from the customer is:`,
+ 'trials:stats:message:global': `The global review data from the customer is:`,
+ 'trials:stats:message:downtime': `The downtime data from the customer is:`,
+ 'trials:stats:message:editWorkload': `There is data in current date existed. Confirm to edit?`,
+ 'trials:stats:message:editWorkloadWarning1': `The workload cannot all be 0.`,
+ 'trials:stats:message:editWorkloadWarning2': `The workload data is incorrect. Are you sure to save it?`,
+ 'trials:tab:trialSummary': `Trial Summary`,
+ 'trials:tab:trialInfo': `Trial Information`,
+ 'trials:tab:auditRecord': `Trace Audit`,
+ 'trials:auditRecord:table:researchNo': `Protocol`,
+ 'trials:auditRecord:table:siteNo': `Site ID`,
+ 'trials:auditRecord:table:subject': `Subject`,
+ 'trials:auditRecord:table:visit': `Visit`,
+ 'trials:auditRecord:table:taskName': `Read Name`,
+ 'trials:auditRecord:table:taskBlindName': `Blind Read Mark`,
+ 'trials:auditRecord:table:criterion': `Review Criteria`,
+ 'trials:auditRecord:table:funcModule': `Function Module`,
+ 'trials:auditRecord:table:operationName': `Operation Name`,
+ 'trials:auditRecord:table:modifyReason': `Modify Reason`,
+ 'trials:auditRecord:table:isSign': `Signed`,
+ 'trials:auditRecord:table:operator': `Operator`,
+ 'trials:auditRecord:table:userName': `User ID`,
+ 'trials:auditRecord:table:role': `Role`,
+ 'trials:auditRecord:table:operateTime': `Date Operated`,
+ 'trials:auditRecord:action:detail': `Detail`,
+ 'trials:auditRecord:title:historicalOperations': `Previous Operation of the Same Object`,
+ 'trials:auditRecord:title:relationOperations': `Associated Operation of the Same Object`,
+ 'trials:auditRecord:title:fieldName': `Field Name`,
+ 'trials:auditRecord:title:fieldValue': `Value`,
+ 'trials:auditRecord:title:beforeDeletion': `Before Deleted`,
+ 'trials:auditRecord:title:beforeModification': `Before Modified`,
+ 'trials:auditRecord:title:afterDeletion': `After Deleted`,
+ 'trials:auditRecord:title:afterModification': `After Modified`,
+ 'trials:auditRecord:title:viewDetail': `View Detail`,
+ 'trials:auditRecord:title:viewImage': `View Image`,
+ 'trials:auditRecord:title:signInfo': `Signature Information`,
+ 'trials:auditRecord:title:viewRelationOperations': `Review Associated Operation`,
+ 'trials:auditRecord:title:signInfo2': `Signature Information`,
+ 'trials:tab:uploadMonitor': `Upload Monitoring`,
+ 'trials:uploadMonitor:table:siteId': `Site ID`,
+ 'trials:uploadMonitor:table:subjectId': `Subject ID`,
+ 'trials:uploadMonitor:table:visitName': `Visit Name`,
+ 'trials:uploadMonitor:table:studyId': `Study ID`,
+ 'trials:uploadMonitor:table:imageType': `Modality`,
+ 'trials:uploadMonitor:table:uploader': `Uploader`,
+ 'trials:uploadMonitor:table:ip': `IP `,
+ 'trials:uploadMonitor:table:beginTime': `Time Started`,
+ 'trials:uploadMonitor:table:endTime': `Time Ended `,
+ 'trials:uploadMonitor:table:totalTime': `Total Time Spent`,
+ 'trials:uploadMonitor:table:fileCount': `No. of files`,
+ 'trials:uploadMonitor:table:fileSize': `Size of files`,
+ 'trials:uploadMonitor:table:isRepetition': `Files Repeated`,
+ 'trials:uploadMonitor:table:uploadStatus': `Uploaded`,
+ 'trials:uploadMonitor:table:remark': `Note`,
+ 'trials:uploadMonitor:table:uploadInterval': `Time Taken for Uploading`,
+ 'trials:uploadMonitor:table:archiveInterval': `Time Taken for Archiving`,
+ 'trials:tab:login-log': `undefined`,
+ 'trials:loginLog:table:optType': `undefined`,
+ 'trials:loginLog:table:incorrectUserName': `undefined`,
+ 'trials:loginLog:table:userName': `undefined`,
+ 'trials:loginLog:table:userType': `undefined`,
+ 'trials:loginLog:table:optUserName': `undefined`,
+ 'trials:loginLog:table:optUserType': `undefined`,
+ 'trials:loginLog:table:createTime': `undefined`,
+ 'trials:loginLog:table:beginTime': `undefined`,
+ 'trials:loginLog:table:endTime': `undefined`,
+ 'trials:tab:site': `Sites`,
+ 'trials:site:table:siteId': `Site ID`,
+ 'trials:site:table:site': `Site Name`,
+ 'trials:site:table:city': `City`,
+ 'trials:site:table:country': `Country`,
+ 'trials:site:table:subjects': `No. of Subjects`,
+ 'trials:site:table:visits': `No. of Visits`,
+ 'trials:site:table:staff': `Site Staff`,
+ 'trials:site:table:name': `Name`,
+ 'trials:site:table:userType': `User Type`,
+ 'trials:site:table:organization': `Affiliation`,
+ 'trials:site:table:phone': `Tel`,
+ 'trials:site:table:dataAssigned': `Time Authorized`,
+ 'trials:site:table:status': `Status`,
+ 'trials:site:table:deletedTime': `Time Disabled`,
+ 'trials:site:dialogTitle:staff': `Staff`,
+ 'trials:tab:subject': `Subjects`,
+ 'trials:subject:table:site': `Site ID`,
+ 'trials:subject:table:subjectId': `Subject ID`,
+ 'trials:subject:table:medicalNo': `Second ID of Subject`,
+ 'trials:subject:table:firstGiveMedicineTime': `Visit Start Date`,
+ 'trials:subject:table:status': `Status`,
+ 'trials:subject:table:totalVisitCount': `Total Visits`,
+ 'trials:subject:table:inPlanVisitCount': `Planned Visits`,
+ 'trials:subject:table:outPlanVisitCount': `Unplanned Visits`,
+ 'trials:subject:table:totalVisitSubmmitCount': `Submitted Visits`,
+ 'trials:subject:table:isMissingImages': `Unsubmitted`,
+ 'trials:subject:table:missingSubmmitCount': `No. of Unsubmitted Visits `,
+ 'trials:subject:table:lostVisitCount': `No. of Visits Lost to Follow-Up`,
+ 'trials:subject:table:latestVisitName': `Name of Last Submitted Visit`,
+ 'trials:subject:table:age': `Age`,
+ 'trials:subject:table:gender': `Gender`,
+ 'trials:subject:table:isUrgent': `Expedited`,
+ 'trials:subject:table:outVisitDate': `Date of Ending Visit`,
+ 'trials:subject:table:finalSubjectVisit': `Final Visit`,
+ 'trials:subject:table:outVisitReason': `Reason`,
+ 'trials:subject:action:edit': `Edit`,
+ 'trials:subject:action:status': `Status`,
+ 'trials:subject:action:delete': `Delete`,
+ 'trials:subject:dialogTitle:new': `Add`,
+ 'trials:subject:dialogTitle:edit': `Edit`,
+ 'trials:subject:dialogTitle:editStatus': `Change Status `,
+ 'trials:subject:message:delete': `Confirm to delete?`,
+ 'trials:subject:title:report': `Real-Time Reports`,
+ 'trials:subject:title:addReport': `Generate Reports`,
+ 'trials:subject:title:sendReport': `Send Real-Time Reports(Subject ID:xxx)`,
+ 'trials:subject:title:send': `Send`,
+ 'trials:subject:message:sendReport': `Confirm to send the real-time report of subject xxx?`,
+ 'trials:subject:message:sendSuccessfully': `Sent successfully`,
+ 'trials:tab:readingPeriod': `undefined`,
+ 'trials:readingPeriod:table:siteCode': `Site ID`,
+ 'trials:readingPeriod:table:subjectCode': `Subject ID`,
+ 'trials:readingPeriod:table:readingPlan': `Review Schedule`,
+ 'trials:readingPeriod:table:readingType': `Review Type`,
+ 'trials:readingPeriod:table:readingName': `Review Period Name`,
+ 'trials:readingPeriod:table:readingSchedule': `Status`,
+ 'trials:readingPeriod:table:enroll': `Enroll`,
+ 'trials:readingPeriod:table:urgent': `Expedited`,
+ 'trials:readingPeriod:table:finalVisit': `Final Visit`,
+ 'trials:readingPeriod:table:pd': `PD`,
+ 'trials:readingPeriod:table:lastVisit': `Previous Visit`,
+ 'trials:readingPeriod:table:deadlineVisit': `Cutoff Visit`,
+ 'trials:readingPeriod:table:deadlineVisit2': `Cutoff Visit:`,
+ 'trials:readingPeriod:table:correspondVisit': `Corresponding Review Period`,
+ 'trials:readingPeriod:table:clinicalInfo': `Clinical Data`,
+ 'trials:readingPeriod:table:clinicalInfo2': `Clinical Data:`,
+ 'trials:readingPeriod:table:stakeholder': `Current Stakeholder`,
+ 'trials:readingPeriod:table:noCD': `No CD`,
+ 'trials:readingPeriod:buttton:addSubjectImageRP': `Add Imaging Review Period`,
+ 'trials:readingPeriod:buttton:addSubjectOncologyRP': `Add Oncology Review Period`,
+ 'trials:readingPeriod:buttton:exportSubjectTbl': `Export Subject Status Table`,
+ 'trials:readingPeriod:buttton:exportPeriodTbl': `Export Review Period Information Table`,
+ 'trials:readingPeriod:dialogTitle:addSubjectPR': `Add a Review Period`,
+ 'trials:addSubjectPR:table:rpType': `Type of Review Period`,
+ 'trials:addSubjectPR:table:rpName': `Review Period Name`,
+ 'trials:addSubjectPR:table:deadlineVisit': `Cutoff Visit`,
+ 'trials:readingPeriod:button:view': `View`,
+ 'trials:readingPeriod:dialogTitle:clinicalData': `Clinical Data`,
+ 'trials:readingPeriod:cd:table:clinicalDataName': `Name of clinical data`,
+ 'trials:readingPeriod:cd:table:dataLevel': `Data Level`,
+ 'trials:readingPeriod:cd:table:transferType': `Mode of Transmission`,
+ 'trials:readingPeriod:cd:table:fileCount': `No. of Documents`,
+ 'trials:readingPeriod:cd:action:view': `View`,
+ 'trials:readingPeriod:cd:action:sign': `Sign`,
+ 'trials:readingPeriod:cd:action:edit': `Edit`,
+ 'trials:readingPeriod:cd:action:delete': `Delete`,
+ 'trials:readingPeriod:cd:message:delete': `Confirm to delete?`,
+ 'trials:readingPeriod:cd:title:downloadTpl': `Download Template`,
+ 'trials:readingPeriod:cd:title:tips': `Tips:`,
+ 'trials:readingPeriod:cd:title:tips1': `The "xxx" for the current visit/review period is requred.Please upload the clinical data as the template after collecting, and sign it.`,
+ 'trials:readingPeriod:cd:title:tips2': `If the clinical data for the current visit/review period couldn't be collected.Please upload the balnk template and sign it.`,
+ 'trials:readingPeriod:cd:title:preview': `Clinical Data Status`,
+ 'trials:readingPeriod:cd:title:cdStatus': `Status`,
+ 'trials:readingPeriod:cd:title:cdCheck': `Verify`,
+ 'trials:readingPeriod:dialogTitle:EditSubjectPR': `Edit Review Period`,
+ 'trials:readingPeriod:verify:title:fileList': `File List`,
+ 'trials:readingPeriod:verify:title:preview': `Preview`,
+ 'trials:readingPeriod:verify:title:result': `Verification Results`,
+ 'trials:readingPeriod:verify:title:isComplete': `Completed`,
+ 'trials:readingPeriod:verify:title:isBlind': `Blinded`,
+ 'trials:readingPeriod:cd:table:fileName': `File Name`,
+ 'trials:readingPeriod:cd:action:viewFile': `Preview.`,
+ 'trials:readingPeriod:cd:action:deleteFile': `Delete`,
+ 'trials:readingPeriod:cd:form:data': `Data`,
+ 'trials:readingPeriod:cd:message:uploadFile': `Please upload the file!`,
+ 'trials:readingPeriod:button:detail': `Details`,
+ 'trials:rpDetail:dialogTitle:detail': `Details`,
+ 'trials:readingPeriod:button:delete': `Delete`,
+ 'trials:readingPeriod:button:rpManage': `Review Period Management`,
+ 'trials:rpManage:dialogTitle:setRP': `Set Review Period`,
+ 'trials:rpManage:table:readingType': `Type of Review Period`,
+ 'trials:rpManage:table:readingName': `Review Period Name`,
+ 'trials:rpManage:table:subjectRange': `Scope of Subjects`,
+ 'trials:rpManage:table:designatedSite': `Designated Site`,
+ 'trials:rpManage:table:expirationDate': `Cutoff Date`,
+ 'trials:rpManage:table:expirationVisit': `Cutoff Visit`,
+ 'trials:rpManage:table:linkedVisits': `Associated Review Period`,
+ 'trials:rpManage:table:readingStatus': `Status`,
+ 'trials:rpManage:table:effectiveTime': `Effective time`,
+ 'trials:rpManage:action:edit': `Edit`,
+ 'trials:rpManage:action:status': `Status`,
+ 'trials:rpManage:action:delete': `Delete`,
+ 'trials:rpManage:button:addImageReading': `Add Imaging Review Period`,
+ 'trials:rpManage:button:addOncologyReading': `Add Oncology Review Period`,
+ 'trials:rpManage:dialogTitle:addRP': `Add`,
+ 'trials:rpManage:dialogTitle:editRP': `Edit`,
+ 'trials:rpManage:dialogTitle:linkedRP': `Related Planed Review Period`,
+ 'trials:rpManage:dialogTitle:statusChange': `Change Status`,
+ 'trials:rpManage:message:delete': `Are you sure to delete it?`,
+ 'trials:rpManage:message:closeDialog': `The review period has not been saved. Confirm to close?`,
+ 'trials:addRP:form:sites': `Site`,
+ 'trials:addRP:form:condition': `Condition`,
+ 'trials:addRP:button:createPR': `Create Review Period`,
+ 'trials:addRP:button:confirmAddPR': `Confirm`,
+ 'trials:linkedRP:table:siteCode': `Site ID`,
+ 'trials:linkedRP:table:subjectCode': `Subject ID`,
+ 'trials:linkedRP:table:expirationVisit': `Cutoff Visit`,
+ 'trials:linkedRP:table:latestScanDate': `Lastest Scan Date`,
+ 'trials:linkedRP:table:expirationDate': `Cutoff Date`,
+ 'trials:linkedRP:table:readingName': `Review Period Name`,
+ 'trials:linkedRP:table:effectiveTime': `Time Effected`,
+ 'trials:trials-panel:subject:brainMetastasis': `Brain Metestasis`,
+ 'trials:trials-panel:form:ParticipateEvaluation': `Select for Evaluation`,
+ 'trials:subject:form:ImageSelect': `Images Selection`,
+ 'trials:subject:action:Select': `Subjects Selection`,
+ 'trials:subject:action:ImageSelect': `Images Selection`,
+ 'trials:subject:action:BatchImageSelect': `Batch Selection`,
+ 'trials:trials-panel:table:ParticipateEvaluation': `Select for Evaluation`,
+ 'trials:subject:table:ImageSelect': `Images Selection`,
+ 'trials:subject:dialogTitle:SubjectsSelect': `Subjects Selection`,
+ 'trials:subject:message:SubjectsSelect': `Plase select the subjects.`,
+ 'trials:readingPeriod:message:sureToDelete': `Confirm to delete?`,
+ 'trials:readingPeriod:title:screeningRule': `Rule of Subejcts Selection`,
+ 'trials:readingPeriod:label:IsJoinEvaluation': `Body Part of Study`,
+ 'trials:readingPeriod:value:IsJoinEvaluation': `Brain`,
+ 'trials:readingPeriod:title:visitsList': `Vists to Deal`,
+ 'trials:trials-panel:table:VisitName': `Visi Name`,
+ 'trials:trials-panel:table:EarliestScanDate': `Earliest Scan Date`,
+ 'trials:trials-panel:table:LatestScanDate': `Lastest Scan Date`,
+ 'trials:trials-panel:table:ImageFilterState': `Images Selection Status`,
+ 'trials:trials-panel:table:EarliestScanDate': `Earliest Scan Date`,
+ 'trials:subject:action:handleCreateTask': `Create Read`,
+ 'trials:readingPeriod:title:taskList': `Reads Created`,
+ 'trials:trials-panel:table:UpdateTime': `Time Ccreated`,
+ 'trials:subject:action:openReReadingOrBackList': `Return`,
+ 'trials:subject:action:handleOpenTaskAllocation': `Reads`,
+ 'trials:readingPeriod:title:taskAllocationVisible': `Reads`,
+ 'trials:readingPeriod:message:batchGenerateTask': `Create Successfully`,
+ 'trials:readingPeriod:title:study': `Study`,
+ 'trials:readingPeriod:title:series': `Series`,
+ 'trials:readingPeriod:confirm:Images': `The images cannot be modified after confirmation. Confirm to submit?`,
+ 'trials:readingPeriod:confirm:SuccessfulScreening': `Select Successfully`,
+ 'trials:tab:visit': `Visits`,
+ 'trials:tab:crcUpload': `Image Upload`,
+ 'trials:crcUpload:button:submit': `Batch Submission`,
+ 'trials:crcUpload:button:add': `Unplanned Visits`,
+ 'trials:crcUpload:table:challengeState': `Query Status`,
+ 'trials:crcUpload:table:submitState': `Submission Status`,
+ 'trials:crcUpload:table:urgent': `Expedited`,
+ 'trials:crcUpload:table:siteId': `Site ID`,
+ 'trials:crcUpload:table:subjectId': `Subject ID`,
+ 'trials:crcUpload:table:visitName': `Visit Name`,
+ 'trials:crcUpload:table:dataCollected': `Data Collected`,
+ 'trials:crcUpload:table:earliestScanDate': `Earliest Scan Date`,
+ 'trials:crcUpload:table:latestScanDate': `Lastest Scan Date`,
+ 'trials:crcUpload:table:submitState': `Submission Status`,
+ 'trials:crcUpload:table:submitTime': `Time Submitted`,
+ 'trials:crcUpload:table:auditState': `QC Status`,
+ 'trials:crcUpload:action:upload': `Upload`,
+ 'trials:crcUpload:action:submit': `Submit`,
+ 'trials:crcUpload:action:edit': `Edit`,
+ 'trials:crcUpload:action:delete': `Delete`,
+ 'trials:crcUpload:label:isNotClose': `UncClosed`,
+ 'trials:crcUpload:label:isClosed': `Closed`,
+ 'trials:crcUpload:label:lostVisit': `L`,
+ 'trials:crcUpload:label:lostVisitDetail': `Visit Lost to Follow-up`,
+ 'trials:crcUpload:label:pd': `PD`,
+ 'trials:crcUpload:label:pdDetail': `PD Confirmation`,
+ 'trials:crcUpload:label:finalVisit': `F`,
+ 'trials:crcUpload:label:finalVisitDetail': `Final Visit`,
+ 'trials:crcUpload:label:enrollmentConfirm': `EC`,
+ 'trials:crcUpload:label:enrollmentConfirmDetail': `Enrollment Confirmation`,
+ 'trials:crcUpload:label:firstGiveMedicineTime': `√`,
+ 'trials:crcUpload:label:firstGiveMedicineTimeD': `Visit start date has been set.`,
+ 'trials:crcUpload:label:dicom': `DICOM Studies`,
+ 'trials:crcUpload:label:noneDicom': `Non-DICOM Studies`,
+ 'trials:crcUpload:label:clinicalData': `Clinical Data`,
+ 'trials:crcUpload:tips:remark': `√: The visit start date has been set;
+F: The final visit;
+L: Lost visit;
+PD: PD confirmation;
+E: Enrolled confirmation`,
+ 'trials:crcUpload:message:baseDate': `The visit start date has not been set, please set it before uploading images.`,
+ 'trials:crcUpload:dialogTitle:qsRecord': `Query Record`,
+ 'trials:crcUpload:message:submit': `Confirm to submit?`,
+ 'trials:crcUpload:message:bulkSubmit': `Please confirm that there's no any unsubmitted visits before the current submisstion. If not, please submit them as soon as possible. Do you want to continue to submit?`,
+ 'trials:crcUpload:message:submittedSuccessfully': `Submitted successfully!`,
+ 'trials:crcUpload:message:deleteVisit': `Confirm to delete?`,
+ 'trials:crcUpload:message:deleteVisitSuccessfully': `Deleted successfully!`,
+ 'trials:crcUpload:dialogTitle:new': `Add`,
+ 'trials:crcUpload:dialogTitle:edit': `Edit`,
+ 'trials:crcUpload:form:siteId': `Site`,
+ 'trials:crcUpload:form:subjectId': `Subject`,
+ 'trials:crcUpload:form:visitName': `Visit`,
+ 'trials:crcUpload:form:preVisitName': `Previous Visit`,
+ 'trials:crcUpload:form:baseDateOfVisit': `Visit Start Date`,
+ 'trials:crcUpload:form:enrollmentConfirmation': `Enrollment Confirmation`,
+ 'trials:crcUpload:form:pd': `PD Confirmation`,
+ 'trials:crcUpload:form:isFinalAssessment': `Final Assessment`,
+ 'trials:crcUpload:form:isLostFollowUp': `Visit Lost to Follow-Up`,
+ 'trials:crcUpload:form:setFinalAssessment': `Note: After setting the visit as Final Visit, the subject will be removed out of enrollment and cannot be added any unplanned visits.`,
+ 'trials:crcUpload:form:setFinalAssessment1': `Set as the final visit, and the visit name is xxx.`,
+ 'trials:uploadedDicoms:tab:uploadDicoms': `DICOM Images`,
+ 'trials:uploadedDicoms:table:studyId': `Study ID`,
+ 'trials:uploadedDicoms:table:modality': `Study Type`,
+ 'trials:uploadedDicoms:table:bodyPart': `Body Part`,
+ 'trials:uploadedDicoms:table:seriesCount': `No. of Series`,
+ 'trials:uploadedDicoms:table:instanceCount': `No. of Images`,
+ 'trials:uploadedDicoms:table:studyDate': `Study Date`,
+ 'trials:uploadedDicoms:table:uploadedTime': `Time Uploaded `,
+ 'trials:uploadedDicoms:action:view': `View`,
+ 'trials:uploadedDicoms:action:delete': `Delete`,
+ 'trials:uploadedDicoms:action:preview': `Preview`,
+ 'trials:uploadedDicoms:message:deleteMes': `Confirm to delete?`,
+ 'trials:uploadedDicoms:message:deleteSuccessfully': `Deleted successfully!`,
+ 'trials:uploadedDicoms:title:dicomFilesOnly': `DICOM images only!`,
+ 'trials:uploadedDicomsicom:button:selectFolder': `Select Folder`,
+ 'trials:uploadDicomList:table:studyDetail1': `Accession Number, Modality, No. of Series, No. of Images`,
+ 'trials:uploadDicomList:table:studyDetail2': `Body Part, Description`,
+ 'trials:uploadDicomList:table:studyInfo': `Study Information`,
+ 'trials:uploadDicomList:table:patientInfo': `Patient Information`,
+ 'trials:uploadDicomList:table:pId': `Patient ID`,
+ 'trials:uploadDicomList:table:patientName': `Patient Name`,
+ 'trials:uploadDicomList:table:pInfo': `Gender, Age & D.O.B. of Patient`,
+ 'trials:uploadDicomList:table:status': `Status`,
+ 'trials:uploadDicomList:table:stats': `Total/Success/Failed`,
+ 'trials:uploadDicomList:button:exportFailed': `Export (failed file)`,
+ 'trials:uploadDicomList:button:close': `Close`,
+ 'trials:uploadDicomList:button:upload': `Upload`,
+ 'trials:uploadDicomList:message:informationConsistent': `The information in DICOM file is inconsistent with this subject.`,
+ 'trials:uploadDicomList:message:genderConsistent': `The gender of the patient is inconsistent with the gender of the subject.`,
+ 'trials:uploadDicomList:label:uploadingNotAllowed': `Validation Failed`,
+ 'trials:uploadDicomList:label:prompt': `Prompt`,
+ 'trials:uploadDicomList:label:confirm': `Confirm`,
+ 'trials:uploadDicomList:label:uploading': `Uploading`,
+ 'trials:uploadDicomList:label:uploaded': `Upload completed`,
+ 'trials:uploadDicomList:label:uploadFailed': `Upload failed`,
+ 'trials:uploadDicomList:message:archiveSuccess': `Uploaded successfully.You can view the image data after archiving.`,
+ 'trials:uploadDicomList:message:archiveSuccess': `Archiving`,
+ 'trials:uploadNonDicoms:tab:uploadNonDicoms': `Non-DICOM Image`,
+ 'trials:uploadNonDicoms:button:add': `Add`,
+ 'trials:uploadNonDicoms:button:preview': `Preview`,
+ 'trials:uploadNonDicoms:table:studyId': `Study ID`,
+ 'trials:uploadNonDicoms:table:modality': `Study Type`,
+ 'trials:uploadNonDicoms:table:bodyPart': `Body Part`,
+ 'trials:uploadNonDicoms:table:files': `No. of Images`,
+ 'trials:uploadNonDicoms:table:fileName': `File Name`,
+ 'trials:uploadNonDicoms:table:studyDate': `Study Date`,
+ 'trials:uploadNonDicoms:table:updateTime': `Time Updated`,
+ 'trials:uploadNonDicoms:action:preview': `Preview`,
+ 'trials:uploadNonDicoms:action:upload': `Upload`,
+ 'trials:uploadNonDicoms:action:edit': `Edit`,
+ 'trials:uploadNonDicoms:action:delete': `Delete`,
+ 'trials:uploadNonDicoms:dialogTitle:upload': `Upload`,
+ 'trials:uploadNonDicoms:label:fileType': `jpg/jpeg/png/bmp files only.`,
+ 'trials:uploadNonDicoms:button:selectFolder': `Select Folder`,
+ 'trials:uploadNonDicoms:button:select': `Select Files`,
+ 'trials:uploadNonDicoms:dialogTitle:preview': `Preview`,
+ 'trials:uploadNonDicoms:dialogTitle:add': `Add new`,
+ 'trials:uploadNonDicoms:dialogTitle:edit': `Edit`,
+ 'trials:uploadNonDicoms:message:delete': `Confirm to delete?`,
+ 'trials:uploadNonDicoms:message:deleteStudyAndFiles': `This examination has archived images, and to delete the examination will lead to delete all archived images in it.
+If you want to delete the images only, click the column number of "File" to delete the selected images in the pop-up list. Do you want to continue deleting this examination?`,
+ 'trials:uploadNonDicoms:message:deletedSuccessfully': `Deleted successfully!`,
+ 'trials:uploadNonDicoms:message:uploadSize': `The size of the uploaded file cannot exceed 1G.`,
+ 'trials:uploadNonDicoms:message:uploadedSuccessfully': `Upload successfully!`,
+ 'trials:uploadNonDicoms:message:exsitSameFile': `There is a file of the same name in the list: xxx.`,
+ 'trials:uploadNonDicoms:message:isContinueUpload': `This uploading will create a file of the same name. Do you want to continue?`,
+ 'trials:uploadClinicalData:tab:uploadClinicalData': `Clinical Data`,
+ 'trials:uploadClinicalData:title:historyTherapy': `Past Local Treatment History`,
+ 'trials:uploadClinicalData:title:pastTreatment': `Past Radiotherapy History`,
+ 'trials:uploadClinicalData:table:bodyPart': `Body Part`,
+ 'trials:uploadClinicalData:table:beginDate': `Start Date`,
+ 'trials:uploadClinicalData:table:endDate': `End Date`,
+ 'trials:uploadClinicalData:table:isPD': `Lesion PD`,
+ 'trials:uploadClinicalData:title:pastSurgery': `Past Surgery History`,
+ 'trials:uploadClinicalData:table:surgeryName': `Type of Surgery`,
+ 'trials:uploadClinicalData:table:surgeryDate': `Surgery Date`,
+ 'trials:uploadClinicalData:title:others': `Other Past Treatments`,
+ 'trials:uploadClinicalData:table:treatmentType': `Type of Treatment`,
+ 'trials:uploadClinicalData:table:treatmentbeginDate': `Start Date`,
+ 'trials:uploadClinicalData:table:treatmentendDate': `End Date`,
+ 'trials:uploadClinicalData:table:fileName': `File Name`,
+ 'trials:uploadClinicalData:table:uploadedTime': `Time Uploaded `,
+ 'trials:uploadClinicalData:action:preview': `Preview`,
+ 'trials:uploadClinicalData:button:selectFile': `Select`,
+ 'trials:uploadClinicalData:button:uploadFile': `Upload`,
+ 'trials:uploadClinicalData:message:uploadSuccessfully': `Upload Successfully`,
+ 'trials:uploadClinicalData:title:uploadFile': `Upload`,
+ 'trials:uploadClinicalData:button:downloadTemplate': `Download templates`,
+ 'trials:uploadClinicalData:title:table': `Table`,
+ 'components:uploadvideo:message:xf1': `Upload successfully`,
+ 'components:uploadvideo:message:xf2': `The video selected cannot be played in the browser.please click ‘Transcode’ and upload the video after transcoding.`,
+ 'components:uploadvideo:message:xf3': `The video can not be transcoded,since the page is not in the security context. Please contact the developer to configure SSL certificate`,
+ 'components:uploadvideo:message:xf4': `The video can not be transcoded,since nginx is not set up for same-source isolation. Please contact the developer to configure the Nginx request header.`,
+ 'components:uploadvideo:message:xf5': `Start transcoding. Please do not close the window or page`,
+ 'components:uploadvideo:message:xf6': `Transcod Successfully`,
+ 'components:uploadvideo:message:xf7': `The files has been read successfully.Please upload.`,
+ 'trials:uploadNonDicoms:action:xfuploadvideo': `Upload video`,
+ 'trials:uploadNonDicoms:title:xfuploadvideo': `Upload video`,
+ 'trials:uploadNonDicoms:title:xflookvideo': `View Video`,
+ 'trials:reuploadDicoms:button:applyReupload': `Apply for Re-Upload`,
+ 'trials:reuploadDicoms:button:reupload': `Re-Upload`,
+ 'trials:reuploadDicoms:button:reuploadFinished': `Re-Upload Completed`,
+ 'trials:reuploadDicoms:button:send': `Send`,
+ 'trials:tab:crcQuality': `Image Query`,
+ 'trials:crcQuestion:table:challengeCode': `Query No.`,
+ 'trials:crcQuestion:table:siteId': `Site ID`,
+ 'trials:crcQuestion:table:subjectId': `Subject ID`,
+ 'trials:crcQuestion:table:visitName': `Visit Name`,
+ 'trials:crcQuestion:table:reuploadSatus': `Re-upload Status`,
+ 'trials:crcQuestion:table:reuploadTime': `Time, Re-Upload Completed`,
+ 'trials:crcQuestion:table:createTime': `Time Created`,
+ 'trials:crcQuestion:table:deadline': `Response Deadline`,
+ 'trials:crcQuestion:table:isOverTime': `Passed Deadline`,
+ 'trials:crcQuestion:table:isClose': `Closed`,
+ 'trials:crcQuestion:table:latestMsgTime': `Latest response time`,
+ 'trials:crcQuestion:table:closedTime': `Time Closed`,
+ 'trials:crcQuestion:table:qCProcessEnum': `Review the batch`,
+ 'trials:crcQuestion:action:reply': `Reply`,
+ 'trials:crcQuestion:label:isNotClose': `Unclosed`,
+ 'trials:crcQuestion:label:isClosed': `Closed`,
+ 'trials:crcQuestion:dialogTitle:message1': `Query Record`,
+ 'trials:crcQuestion:button:applyReupload': `Apply for Re-upload`,
+ 'trials:crcQuestion:button:reupload': `Re-upload`,
+ 'trials:crcQuestion:button:reuploadCompleted': `Re-upload completed`,
+ 'trials:crcQuestion:button:send': `Send`,
+ 'trials:crcQuestion:button:close': `Close`,
+ 'trials:crcQuestion:message:applyReupload': `Confirm to apply for re-uploading?`,
+ 'trials:crcQuestion:message:applyOrUpload': `CRC apply for re-upload/upload images`,
+ 'trials:crcQuestion:message:reuploadConfirm': `Confirm the images has been re-uploaded completely?`,
+ 'trials:crcQuestion:message:reuploadFinished': `CRC has re-uploaded the images.`,
+ 'trials:crcQuestion:message:replaceTask': `The image QC has been claimed by xxx. Confirm to replace?`,
+ 'trials:crcQuestion:message:replaceTaskSuccessfully': `Replaced successfully.`,
+ 'trials:crcQuestion:button:replaceTask': `Replace`,
+ 'trials:tab:dicomsQuality': `Image QC`,
+ 'trials:qcCheck:table:isUrgent': `Expedited`,
+ 'trials:qcCheck:table:siteId': `Site ID`,
+ 'trials:qcCheck:table:subjectId': `Subject ID`,
+ 'trials:qcCheck:table:visitName': `Visit Name`,
+ 'trials:qcCheck:table:dataCollected': `Data Collected`,
+ 'trials:qcCheck:table:eScanDate': `Earliest Scan Date`,
+ 'trials:qcCheck:table:lScanDate': `Latest Scan Date`,
+ 'trials:qcCheck:table:submitTime': `Time Submitted `,
+ 'trials:qcCheck:table:auditState': `QC Status`,
+ 'trials:qcCheck:table:crrentUser': `Claimed by`,
+ 'trials:qcCheck:table:participant': `Participant`,
+ 'trials:qcCheck:table:challengeState': `Query Status`,
+ 'trials:qcCheck:table:reviewer': `Previous QCed by`,
+ 'trials:qcCheck:label:preliminary': `1st`,
+ 'trials:qcCheck:label:preliminaryAudit': `1st QC`,
+ 'trials:qcCheck:label:review': `2nd`,
+ 'trials:qcCheck:label:reviewAudit': `2nd QC`,
+ 'trials:qcCheck:button:receive': `Claim`,
+ 'trials:qcCheck:button:release': `Release`,
+ 'trials:qcCheck:button:audit': `QC`,
+ 'trials:qcCheck:button:preliminaryAudit': `1st QC`,
+ 'trials:qcCheck:button:review': `2nd QC`,
+ 'trials:qcCheck:dialogTitle:setUrgent': `Set Expedited Status`,
+ 'trials:qcCheck:message:receive': `Confirm the claim?`,
+ 'trials:qcCheck:message:release': `Confirm the release?`,
+ 'trials:qcCheck:message:receivedSuccessfully': `Claimed Successfully!`,
+ 'trials:qcCheck:message:releasedSuccessfully': `Released Successfully!`,
+ 'trials:qcCheck:message:isUrgent': `Confirm to set the expedited status as Yes?`,
+ 'trials:qcCheck:message:isNotUrgent': `Confirm to set the expedited status as No?`,
+ 'trials:qcCheck:message:delete': `Confirm to delete?`,
+ 'trials:qcCheck:message:deletedSuccessfully': `Deleted successfully!`,
+ 'trials:qcCheck:tips:remark': `End: Final Visit;
+Lost: Visits Lost to Follow up;
+PD: PD Confirmation;
+Enroll: Enrolled Confirmation`,
+ 'trials:audit:tab:dicoms': `DICOM Studies`,
+ 'trials:audit:title:dicoms': `Study Information`,
+ 'trials:audit:tip:visitWindow': `Visit Window`,
+ 'trials:audit:tip:visitWindowNotSet': `The visit start date or visit window has not been set`,
+ 'trials:audit:button:previewAllDiocms': `Preview All Images`,
+ 'trials:audit:button:previewReadingDiocms': `Preview Review Images`,
+ 'trials:audit:table:studyId': `Study ID`,
+ 'trials:audit:table:modality': `Study Type`,
+ 'trials:audit:table:modality1': `DICOM Modality`,
+ 'trials:audit:table:bodyPart': `Body Part`,
+ 'trials:audit:table:seriesCount': `No. of Series`,
+ 'trials:audit:table:instanceCount': `No. of Images`,
+ 'trials:audit:table:studyDate': `Study Date`,
+ 'trials:audit:table:studyUploadTime': `Time Uploaded `,
+ 'trials:audit:table:isReading': `Display for Review`,
+ 'trials:audit:table:isDelete': `Delete`,
+ 'trials:audit:action:preview': `Preview.`,
+ 'trials:audit:action:edit': `Edit`,
+ 'trials:audit:title:series': `Series Information`,
+ 'trials:audit:table:seriesId': `Series No.`,
+ 'trials:audit:table:seriesOfStudyId': `Study ID`,
+ 'trials:audit:table:seriesModality': `Study Type`,
+ 'trials:audit:table:seriesOfInstanceCount': `No. of Images`,
+ 'trials:audit:table:seriesOfStudyDate': `Study Date`,
+ 'trials:audit:table:seriesOfUploadedDate': `Time Uploaded `,
+ 'trials:audit:action:seriesPreview': `Preview.`,
+ 'trials:audit:action:setSeriesNotReading': `Set Display for Review as No?`,
+ 'trials:audit:action:setSeriesReading': `Set Display for Review as Yes?`,
+ 'trials:audit:action:setSeriesDeleted': `Set Delete as Yes?`,
+ 'trials:audit:action:setSeriesNoDelete': `Set Delete as No?`,
+ 'trials:audit:message:setSeriesReading': `Confirm the change?`,
+ 'trials:audit:message:setSeriesNotReading': `Confirm the change?`,
+ 'trials:audit:message:setSeriesDeleted': `Confirm the change?`,
+ 'trials:audit:message:setSeriesNoDelete': `Confirm the change?`,
+ 'trials:audit:tab:nonDicoms': `Non-DICOM Studies`,
+ 'trials:audit:title:nonDicomsTitle': `Study Information`,
+ 'trials:audit:tip:nonDicomsVisitWindow': `Visit Window`,
+ 'trials:audit:tip:nonDicomsPreviewAll': `Preview`,
+ 'trials:audit:table:nonDicomsStudyId': `Study ID`,
+ 'trials:audit:table:nonDicomsModality': `Study Type`,
+ 'trials:audit:table:nonDicomsBodypart': `Body Part`,
+ 'trials:audit:table:nonDicomsFileCount': `No. of Images`,
+ 'trials:audit:table:nonDicomsFileName': `File Name`,
+ 'trials:audit:table:nonDicomsStudyDate': `Study Time`,
+ 'trials:audit:table:nonDicomsUpdateTime': `Time Updated`,
+ 'trials:audit:button:nonDicomsPreview': `Preview`,
+ 'trials:audit:button:nonDicomsEdit': `Edit`,
+ 'trials:audit:tab:clinicalData': `Clinical Data`,
+ 'trials:audit:title:questions': `QC Questions`,
+ 'trials:audit:message:noData': `No data available`,
+ 'trials:audit:button:save': `Save`,
+ 'trials:audit:button:question': `Query`,
+ 'trials:audit:button:historicalQuestions': `Previous Queries`,
+ 'trials:audit:button:auditPassed': `Pass`,
+ 'trials:audit:button:auditFailed': `QC Terminated`,
+ 'trials:audit:dialogTitle:question': `Query`,
+ 'trials:audit:form:questionContent': `Query Details`,
+ 'trials:audit:form:questionDeadline': `Response Deadline`,
+ 'trials:audit:form:questionSummary': `Summary of Queries`,
+ 'trials:audit:form:actionMatters': `Actions to Take`,
+ 'trials:audit:dialogTitle:historicalQuestions': `Previous Queries`,
+ 'trials:audit:button:refreshHistoryQs': `Refresh`,
+ 'trials:audit:message:qsContentIsNull': `The query cannot be empty!`,
+ 'trials:audit:message:qsOverWindow': `Out of Visit Window`,
+ 'trials:audit:message:qsOverWindow1': `System generated visit window is `,
+ 'trials:audit:message:qsOverWindow2': `while the scan date of this study is`,
+ 'trials:audit:message:qsOverWindow3': `out of the visit window`,
+ 'trials:audit:message:qsOverWindow4': `Please confirm whether the visit is out of the visit window. If yes, please specify the reason.`,
+ 'trials:audit:message:sureToUpdate': `Confirm the change?`,
+ 'trials:audit:message:specifyQuestions': `Please check the images and save the QC questions, before draw the conclusion!`,
+ 'trials:audit:message:changeSeriesStatus': `Confirm to change the status of this serie to xxx?`,
+ 'trials:audit:label:setSeriesReading': `Display for Review`,
+ 'trials:audit:label:setSeriesNotReading': `Do not Display for Review`,
+ 'trials:audit:label:setSeriesDeleted': `Delete`,
+ 'trials:audit:label:setSeriesNotDelete': `Do not Delete`,
+ 'trials:tab:qcQuality': `QC Query`,
+ 'trials:qcQuality:table:challengeCode': `Query No.`,
+ 'trials:qcQuality:table:siteId': `Site ID`,
+ 'trials:qcQuality:table:subjectId': `Subject ID`,
+ 'trials:qcQuality:table:visitName': `Visit Name`,
+ 'trials:qcQuality:table:createTime': `Time Created`,
+ 'trials:qcQuality:table:organizer': `Created by`,
+ 'trials:qcQuality:table:latestReplyer': `Latest Responder`,
+ 'trials:qcQuality:table:latestReplyTime': `Latest Responsed Time`,
+ 'trials:qcQuality:table:reUploadStatus': `Re-Upload Status`,
+ 'trials:qcQuality:table:reUploadTime': `Time, Re-Upload Completed`,
+ 'trials:qcQuality:table:deadline': `Response Deadline`,
+ 'trials:qcQuality:table:qsDuration': `Query Duration`,
+ 'trials:qcQuality:table:isOverTime': `Passed Deadline`,
+ 'trials:qcQuality:table:closingTime': `Time Closed`,
+ 'trials:qcQuality:table:isReupload': `Re-Upload`,
+ 'trials:qcQuality:table:isClosed': `Closed`,
+ 'trials:qcQuality:table:latestMsgTime': `Time of Lastest Message`,
+ 'trials:qcQuality:table:qCProcessEnum': `QC Batch`,
+ 'trials:qcQuality:action:reply': `Reply`,
+ 'trials:qcQuality:action:close': `Close`,
+ 'trials:qcQuality:dialogTitle:reply': `Query Record`,
+ 'trials:qcQuality:dialog:qcContent': `Hello, the questions about all image and data in this visit are summarized as following:`,
+ 'trials:qcQuality:dialogTips:tip': `Notes: In order to solve above issues efficiently, please verify the situation and reply to the above action items one by one. Please indicate clearly whether it can be corrected. If it cannot be corrected, please remind investigators to pay attention in future scan (if applicable) .`,
+ 'trials:qcQuality:dialog:deadline': `Response Deadline`,
+ 'trials:qcQuality:dialog:none': `None`,
+ 'trials:qcQuality:dialogButton:send': `Send`,
+ 'trials:qcQuality:dialogButton:close': `Close`,
+ 'trials:qcQuality:dialogButton:agreeToReupload': `Agree to Re-Upload`,
+ 'trials:qcQuality:dialogTitle:closeQuestion': `Close Query`,
+ 'trials:qcQuality:label:closeReason': `Reason`,
+ 'trials:qcQuality:radio:reason1': `Issue resolved`,
+ 'trials:qcQuality:radio:reason2': `The issue cannot be resolved and the query has been closed mandatorily.`,
+ 'trials:qcQuality:radio:reason3': `Other`,
+ 'trials:qcQuality:label:otherReason': `Other Reasons`,
+ 'trials:qcQuality:message:problemSolved': `Issue resolved`,
+ 'trials:qcQuality:message:problemNotSolved': `The issue cannot be resolved, and the query will be closed compulsorily. And remind the site to take care next time`,
+ 'trials:qcQuality:message:closedSuccessfully': `Closed successfully!`,
+ 'trials:qcQuality:message:agreeToReupload': `Agree to re-upload?`,
+ 'trials:qcQuality:label:agreeToReupload': `IQC agreed to re-upload`,
+ 'trials:qcQuality:title:closed': `Closed`,
+ 'trials:qcQuality:title:unClose': `Unclosed`,
+ 'trials:qcQuality:title:title1': `Please edit the Body Part of Study xxx!`,
+ 'trials:qcQuality:title:title2': `Next vist?`,
+ 'trials:qcQuality:title:title3': `All claimed QC have been completed!`,
+ 'trials:qcQuality:label:passReason': `Reason`,
+ 'trials:qcQuality:label:closeReason': `Reason`,
+ 'trials:tab:consistencyCheck': `Data Reconciliation`,
+ 'trials:consistencyCheck:button:upload': `Upload`,
+ 'trials:consistencyCheck:button:download': `Download Template`,
+ 'trials:consistencyCheck:table:isUrgent': `Expedited`,
+ 'trials:consistencyCheck:table:checkChallengeState': `Query Status`,
+ 'trials:consistencyCheck:table:siteId': `Site ID`,
+ 'trials:consistencyCheck:table:subjectId': `Subject ID`,
+ 'trials:consistencyCheck:table:visitName': `Visit Name`,
+ 'trials:consistencyCheck:table:auditState': `Status before Data Reconciliation`,
+ 'trials:consistencyCheck:table:requestBackState': `Return Status`,
+ 'trials:consistencyCheck:table:checkTime': `Time`,
+ 'trials:consistencyCheck:table:checkPassedTime': `Time Completed`,
+ 'trials:consistencyCheck:table:checkState': `Status`,
+ 'trials:consistencyCheck:table:checkResult': `Inconsistent Item`,
+ 'trials:consistencyCheck:table:scanDate': `Study Date`,
+ 'trials:consistencyCheck:table:modality': `Study Type`,
+ 'trials:consistencyCheck:action:reply': `Reply`,
+ 'trials:consistencyCheck:action:view': `View`,
+ 'trials:consistencyCheck:action:applyFallback': `Apply for Return`,
+ 'trials:consistencyCheck:action:fallback': `Agree`,
+ 'trials:consistencyCheck:action:close': `Close`,
+ 'trials:consistencyCheck:action:pass': `Pass`,
+ 'trials:consistencyCheck:dialogTitle:qsContent': `Query Details`,
+ 'trials:consistencyCheck:label:noData': `No data available`,
+ 'trials:consistencyCheck:button:rejectBack': `Reject`,
+ 'trials:consistencyCheck:button:sendMessage': `Send`,
+ 'trials:consistencyCheck:dialogTitle:passManually': `Reason of approving the data reconciliation manually`,
+ 'trials:consistencyCheck:dialogTitle:close': `Reason of closing the data reconciliation`,
+ 'trials:consistencyCheck:label:reason': `Reason`,
+ 'trials:consistencyCheck:message:pmPerformed': `PM implemented a RETURN action after data reconciliation.`,
+ 'trials:consistencyCheck:message:fallbackSuccessfully': `Returned successfully!`,
+ 'trials:consistencyCheck:message:closedSuccessfully': `Closed successfully!`,
+ 'trials:consistencyCheck:message:appledSuccessfully': `Applied successfully!`,
+ 'trials:consistencyCheck:message:apply': `Confirm to apply?`,
+ 'trials:consistencyCheck:label:file': `File`,
+ 'trials:consistencyCheck:message:excelFileOnly': `Must be an Excel file.`,
+ 'trials:consistencyCheck:dialogButton:upload': `Upload`,
+ 'trials:consistencyCheck:message:xlsx': `It must be in xls and xlsx format.`,
+ 'trials:consistencyCheck:message:onlyOneFile': `Only one file is allowed to upload `,
+ 'trials:consistencyCheck:button:export1': `Export Table`,
+ 'trials:consistencyCheck:button:export2': `Export Records`,
+ 'trials:consistencyCheck:title:note': `Note:`,
+ 'trials:consistencyCheck:title:reply': `Reply`,
+ 'trials:consistencyCheck:title:close': `Close`,
+ 'trials:consistencyCheck:title:replyConsistency': `Reply the Data Reconciliation Query`,
+ 'trials:consistencyCheck:title:message1': `Verified by the system`,
+ 'trials:consistencyCheck:title:message2': `The imaging studies for this subject's current visit has upload to IRC system were as follows.Check the box if there are extra images in the following images:`,
+ 'trials:consistencyCheck:title:message3': `You confirm that the visit has uploaded redundant imaging studies to IRC system, and please explain it. If you need to delete the redundant images, please request a return.Thank you for your cooperation!`,
+ 'trials:consistencyCheck:title:message4': `The reason for the existence of redundant images in the IRC system is:`,
+ 'trials:consistencyCheck:title:message5': `The imaging studies for this subject's current visit that are inconsistent between IRC system and EDC system were as follows.P1ease check the box, if it is true:`,
+ 'trials:consistencyCheck:title:message6': `The imaging studies for this subject's current visit that are inconsistent between IRC system and EDC system were as follows.P1ease check the box, if it is true: None`,
+ 'trials:consistencyCheck:title:message7': `You confirm that there is a missing image studies in the current visit,and please select the reason. If you need to upload additional imaging studies, please request a return. Thank you for your cooperation!`,
+ 'trials:consistencyCheck:title:message8': `The reason for the missing images in the IRC system is`,
+ 'trials:consistencyCheck:title:message9': `EDC records imaging studies information by efficacy assessment data.`,
+ 'trials:consistencyCheck:title:message10': `EDC entry incorrect data.`,
+ 'trials:consistencyCheck:title:message11': `IRC upload incorrect data. Request a rollback and re-upload.`,
+ 'trials:consistencyCheck:title:message12': `It is verified that the actual imaging studies for this subject's current visit has upload to IRC system were as follows:`,
+ 'trials:consistencyCheck:title:none': `None`,
+ 'trials:consistencyCheck:title:message13': `The actual imaging studies for this subject's current visit that are inconsistent between IRC and actual situation were as follows:`,
+ 'trials:consistencyCheck:title:message14': `The actual imaging studies for this subject's current visit that are inconsistent between IRC and actual situation were as follows: None`,
+ 'trials:consistencyCheck:title:message15': `The Reasons are as follow:`,
+ 'trials:consistencyCheck:title:message16': `The reason for the existence of redundant images in the IRC system is:`,
+ 'trials:consistencyCheck:title:message17': `Please fill in the reason for the existence of redundant images in the IRC system.`,
+ 'trials:consistencyCheck:title:message18': `The reason for the missing images in the IRC system is`,
+ 'trials:consistencyCheck:title:message19': `Please fill in the reason for missing images in the IRC system`,
+ 'trials:consistencyCheck:title:message20': `Please verify accurately and then fill the actual imaging studies for the current visit:`,
+ 'trials:consistencyCheck:title:add': `Add`,
+ 'trials:consistencyCheck:title:studyDate': `Study Date`,
+ 'trials:consistencyCheck:title:studyModality': `Study Type`,
+ 'trials:consistencyCheck:title:submitted': `Submittd`,
+ 'trials:consistencyCheck:title:existed': `Exist in actual situation`,
+ 'trials:consistencyCheck:title:delete': `Delete`,
+ 'trials:consistencyCheck:title:title1': `The reasons for that the image studies is inconsistent between IRC and actual situation are:`,
+ 'trials:consistencyCheck:title:addStudy': `Add Studies`,
+ 'trials:consistencyCheck:title:title2': `Please select the study date and study type`,
+ 'trials:consistencyCheck:title:title3': `Delete this Study?`,
+ 'trials:consistencyCheck:title:title4': `Please enter the actual studies.`,
+ 'trials:consistencyCheck:title:title5': `It is verified that the actual imaging studies for this subject's current visit were as follows:`,
+ 'trials:consistencyCheck:title:title6': `xxx study at yyyy`,
+ 'trials:consistencyCheck:title:title7': `The imaging studies is inconsistent between IRC system and actual situation are as follow:`,
+ 'trials:consistencyCheck:title:title8': `Excess in IRC`,
+ 'trials:consistencyCheck:title:title9': `Missing from IRC`,
+ 'trials:consistencyCheck:title:title10': `The reasons for that the image studies is inconsistent between IRC and actual situation are:`,
+ 'trials:consistencyCheck:title:title11': `The imaging studies is consistent between IRC and actual situation.`,
+ 'trials:consistencyCheck:dialogTitle:xfpassManually': `Pass`,
+ 'trials:consistencyCheck:dialogTitle:xfclose': `Close Query`,
+ 'trials:check:radio:passreason1': `Query resolved online`,
+ 'trials:check:radio:passreason2': `Query resolved offline`,
+ 'trials:check:radio:passreason3': `Real-Time reading without data reconciliation`,
+ 'trials:check:radio:passreason4': `Other`,
+ 'trials:check:radio:closereason1': `Issue resolved`,
+ 'trials:check:radio:closereason2': `Issues cannot be resolved, & the query is closed compulsorily.`,
+ 'trials:check:radio:closereason3': `Other`,
+ 'trials:consistencyCheck:label:passreason': `Note`,
+ 'trials:consistencyCheck:label:closereason': `Note`,
+ 'trials:tab:dicomForward': `Image forwarding`,
+ 'trials:dicomForward:table:siteId': `Site ID`,
+ 'trials:dicomForward:table:subjectId': `Subject ID`,
+ 'trials:dicomForward:tableon:visitName': `Visit Name`,
+ 'trials:dicomForward:table:forwardStatus': `Forward Status`,
+ 'trials:dicomForward:table:forwardUser': `Forwarder`,
+ 'trials:dicomForward:table:forwardTime': `Time Forwarded`,
+ 'trials:dicomForward:action:forward': `Forward`,
+ 'trials:dicomForward:message:forwardSuccessfully': `Forwarded successfully!`,
+ 'trials:dicomForward:message:sureToForward': `Do you confirm to forward?`,
+ 'trials:trials-panel:tab:readingTask': `Pending`,
+ 'trials:trials-panel:tab:readTask': `Completed`,
+ 'trials:trials-panel:tab:medicalFeedback': `Medical Comments`,
+ 'trials:trials-panel:tab:rereadTask': `Return History`,
+ 'trials:trials-panel:tab:mimMedicalAudit': `Medical review`,
+ 'trials:tab:studyList': `Studies`,
+ 'trials:studyList:table:studyId': `Study ID`,
+ 'trials:studyList:table:imageType': `Image type`,
+ 'trials:studyList:table:studyInfo': `Study Information`,
+ 'trials:studyList:table:visit': `Visit`,
+ 'trials:studyList:table:subject': `Subject`,
+ 'trials:studyList:table:site': `Site`,
+ 'trials:studyList:table:uploader': `Uploaded By`,
+ 'trials:studyList:table:uploadTime': `Time Uploaded `,
+ 'trials:studyList:button:view': `View`,
+ 'trials:studyList:table:modality': `Modality`,
+ 'trials:studyList:table:bodyPart': `Body Part`,
+ 'trials:studyList:table:count': `No. of Study`,
+ 'trials:studyList:table:studyDate': `Study Date`,
+ 'trials:studyList:table:seriesNum': `No. of series`,
+ 'trials:studyList:table:description': `Description`,
+ 'trials:studyList:table:sliceThickness': `Slice Thickness`,
+ 'trials:studyList:table:instanceCount': `No. of Images`,
+ 'trials:studyList:table:fileName': `File Name`,
+ 'trials:studyList:table:visitName': `Visit Name`,
+ 'trials:studyList:table:visitNum': `Visit No.`,
+ 'trials:studyList:table:siteId': `Site ID`,
+ 'trials:studyList:table:siteName': `Site Name`,
+ 'trials:studyList:label:series': `Series`,
+ 'trials:studyList:dialogTitle:view': `View`,
+ 'trials:studyList:action:share': `Share`,
+ 'trials:tab:setting': `Settings`,
+ 'trials:tab:trialCfg': `Trial Config`,
+ 'trials:trialConfig:title:logincCfg': `Logic Configuration`,
+ 'trials:logincCfg:form:subjectNumberRule': `Reminder of Subject ID Convention`,
+ 'trials:logincCfg:form:subjectNum2': `Second ID of Subject`,
+ 'trials:logincCfg:form:subjectNumFormat': `Subject ID Format`,
+ 'trials:logincCfg:form:scanDateVerify': `Scan Date Verification`,
+ 'trials:logincCfg:form:visitBaseDate': `Visit Start Date`,
+ 'trials:logincCfg:form:visitBaseDataDes': `undefined`,
+ 'trials:logincCfg:form:subjectAge': `Subject Age`,
+ 'trials:logincCfg:form:subjectGender': `Subject Gender`,
+ 'trials:logincCfg:form:lastVisitName': `Name of the Unplanned Final Visit`,
+ 'trials:logincCfg:form:clinicalInforTransfer': `Clinical Data Collection`,
+ 'trials:logincCfg:form:clinicalConfig': `Clinical Data Config`,
+ 'trials:logincCfg:form:imageCopy': `Image Replication across Trials`,
+ 'trials:logincCfg:form:bodypart': `Body Part`,
+ 'trials:logincCfg:form:modality': `Modality`,
+ 'trials:logincCfg:form:exceededDays': `Image Query Max. Days`,
+ 'trials:trialCfg:title:processCfg': `Workflow Configuration`,
+ 'trials:processCfg:form:qcProcess': `Image QC`,
+ 'trials:processCfg:form:conProcess': `Data Reconciliation`,
+ 'trials:processCfg:form:readingMode': `Method of Reading`,
+ 'trials:processCfg:form:imagePlatform': `Reading Platform`,
+ 'trials:processCfg:form:criterion': `Review Criteria`,
+ 'trials:processCfg:form:digitPlaces': `Decimal Place`,
+ 'trials:processCfg:form:readingType': `Read Mode`,
+ 'trials:processCfg:form:IsAutoCreate': `Automatically Create Reads`,
+ 'trials:processCfg:form:IsAdditionalAssessment': `Presence of Additional Assessment`,
+ 'trials:processCfg:form:global': `Global Review`,
+ 'trials:processCfg:form:ad': `Adjudication Review`,
+ 'trials:processCfg:form:clinical': `Oncology Review`,
+ 'trials:processCfg:form:adRules': `Adjudication Rules`,
+ 'trials:processCfg:title:criterion': `Review Criteria`,
+ 'trials:processCfg:title:criterionName': `Name of Review Criteria`,
+ 'trials:processCfg:title:clinicalDataCfg': `Clinical Data Config`,
+ 'trials:processCfg:title:clinicalDataName': `Type of Clinical Data`,
+ 'trials:processCfg:title:uploader': `Uploader`,
+ 'trials:processCfg:title:dataLevel': `Data Level`,
+ 'trials:processCfg:title:transferType': `Submission Method`,
+ 'trials:processCfg:title:modulesName': `Name of Template`,
+ 'trials:processCfg:message:delete': `Confirm to delete?`,
+ 'trials:processCfg:message:update': `Confirm to update?`,
+ 'trials:processCfg:title:module': `Module`,
+ 'trials:processCfg:button:select': `Select`,
+ 'trials:processCfg:title:docFormat': `It must be in doc/docx format`,
+ 'trials:processCfg:title:onlyOneFile': `Only one file is allowed to upload.`,
+ 'trials:processCfg:form:medicalAudit': `Medical Review`,
+ 'trials:trialCfg:title:urgentCfg': `Expedition Configuration`,
+ 'trials:urgentCfg:form:enroll': `Enrollment Confirmation`,
+ 'trials:urgentCfg:form:pd': `PD Confirmation`,
+ 'trials:urgentCfg:form:trial': `Trial Expedition`,
+ 'trials:urgentCfg:form:subject': `Subject Expedition`,
+ 'trials:urgentCfg:form:enrollConfirmDefaultUserType': `undefined`,
+ 'trials:urgentCfg:form:PDProgressDefaultUserType': `undefined`,
+ 'trials:trialCfg:button:confirm': `Confirm`,
+ 'trials:trialCfg:button:update': `Update`,
+ 'trials:trialCfg:button:updateAndConfirm': `Confirm`,
+ 'trials:trialCfg:button:confirmCfg': `Confirm`,
+ 'trials:trialCfg:dialogTitle:cfgConfirm': `Confirm`,
+ 'trials:trialCfg:table:cfgItem': `Config Items`,
+ 'trials:trialCfg:table:cfgVal': `Config Value`,
+ 'trials:trialCfg:table:beforeChange': `Before Update`,
+ 'trials:trialCfg:table:updated': `Updated`,
+ 'trials:trialCfg:formRule:bodyPart': `Please use "|" to separate body parts, e.g., Chest|Head|Other`,
+ 'trials:trialCfg:formRule:modality': `Please use "|" to separate modalities, e.g., CT|MR|CR|PET|Other`,
+ 'trials:tab:siteAndStaff': `Staff & Site Management`,
+ 'trials:staff:title:staff': `Staff`,
+ 'trials:staff:button:addExternalStaff': `Add new staff`,
+ 'trials:staff:button:addInternalStaff': `Add platform staff
+`,
+ 'trials:staff:table:name': `Name`,
+ 'trials:staff:table:uid': `User ID`,
+ 'trials:staff:table:organization': `Affiliation`,
+ 'trials:staff:table:phone': `Tel`,
+ 'trials:staff:table:email': `Email`,
+ 'trials:staff:table:userType': `User Type`,
+ 'trials:staff:table:status': `Status`,
+ 'trials:staff:table:joinTime': `Date Joined`,
+ 'trials:staff:table:exitTime': `Exit Date`,
+ 'trials:staff:table:authorizationTime': `Time Authorized`,
+ 'trials:staff:table:disableTime': `Time Revoked`,
+ 'trials:staff:action:status': `Status`,
+ 'trials:staff:dialogTitle:add': `Add`,
+ 'trials:staff:dialogTitle:status': `Status`,
+ 'trials:staff:message:addStaff': `Confirm to add?`,
+ 'trials:staff:button:sendEmail': `Send Email`,
+ 'trials:externalStaff:table:lastName': `Last Name`,
+ 'trials:externalStaff:table:firstName': `First Name`,
+ 'trials:externalStaff:table:name': `Name`,
+ 'trials:externalStaff:table:phone': `Tel`,
+ 'trials:externalStaff:table:email': `Email`,
+ 'trials:externalStaff:table:organization': `Affiliation`,
+ 'trials:externalStaff:table:userType': `User Type`,
+ 'trials:externalStaff:table:status': `Status`,
+ 'trials:externalStaff:button:delete': `Delete`,
+ 'trials:externalStaff:button:saveAndSendEmail': `Save & Send Email`,
+ 'trials:externalStaff:dialogTitle:add': `Add`,
+ 'trials:externalStaff:dialogTitle:edit': `Edit`,
+ 'trials:externalStaff:message:delete': `Confirm to delete?`,
+ 'trials:externalStaff:message:add': `Confirm to add?`,
+ 'trials:externalStaff:formRule:phone': `Tel invalid`,
+ 'trials:externalStaff:formRule:email': `Email invalid`,
+ 'trials:siteAndStaff:title:site': `Site`,
+ 'trials:sitesList:button:siteResearch': `Site Survey`,
+ 'trials:sitesList:button:SeeNextPage': `See next page
+`,
+ 'trials:sitesList:table:siteId': `Site ID`,
+ 'trials:sitesList:table:siteName': `Site Name`,
+ 'trials:sitesList:table:siteAliasName': `Site Alias`,
+ 'trials:sitesList:table:city': `City`,
+ 'trials:sitesList:table:country': `Country`,
+ 'trials:sitesList:table:staff': `Staff Joined`,
+ 'trials:sitesList:table:status': `Enabled`,
+ 'trials:sitesList:table:timeAdded': `Time Authorized`,
+ 'trials:sitesList:table:timeDeleted': `Time Disabled`,
+ 'trials:sitesList:action:assign': `CRC/CRA`,
+ 'trials:sitesList:dialogTitle:assignSite': `Add new site`,
+ 'trials:sitesList:dialogTitle:assignStaff': `CRC/CRA List (Project: xxx)`,
+ 'trials:sitesList:dialogTitle:editSite': `Edit`,
+ 'trials:sitesList:dialogTitle:staff': `CRC/CRA List (Site: xxx)`,
+ 'trials:sitesList:dialogTitle:editStaffStauts': `Edit`,
+ 'trials:sitesList:message:setSiteId': `Please set Site ID first`,
+ 'trials:sitesList:message:removeSite': `Confirm to remove?`,
+ 'trials:sitesList:message:removedSuccessfully': `Removed successfully!`,
+ 'trials:sitesList:form:keyWord': `Key Word`,
+ 'trials:sitesList:formPlaceholder:keyWord': `User ID/Name/Email`,
+ 'trials:sitesList:dialogTitle:upload': `undefined`,
+ 'trials:internalStaff:button:assign': `Assign`,
+ 'trials:internalStaff:table:name': `Name`,
+ 'trials:internalStaff:table:uid': `User ID`,
+ 'trials:internalStaff:table:phone': `Tel`,
+ 'trials:internalStaff:table:email': `Email`,
+ 'trials:internalStaff:table:organization': `Affiliation`,
+ 'trials:internalStaff:table:userType': `User Type`,
+ 'trials:internalStaff:table:status': `Status`,
+ 'trials:internalStaff:table:authorizationTime': `Time Authorized`,
+ 'trials:internalStaff:table:disableTime': `Time Disabled`,
+ 'trials:internalStaff:action:status': `Status`,
+ 'trials:internalStaff:message:assign': `Confirm to assign?`,
+ 'trials:sitesList:dialogTitle:addSite': `Add New Site`,
+ 'trials:sitesList:dialogButton:customSite': `Customize`,
+ 'trials:sitesList:dialogButton:addSite': `Add New Site`,
+ 'trials:customSite:title:custom': `Customize`,
+ 'trials:customSite:form:siteId': `Site ID`,
+ 'trials:customSite:form:siteName': `Site Name`,
+ 'trials:customSite:form:orgCode': `Institution Code`,
+ 'trials:customSite:form:country': `Country`,
+ 'trials:customSite:form:city': `City`,
+ 'trials:customSite:form:address': `Address`,
+ 'trials:customSite:form:hospital': `Affiliated Hospital`,
+ 'trials:customSite:form:director': `Director`,
+ 'trials:customSite:form:directorPhone': `Director's Tel.`,
+ 'trials:customSite:form:contactor': `Contact Person`,
+ 'trials:customSite:form:contactorPhone': `Contact Person's Tel.`,
+ 'trials:customSite:message:add': `Confirm to add?`,
+ 'trials:tab:visitPlan': `Visit Management`,
+ 'trials:visitPlan:button:confirm': `Confirm`,
+ 'trials:visitPlan:button:adjustRecord': `Adjustment Records`,
+ 'trials:visitPlan:table:visitName': `Visit Name`,
+ 'trials:visitPlan:table:isBaseLine': `Baseline`,
+ 'trials:visitPlan:table:blindName': `Blind Mark`,
+ 'trials:visitPlan:table:viistNum': `Visit No.`,
+ 'trials:visitPlan:table:viistDay': `Visit Interval(day)`,
+ 'trials:visitPlan:table:window': `Window`,
+ 'trials:visitPlan:table:isConfirm': `Confirmed`,
+ 'trials:visitPlan:table:isDeleted': `Revoked`,
+ 'trials:visitPlan:table:description': `Description`,
+ 'trials:visitPlan:table:createTime': `Time Created`,
+ 'trials:visitPlan:table:day': `Day`,
+ 'trials:visitPlan:dialogTitle:record': `Adjustment Records`,
+ 'trials:adjustRecord:table:connfirmor': `Confirmed by`,
+ 'trials:adjustRecord:table:connfirmTime': `Time Confirmed`,
+ 'trials:adjustRecord:table:record': `Out of Window Updates Records`,
+ 'trials:adjustRecord:action:download': `Download`,
+ 'trials:adjustRecord:message:confirm': `Confirm to submit?`,
+ 'trials:adjustRecord:formRule:window': `The upper interval must be earlier than the lower interval`,
+ 'trials:visitPlan:button:blindFlag': `Blind Mark`,
+ 'trials:visitPlan:button:bsBlindFlag': `Baseline Blind Mark`,
+ 'trials:visitPlan:button:visitBlindFlag': `Prefix of Visit Blind Mark`,
+ 'trials:tab:qcCfg': `QC Questions Config`,
+ 'trials:qcCfg:button:preview': `Preview`,
+ 'trials:qcCfg:button:confirm': `Confirm Config`,
+ 'trials:qcCfg:button:default': `Add Default Questions`,
+ 'trials:qcCfg:button:custom': `Customize`,
+ 'trials:qcCfg:table:questionName': `QC Questions`,
+ 'trials:qcCfg:table:type': `Type`,
+ 'trials:qcCfg:table:typeValue': `Options`,
+ 'trials:qcCfg:table:order': `No.`,
+ 'trials:qcCfg:table:isRequired': `Mandatory Field`,
+ 'trials:qcCfg:table:isEnable': `Enabled`,
+ 'trials:qcCfg:table:parentQs': `Parent Questions`,
+ 'trials:qcCfg:table:parentTriggerValue': `Display Trigger`,
+ 'trials:qcCfg:table:level': `Level`,
+ 'trials:qcCfg:message:typeValue': `Please use "|" to separate items`,
+ 'trials:qcCfg:message:deleteWarning': `The question cannot be deleted because there's sub-questions under it.`,
+ 'trials:qcCfg:message:msg1': `Identical values does not allowed.`,
+ 'trials:qcCfg:message:msg2': `Please set QC questions before confirming`,
+ 'trials:qcCfg:message:delete': `Confirm to delete?`,
+ 'trials:qcCfg:dialogTitle:new': `Add`,
+ 'trials:qcCfg:dialogTitle:edit': `Edit`,
+ 'trials:qcCfg:dialogTitle:custom': `Customize`,
+ 'trials:tab:attachment': `Document Management`,
+ 'trials:attachment:table:fileType': `Document Type`,
+ 'trials:attachment:table:fileName': `File Name`,
+ 'trials:attachment:table:min': `Minimum reading time (minute)`,
+ 'trials:attachment:table:isDeleted': `Revoked`,
+ 'trials:attachment:table:userType': `User Types to Sign`,
+ 'trials:attachment:table:description': `Description`,
+ 'trials:attachment:table:updateTime': `Time Updated`,
+ 'trials:attachment:action:preview': `Preview`,
+ 'trials:attachment:action:edit': `Edit`,
+ 'trials:attachment:action:apolish': `Revoke`,
+ 'trials:attachment:dialogTitle:preview': `Preview`,
+ 'trials:attachment:message:abolish': `Confirm to revoke?`,
+ 'trials:attachment:message:delete': `Confirm to delete?`,
+ 'trials:attachment:form:file': `Document`,
+ 'trials:attachment:message:pdf': `Must be a PDF file`,
+ 'trials:attachment:message:selectFile': `Please select file`,
+ 'trials:attachment:message:uploadFile': `Only one file is allowed to upload `,
+ 'trials:attachment:button:select': `Select`,
+ 'trials:tab:medicalAuditCfg': `Medical Review Questions Config`,
+ 'trials:medicalAuditCfg:message:message1': `Please select medical review questions`,
+ 'trials:tab:readingUnitCfg': `Reading Module Config`,
+ 'trials:readingUnit:button:sync': `Synchronize Current Criteria`,
+ 'trials:readingUnit:button:confirm': `Confirm`,
+ 'trials:readingUnit:message:sync': `Confirm to synchronize current criteria?`,
+ 'trials:readingUnit:message:msg1': `System find that the current review criteria config has been updated. Confirm to get the latest config information?`,
+ 'trials:readingUnit:message:msg2': `The xxx information is missing, please complete it before confirming.`,
+ 'trials:readingUnit:label:isconfirm': `undefined`,
+ 'trials:readingUnit:readingRules': `Review Rules`,
+ 'trials:readingUnit:readingRules:title:readingTool': `Reading Tool`,
+ 'trials:readingUnit:readingRules:title:isReadingPeriod': `Presence of Review Period`,
+ 'trials:readingUnit:readingRules:title:readingTaskViewInOrder': `Order of Reads`,
+ 'trials:readingUnit:readingRules:title:readingTaskViewEnum': `Arrangement of Reads Based on`,
+ 'trials:readingUnit:readingRules:title:isReadingShowSubjectInfo': `Display Subject Information`,
+ 'trials:readingUnit:readingRules:title:isReadingShowPreviousResults': `Display Previous Review Results`,
+ 'trials:readingUnit:readingRules:title:isECRFShowInDicomReading': `Display eICRF on Reading Tab`,
+ 'trials:trials-panel:setting:reading-unit:TrialCriterionAdditionalAssessmentTypeList': `Additional Assessment`,
+ 'trials:readingUnit:readingRules:title:readingDivision': `undefined`,
+ 'trials:readingUnit:readingRules:title:pIReadingScopen': `undefined`,
+ 'trials:readingUnit:readingCriterion': `Review Criteria`,
+ 'trials:readingUnit:readingCriterion:title:formQs': `Form Questions`,
+ 'trials:readingUnit:qsList:title:type': `Type of Question`,
+ 'trials:readingUnit:qsList:title:qsName': `Question Name(CN)`,
+ 'trials:readingUnit:qsList:title:qsNameEn': `Question Name`,
+ 'trials:readingUnit:qsList:title:groupName': `Group(CN)`,
+ 'trials:readingUnit:qsList:title:groupNameEn': `Group `,
+ 'trials:readingUnit:qsList:title:PrecopyValue': `Pre-copy Value`,
+ 'trials:readingUnit:qsList:title:isRequired': `Required`,
+ 'trials:readingUnit:qsList:title:isShow': `Display`,
+ 'trials:readingUnit:qsList:title:isJudgeQuestion': `Adjudication Question`,
+ 'trials:readingUnit:qsList:title:isShowInDicom': `Display on reading page`,
+ 'trials:readingUnit:qsList:title:globalReadingShowType': `Display on global review page?`,
+ 'trials:readingUnit:qsList:title:orderMark': `Prex- to No.`,
+ 'trials:readingUnit:qsList:title:maxQuestionCount': `The Max. number of lines`,
+ 'trials:readingUnit:qsList:title:isCopyLesions': `Copy the value of previous visit`,
+ 'trials:readingUnit:qsList:title:dataSource': `Data Source`,
+ 'trials:readingUnit:qsList:title:valueType': `Type of Numeric`,
+ 'trials:readingUnit:qsList:title:digitPlaces': `Digit Places`,
+ 'trials:readingUnit:qsList:title:unit': `Unit`,
+ 'trials:readingUnit:qsList:title:customUnit': `Customized Unit`,
+ 'trials:readingUnit:qsList:title:customCalculateMark': `Calculate Mode`,
+ 'trials:readingUnit:qsList:title:order': `No.`,
+ 'trials:readingUnit:qsList:title:tableName': `Table Name`,
+ 'trials:readingUnit:qsList:title:typeValue': `Option`,
+ 'trials:readingUnit:qsList:title:defaultValue': `Default Value`,
+ 'trials:readingUnit:qsList:title:parentId': `Parent Question Dependency to Display`,
+ 'trials:readingUnit:qsList:title:parentTriggerValueList': `Trigger Value Dependency to Display`,
+ 'trials:readingUnit:qsList:title:relevanceId': `Parent Question Dependency to Require`,
+ 'trials:readingUnit:qsList:title:relevanceValueList': `Trigger Value Dependency to Require`,
+ 'trials:readingUnit:qsList:title:limitEdit': `Limit Edit`,
+ 'trials:readingUnit:qsList:title:imageCount': `The max. number of upload image`,
+ 'trials:readingUnit:qsList:title:Remark': `Remark`,
+ 'trials:readingUnit:qsList:title:FileType': `Format of File`,
+ 'trials:readingUnit:qsList:title:MaxAnswerLength': `The max. length of answer`,
+ 'trials:readingUnit:qsList:title:DependParentId': `Associated Questions`,
+ 'trials:readingUnit:qsList:title:DataTableColumn': `Associated field`,
+ 'trials:readingUnit:qsList:title:MaxRowCount': `Maximum Number of Repetitions`,
+ 'trials:readingUnit:qsList:message:msg0': `Identical values does not allowed.`,
+ 'trials:readingUnit:qsList:message:msg1': `Please select question with the same level.`,
+ 'trials:readingUnit:qsList:message:msg2': `Please select the sub-question of the table question`,
+ 'trials:readingUnit:qsList:message:msg3': `Please use ‘|’ to seperate items`,
+ 'trials:readingUnit:label:DictionaryCode': `Association Dictionary`,
+ 'trials:readingUnit:label:QuestionGenre': `Option Type`,
+ 'trials:readingUnit:qsList:title:edit': `Edit`,
+ 'trials:readingUnit:qsList:title:view': `View`,
+ 'trials:readingUnit:qsList:title:tableQs': `Table Questions`,
+ 'trials:readingUnit:qsList:title:delete': `Delete`,
+ 'trials:readingUnit:qsList:title:add': `Add`,
+ 'trials:readingUnit:qsList:title:ecrfPreview': `Preview eICRF`,
+ 'trials:readingUnit:qsList:message:deleteConfirm': `Confirm to delete?`,
+ 'trials:readingUnit:qsList:message:deleteSuccessfully': `Deleted Successfully!`,
+ 'trials:readingUnit:qsList:message:loading': `Loading`,
+ 'trials:readingUnit:qsList:message:imageFormat': `Must be in xxx format`,
+ 'trials:readingUnit:readingCriterion:title:baseDataCfg': `Basic Data Config`,
+ 'trials:readingUnit:baseDataCfg:title:organ': `Organ`,
+ 'trials:readingUnit:baseDataCfg:title:organType': `Type of Organ`,
+ 'trials:readingUnit:baseDataCfg:title:classification': `Classification`,
+ 'trials:readingUnit:baseDataCfg:title:classificationEn': `Classification (EN)`,
+ 'trials:readingUnit:baseDataCfg:title:bodyPart': `Body Part`,
+ 'trials:readingUnit:baseDataCfg:title:bodyPartEn': `Body Part (EN)`,
+ 'trials:readingUnit:baseDataCfg:title:organ': `Organ`,
+ 'trials:readingUnit:baseDataCfg:title:organEn': `Organ (EN)`,
+ 'trials:readingUnit:baseDataCfg:title:TULAT': `Location`,
+ 'trials:readingUnit:baseDataCfg:title:TULATEn': `Location (EN)`,
+ 'trials:readingUnit:baseDataCfg:title:isLymphNodes': `Lymph Node`,
+ 'trials:readingUnit:baseDataCfg:title:isCanEditPosition': `Editable`,
+ 'trials:readingUnit:baseDataCfg:title:showOrder': `No.`,
+ 'trials:readingUnit:baseDataCfg:title:remark': `Note`,
+ 'trials:readingUnit:baseDataCfg:title:isEnable': `Display`,
+ 'trials:readingUnit:baseDataCfg:title:dict': `Dictionary of Criteria`,
+ 'trials:readingUnit:baseDataCfg:title:dictTbl': `Dictionary Table Name`,
+ 'trials:readingUnit:baseDataCfg:title:dictDesc': `Description`,
+ 'trials:readingUnit:baseDataCfg:title:dictChildCount': `No. of Sub-items`,
+ 'trials:readingUnit:baseDataCfg:title:dictOrder': `Order`,
+ 'trials:readingUnit:baseDataCfg:title:dictView': `View`,
+ 'trials:readingUnit:baseDataCfg:title:dictValCN': `Value(CN)`,
+ 'trials:readingUnit:baseDataCfg:title:dictValEN': `Value (EN)`,
+ 'trials:readingUnit:baseDataCfg:title:dictValDesc': `Description`,
+ 'trials:readingUnit:baseDataCfg:title:dictVal': `Value in Dictionary of Criteria`,
+ 'trials:readingUnit:baseDataCfg:title:set': `Settings`,
+ 'trials:readingUnit:baseDataCfg:button:sync': `SYNC`,
+ 'trials:readingUnit:baseDataCfg:button:set': `Set`,
+ 'trials:readingUnit:baseDataCfg:message:sync': `SYNC successfully!`,
+ 'trials:readingUnit:baseDataCfg:message:updateConfirm': `Confirm to update?`,
+ 'trials:readingUnit:baseDataCfg:message:deleteConfirm': `Confirm to delete?`,
+ 'trials:readingUnit:baseDataCfg:message:deleteSuccessfully': `Deleted Successfully!`,
+ 'trials:readingUnit:GlobalReading': `Global Review`,
+ 'trials:readingUnit:globalReading:title:globalAssessTypes': `Assessment Update Type`,
+ 'trials:readingUnit:globalReading:title:valueCN': `Value `,
+ 'trials:readingUnit:globalReading:title:valueEN': `Value (EN)`,
+ 'trials:readingUnit:globalReading:title:isBaseLineUse': `Baseline assessment`,
+ 'trials:readingUnit:globalReading:title:isFollowVisitUse': `Follow-up assessment`,
+ 'trials:readingUnit:adRules': `Adjudication Rules`,
+ 'trials:adRules:title:arbitrationRule': `Adjudication Object`,
+ 'trials:adRules:title:judgeTypeEnum': `Condition of Triggering Adjudication`,
+ 'trials:adRules:button:addRule': `Add Rule`,
+ 'trials:adRules:title:order': `No.`,
+ 'trials:adRules:title:answerGroupA': `Reviewer A`,
+ 'trials:adRules:title:answerGroupB': `Reviewer B`,
+ 'trials:adRules:title:selectAnswerGroup': `Select an Answer Group`,
+ 'trials:adRules:title:addGroup': `Add a Group`,
+ 'trials:adRules:title:group': `Group`,
+ 'trials:adRules:title:selectAnswer': `Select an Answer`,
+ 'trials:adRules:message:msg1': `Delete this group rule`,
+ 'trials:adRules:message:msg2': `Please select Answer A`,
+ 'trials:adRules:message:msg3': `Please select Answer B`,
+ 'trials:adRules:message:msg4': `New rule of answer was added`,
+ 'trials:adRules:message:msg5': `Please select answer before adding group`,
+ 'trials:adRules:message:msg6': `Confirm to reset the condition of triggering adjudication?`,
+ 'trials:adRules:message:msg7': `Reset Successfully!`,
+ 'trials:adRules:message:msg8': `Please config rules before application`,
+ 'trials:adRules:message:msg9': `Applied Successfully!`,
+ 'trials:readingUnit:oncologyReading': `Config of Oncology Review`,
+ 'trials:readingUnit:oncologyReading:title:oncologyAssessIdsStr': `Review Result`,
+ 'trials:readingUnit:oncologyReading:title:evaluationReason': `Assessment Reason`,
+ 'trials:readingUnit:oncologyReading:title:valueCN': `Value (CN)`,
+ 'trials:readingUnit:oncologyReading:title:valueEN': `Value (EN)`,
+ 'trials:readingUnit:oncologyReading:title:oncologyReading': `Oncology Review`,
+ 'trials:tab:emailManageCfg': `Email Management`,
+ 'trials:emailManageCfg:title:code': `Code`,
+ 'trials:emailManageCfg:title:businessScenario': `Scenario`,
+ 'trials:emailManageCfg:title:fromName': `Sender`,
+ 'trials:emailManageCfg:title:fromEmail': `Send Email Address`,
+ 'trials:emailManageCfg:title:SMTPServerAddress': `SMTP Server Address`,
+ 'trials:emailManageCfg:title:SMTPServerPort': `SMTP Server Port`,
+ 'trials:emailManageCfg:title:authorizationCode': `Password/Authorization Code`,
+ 'trials:emailManageCfg:title:toUserTypeList': `Recipient`,
+ 'trials:emailManageCfg:title:copyUserTypeList': `CC`,
+ 'trials:emailManageCfg:title:fileName': `Attachment`,
+ 'trials:emailManageCfg:title:isReturnRequired': `Receipt Required`,
+ 'trials:emailManageCfg:title:isUrgent': `Expedited`,
+ 'trials:emailManageCfg:title:isAutoSend': `Auto Sent`,
+ 'trials:emailManageCfg:title:updateTime': `Time Updated`,
+ 'trials:emailManageCfg:title:createTime': `Time Created`,
+ 'trials:emailManageCfg:button:select': `Select`,
+ 'trials:emailManageCfg:message:format': `(must be in word/excel format)`,
+ 'trials:emailManageCfg:message:onlyOneFile': `Only one file is allowed to upload.`,
+ 'trials:emailManageCfg:title:sendEmailCfg': `Outbox Configuration`,
+ 'trials:emailManageCfg:title:sendEmailAccount': `Outbox`,
+ 'trials:emailManageCfg:title:password': `Password/Authorization Code`,
+ 'trials:emailManageCfg:title:emailTpl': `Automated Email Templates`,
+ 'trials:emailManageCfg:title:commom': `General`,
+ 'trials:emailManageCfg:title:criterions': `Related to Criteria`,
+ 'trials:emailManageCfg:button:Default': `undefined`,
+ 'trials:emailManageCfg:table:EmailTopicCN': `undefined`,
+ 'trials:emailManageCfg:table:EmailTopic': `undefined`,
+ 'trials:emailManageCfg:table:BusinessScenarioEnum': `undefined`,
+ 'trials:emailManageCfg:table:ToUserTypeList': `undefined`,
+ 'trials:emailManageCfg:table:CopyUserTypeList': `undefined`,
+ 'trials:emailManageCfg:table:blackUserIdList': `undefined`,
+ 'trials:emailManageCfg:table:EmailUrgentEnum': `undefined`,
+ 'trials:emailManageCfg:table:EmailCron': `undefined`,
+ 'trials:emailManageCfg:table:IsAutoSend': `undefined`,
+ 'trials:emailManageCfg:table:IsEnable': `undefined`,
+ 'trials:emailManageCfg:table:CriterionTypeEnum': `undefined`,
+ 'trials:emailManageCfg:table:fileListCN': `undefined`,
+ 'trials:emailManageCfg:table:fileListEN': `undefined`,
+ 'trials:emailManageCfg:table:EmailHtmlContentCN': `undefined`,
+ 'trials:emailManageCfg:table:EmailHtmlContentEN': `undefined`,
+ 'trials:emailManageCfg:table:BusinessLevelEnum': `undefined`,
+ 'trials:emailManageCfg:table:BusinessModuleEnum': `undefined`,
+ 'trials:emailManageCfg:button:generate': `undefined`,
+ 'trials:emailManageCfg:message:msg1': `undefined`,
+ 'trials:emailManageCfg:message:msg2': `undefined`,
+ 'trials:medicalFeedbackCfg:title:taskType': `Review Type`,
+ 'trials:medicalFeedbackCfg:title:criterion': `Review Criteria`,
+ 'trials:medicalFeedbackCfg:title:isGeneral': `General`,
+ 'trials:medicalFeedbackCfg:message:msg1': `Please config medical review question before confirming`,
+ 'trials:medicalFeedbackCfg:message:msg2': `Identical values does not allowed.`,
+ 'trials:medicalFeedbackCfg:message:msg3': `No data`,
+ 'trials:menuTitle:workbench': `Dashboard`,
+ 'trials:workbench:label:trialsStats': `My Trials`,
+ 'trials:workbench:label:attachmentsStats': `Documents Signed`,
+ 'trials:workbench:label:pendingTasksStats': `Pending`,
+ 'trials:workbench:label:messagesStats': `Notifications`,
+ 'trials:workbench:table:trialId': `Trial ID`,
+ 'trials:workbench:table:experimentName': `Study Name`,
+ 'trials:workbench:table:researchNo': `Protocol No.`,
+ 'trials:workbench:action:sign': `Sign`,
+ 'trials:workbench:title:trialDocBeSigned': `Trial Documents to Sign`,
+ 'trials:trialDocBeSigned:table:fileCount': `No. of Documents to Sign`,
+ 'trials:workbench:title:pendingSiteResearch': `Site Survey`,
+ 'trials:pendingSiteResearch:table:siteCount': `No. of Sites to Approve`,
+ 'trials:pendingSiteResearch:action:audit': `Review`,
+ 'trials:workbench:title:sysDocBeSigned': `System Documents to Sign`,
+ 'trials:sysDocBeSigned:table:fileType': `Document Type`,
+ 'trials:sysDocBeSigned:table:fileName': `File Name`,
+ 'trials:sysDocBeSigned:table:uploadTime': `Time Updated`,
+ 'trials:tab:notice': `Notifications`,
+ 'trials:notice:table:notificationType': `Notification Type`,
+ 'trials:notice:table:notificationContent': `Notification`,
+ 'trials:notice:table:notificationStatus': `Notification State`,
+ 'trials:notice:table:publisher': `Publisher`,
+ 'trials:notice:table:releaseTime': `Time Published`,
+ 'trials:notice:table:endTime': `Time Disabled`,
+ 'trials:notice:table:appendix': `Attachment`,
+ 'trials:notice:table:isRead': `Readed`,
+ 'trials:notice:action:detail': `Details`,
+ 'login:title:system': `SIR Imaging System`,
+ 'login:form:userName': `User ID`,
+ 'login:form:password': `Password`,
+ 'login:button:login': `Login`,
+ 'login:button:forgetPassword': `Forgot Password`,
+ 'login:formRule:userName': `Please enter user ID!`,
+ 'login:formRule:password': `Please enter password!`,
+ 'login:message:login1': `It's the user's first login, please change your password immediately!`,
+ 'login:message:login2': `No menu is configured to current user. Please contact system administrator.`,
+ 'recompose:title:init': `Initialize the User ID and Password`,
+ 'recompose:form:userName': `User ID`,
+ 'recompose:form:oldPassword': `Old Password`,
+ 'recompose:form:newPassword': `New Password`,
+ 'recompose:form:confirmPassword': `Confirm Password`,
+ 'recompose:button:cancel': `Cancel`,
+ 'recompose:button:save': `Save`,
+ 'recompose:message:warning': `The current page is for the first login`,
+ 'recompose:message:passwordDiffer': `The two passwords you entered do not match`,
+ 'recompose:message:updatedSuccessfully': `Updated successfully. Please log in again.`,
+ 'recompose:message:passwordValid': `The password is consisted of 8-32 characters.`,
+ 'recompose:form:email': `Email`,
+ 'recompose:form:role': `Role`,
+ 'passwordReset:title:reset': `Reset Password`,
+ 'passwordReset:form:email': `Email`,
+ 'passwordReset:form:verificationCode': `Verification Code`,
+ 'passwordReset:form:userName': `User ID`,
+ 'passwordReset:form:userType': `User Type`,
+ 'passwordReset:form:password': `New Password`,
+ 'passwordReset:form:confirmPassword': `Confirm Password`,
+ 'passwordReset:button:send': `Send Code`,
+ 'passwordReset:button:wait': `Wait`,
+ 'passwordReset:button:verify': `Verify`,
+ 'passwordReset:button:cancel': `Cancel`,
+ 'passwordReset:button:submit': `Save`,
+ 'passwordReset:formRule:email': `Please input email address`,
+ 'passwordReset:formRule:password': `Please input password`,
+ 'passwordReset:formRule:confirmPassword': `Please input password again`,
+ 'passwordReset:formRule:passwordsDiffer': `The two password you entered do not match`,
+ 'passwordReset:formRule:passwordinvalid': `Invalid email address`,
+ 'passwordReset:message:updatedSuccessfully': `Updated successfully`,
+ 'trials:trials-myinfo:title:avater': `Profile Photo`,
+ 'trials:trials-myinfo:title:basicInfo': `User Profile`,
+ 'trials:trials-myinfo:form:surname': `Last Name`,
+ 'trials:trials-myinfo:form:givenname': `First Name`,
+ 'trials:trials-myinfo:form:gender': `Gender`,
+ 'trials:trials-myinfo:form:organization': `Affiliation`,
+ 'trials:trials-myinfo:form:department': `Department`,
+ 'trials:trials-myinfo:form:position': `Title`,
+ 'trials:trials-myinfo:button:save': `Save`,
+ 'trials:trials-myinfo:title:accountInfo': `My profile`,
+ 'trials:trials-myinfo:form:userName': `User ID`,
+ 'trials:trials-myinfo:form:phone': `Tel`,
+ 'trials:trials-myinfo:form:email': `Email`,
+ 'trials:trials-myinfo:button:update': `Update`,
+ 'trials:trials-myinfo:button:getVCode': `Send Verification Code`,
+ 'trials:trials-myinfo:button:wait': `Wait`,
+ 'trials:trials-myinfo:message:updateSuccessfully': `Updated successfully`,
+ 'trials:trials-myinfo:message:sendSuccessfully': `Sent successfully`,
+ 'trials:trials-myinfo:message:modifyPWSuccessfully': `Updated successfully. Please login again.`,
+ 'trials:trials-myinfo:button:loginout': `Sign out`,
+ 'trials:trials-myinfo:title:updatePaasord': `Update the password`,
+ 'trials:tab:trials': `My Trials`,
+ 'trials:trials:title:back': `Return`,
+ 'trials:trials:title:backTrialList': `Return to trial list`,
+ 'trials:trials:title:eics': `SIR Imaging System`,
+ 'trials:tab:reading': `Reads`,
+ 'trials:tab:pendingReadingTasks': `Pending`,
+ 'trials:pendingReadingTasks:table:subjectCode': `Subject ID`,
+ 'trials:pendingReadingTasks:table:remainingReadingVolume': `Remaining Reads`,
+ 'trials:pendingReadingTasks:table:suggestedCompletionTime': `Suggested completion time`,
+ 'trials:pendingReadingTasks:table:remainingTaskVolume': `Remaining Reads`,
+ 'trials:pendingReadingTasks:table:amountOfJudgesRemaining': `Remaining Adjudications`,
+ 'trials:pendingReadingTasks:table:amountOfCompletedTasks': `Completed`,
+ 'trials:pendingReadingTasks:table:numberOfJudgesCompleted': `Completed Adjudication`,
+ 'trials:pendingReadingTasks:table:recipient': `undefined`,
+ 'trials:pendingReadingTasks:button:beginRandomReview': `Start random reading`,
+ 'trials:pendingReadingTasks:table:operate': `Action`,
+ 'trials:pendingReadingTasks:button:review': `Reading`,
+ 'trials:pendingReadingTasks:button:release': `undefined`,
+ 'trials:pendingReadingTasks:message:released': `undefined`,
+ 'trials:pendingReadingTasks:button:ExistReadingApply': `The current subject has a re-read request pending. Subsequent reads are not allowed`,
+ 'trials:reading:tabTitle:review': `Reading`,
+ 'trials:reading:tabTitle:report': `Report`,
+ 'trials:reading:dagTitle:msg1': `Please read the clinical data, and then click “Confirm”.`,
+ 'trials:reading:button:confirm': `Confirm`,
+ 'trials:reading:warnning:msg1': `Reading of Subject xxx has started.`,
+ 'trials:reading:warnning:msg2': `The information of Lesion xxx has not been completed or saved. Switch to the Report tab?`,
+ 'trials:reading:warnning:msg200': `The evaluaion of Lesion xxx has not been completed or saved, and the eICRF cannot be submitted.`,
+ 'trials:reading:warnning:msg201': `Image quality information has not been saved. Switch to the Report tab?`,
+ 'trials:reading:title:keySeries': `Key Series`,
+ 'trials:reading:button:download': `Download`,
+ 'trials:reading:button:pause': `Pause`,
+ 'trials:reading:button:marked': `Lesion mark(s) present.`,
+ 'trials:reading:button:layout': `Layout`,
+ 'trials:reading:button:wwwc': `Windowing`,
+ 'trials:reading:button:wwwcDefault': `Default`,
+ 'trials:reading:button:wwwcCustom': `Customized`,
+ 'trials:reading:button:wwwcRegion': `Rectangle Area Windowing`,
+ 'trials:reading:dagTitle:wwwcCustom': `Customized Windowing`,
+ 'trials:reading:title:preset': `W/L Preset`,
+ 'trials:reading:button:reverseColor': `Inverse Color`,
+ 'trials:reading:button:zoom': `Zoom`,
+ 'trials:reading:button:move': `Move`,
+ 'trials:reading:button:rotate': `Rotate`,
+ 'trials:reading:button:rotateDefault': `Default`,
+ 'trials:reading:button:rotateVertical': `Flip Vertical`,
+ 'trials:reading:button:rotateHorizontal': `Flip Horizontal `,
+ 'trials:reading:button:rotateTurnLeft': `Rotate Left`,
+ 'trials:reading:button:rotateTurnRight': `Rotate Right`,
+ 'trials:reading:button:fitWindow': `Fit to Screen`,
+ 'trials:reading:button:fitImage': `Fit to Image`,
+ 'trials:reading:button:imageIndexSync': `Scroll Synchronize`,
+ 'trials:reading:button:screenShot': `Screenshot`,
+ 'trials:reading:button:length': `Diameter `,
+ 'trials:reading:button:bidirectional': `Bidirectional `,
+ 'trials:reading:button:arrowAnnotate': `Arrow `,
+ 'trials:reading:button:rectangle': `Rectangle`,
+ 'trials:reading:button:reset': `Reset`,
+ 'trials:reading:button:clinicalData': `Clinical Data`,
+ 'trials:reading:button:unsaved': `Data is not saved!`,
+ 'trials:reading:button:incompleteInfor': `Incompleted data`,
+ 'trials:reading:button:split': `Split`,
+ 'trials:reading:button:customCfg': `Custom Config`,
+ 'trials:reading:tab:hotkeys': `Hotkeys`,
+ 'trials:reading:tab:wlTemplate': `W/l Template`,
+ 'trials:reading:tab:others': `Others`,
+ 'trials:reading:label:wlTplName': `Name`,
+ 'trials:reading:label:wlTplWW': `WW`,
+ 'trials:reading:label:wlTplWL': `WL`,
+ 'trials:reading:wlTemplate:delete': `Confirm to delete?`,
+ 'trials:reading:label:autoSwitch': `Automatically switch to the next TP without reminding`,
+ 'trials:reading:button:handbooks': `Handbooks`,
+ 'trials:reading:warnning:unableEvaluate': `Please confirm whether all lesions in this visit are unevaluable?`,
+ 'trials:reading:warnning:msg3': `The information of Lesion xxx is not saved. If split is executed, the information of xxx will be restored. Continue?`,
+ 'trials:reading:warnning:msg4': `Confirm to split?`,
+ 'trials:reading:warnning:msg5': `The information of Lesion xxx is not saved. Adding is not allowed.`,
+ 'trials:reading:warnning:msg6': `Use bidirectional tool to meansure nodal target lesions.`,
+ 'trials:reading:warnning:msg7': `Use diameter tool to measure non-nodal target lesions.`,
+ 'trials:reading:warnning:msg8': `Use bidirectional tool or rectangle Tool to mark nodal, non-target lesions.`,
+ 'trials:reading:warnning:msg9': `Use diameter tool or rectangle tool to measure non-nodal, non-target lesions.`,
+ 'trials:reading:warnning:msg10': `Use bidirectional tool or arrow tool or rectangle Tool to mark nodal target lesions.`,
+ 'trials:reading:warnning:msg11': `Use diameter tool or arrow tool to measure non-nodal target lesions.`,
+ 'trials:reading:warnning:msg12': `Use bidirectional tool or arrow tool to mark new nodal lesions.`,
+ 'trials:reading:warnning:msg13': `Use diameter tool or arrow tool to measure new non-nodal lesions.`,
+ 'trials:reading:warnning:msg14': `Accoding to the *** Review Criteria, the number of target lesions cannot exceed xxx.`,
+ 'trials:reading:button:removeMark': `Remove mark`,
+ 'trials:reading:warnning:msg15': `Accoding to the *** Review Criteria, the current lesion cannot be marked as a target lesion! `,
+ 'trials:reading:warnning:msg17': `The information of Lesion xxx has not been saved, & this operation is not allowed.`,
+ 'trials:reading:warnning:msg18': `The current lesion is a target lesion. No mark is allowed.`,
+ 'trials:reading:warnning:msg19': `If the state of a nodal target lesion is "Present", its short axis should be greater than 15mm. Please use bidirectional tool to mark it.`,
+ 'trials:reading:warnning:msg20': `If the state of a non-nodal target lesion is "Present", its long axis should be greater than 10mm and no less than twice the slice thickness. Please use diameter measurement tool to mark it.`,
+ 'trials:reading:warnning:msg21': `If the state of a nodal non-target lesion is "Present", please use bidirectional tool or rectangle tool to mark it.`,
+ 'trials:reading:warnning:msg22': `If the state of a non-nodal, non-target lesion is "Present", please use diameter tool or rectangle tool to mark it.`,
+ 'trials:reading:warnning:msg23': `If the state of a nodal target lesion is "Present", please use bidirectional tool to mark it.`,
+ 'trials:reading:warnning:msg24': `If the state of a non-nodal target lesion is "Present", please use diameter tool to mark it.`,
+ 'trials:reading:warnning:msg25': `If the state of a nodal target lesion is "Too small", please use arrow tool to mark it.`,
+ 'trials:reading:warnning:msg26': `If the state of a non-nodal target lesion is "Too small", please use arrow tool to mark it.`,
+ 'trials:reading:warnning:msg27': `If the state of a nodal target lesion is "NE", do not mark it.`,
+ 'trials:reading:warnning:msg28': `If the state of a non-nodal target lesion is "NE", do not mark it.`,
+ 'trials:reading:warnning:msg29': `If the state of a nodal target lesion is "Disappeared", its short axis should be less than 10mm. Please use bidirectional tool to mark it.`,
+ 'trials:reading:warnning:msg30': `If the state of a non-nodal target lesion is "Disappeared", please only use arrow tool to mark it.`,
+ 'trials:reading:warnning:msg31': `If the state of a nodal non-target lesion is "Present", please use bidirectional tool or rectangle tool to mark it.`,
+ 'trials:reading:warnning:msg32': `If the state of a non-nodal, non-target lesion is "Present", please use diameter tool or rectangle tool to mark it.`,
+ 'trials:reading:warnning:msg33': `If the state of a nodal non-target lesion is "Unequivocal progression", please use bidirectional tool or rectangle tool to mark it.`,
+ 'trials:reading:warnning:msg34': `If the state of a non-nodal, non-target lesion is "Unequivocal progression", please use diameter tool or rectangle tool to mark it.`,
+ 'trials:reading:warnning:msg35': `If the state of a nodal non-target lesion is "NE", do not mark it.`,
+ 'trials:reading:warnning:msg36': `If the state of a non-nodal, non-target lesion is "NE", do not mark it.`,
+ 'trials:reading:warnning:msg37': `If the state of a nodal, non-target lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:reading:warnning:msg38': `If the state of a non-nodal, non-target lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:reading:warnning:msg39': `If the state of a new nodal lesion is "Unequivocal", please use bidirectional tool or arrow tool to mark it.`,
+ 'trials:reading:warnning:msg40': `If the state of a new non-nodal lesion is "Unequivocal", please use diameter tool or arrow tool to mark it.`,
+ 'trials:reading:warnning:msg41': `If the state of a new nodal lesion is "Suspected", please use bidirectional tool or arrow tool to mark it.`,
+ 'trials:reading:warnning:msg42': `If the state of a new non-nodal lesion is "Suspected", please use diameter tool or arrow tool to mark it.`,
+ 'trials:reading:warnning:msg43': `If the state of a new nodal lesion is "NE", do not mark it.`,
+ 'trials:reading:warnning:msg44': `If the state of a new non-nodal lesion is "NE", do not mark it.`,
+ 'trials:reading:warnning:msg45': `If the state of a new nodal lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:reading:warnning:msg46': `If the state of a new non-nodal lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:reading:warnning:msg47': `Confirm to remove the lesion mark? `,
+ 'trials:reading:warnning:msg48': `Confirm to delete the lesion?`,
+ 'trials:reading:title:lesionType': `Lesion Type`,
+ 'trials:reading:warnning:msg49': `The current lesion is new, and hasn’t been saved. If the window is closed, all lesion informaiton will be deleted. Confirm to proceed?`,
+ 'trials:reading:warnning:msg50': `The current lesion has updated information that hasn't been saved. Confirm to proceed?`,
+ 'trials:reading:warnning:msg51': `Use diameter tool or bidirectional tool or arrow tool to measure new lesions.`,
+ 'trials:reading:warnning:msg52': `Use bidirectional tool or rectangle Tool or arrow tool to mark nodal, non-target lesions.`,
+ 'trials:reading:warnning:msg53': `Use diameter tool or rectangle tool or arrow tool to measure non-nodal, non-target lesions.`,
+ 'trials:reading:warnning:msg54': `Arrow cannot be used to mark Baseline lesions. `,
+ 'trials:reading:warnning:msg55': `Global review adjust assessment results to:`,
+ 'trials:reading:warnning:msg56': `The image does not have the necessary data to measure the length and cannot use Diameter tool. Select another tool to mark.`,
+ 'trials:reading:warnning:msg57': `"xxx" hotkeys cannot be empty!`,
+ 'trials:readingPGWC:warnning:msg1': `No. of lesions must range from 1 to 99`,
+ 'trials:readingPGWC:warnning:msg2': `For new lesions classified as “Present”, please use Arrow to add a marker.`,
+ 'trials:readingPGWC:warnning:msg3': `For previous new lesions classified as “Present”, please use Arrow to add a marker.`,
+ 'trials:readingPGWC:warnning:msg4': `For previous new lesions classified as “Benign”, please use Arrow to add a marker.`,
+ 'trials:readingPGWC:warnning:msg5': `For previous new lesions classified as “Absent”, please use Arrow to add a marker.`,
+ 'trials:readingPGWC:warnning:msg6': `For previous new lesions classified as “Not Evaluable status”, no mark is required.`,
+ 'trials:readingBM:warnning:msg01': `Use length tool to meansure target lesions.`,
+ 'trials:readingBM:warnning:msg02': `Use diameter tool or rectangle tool to measure non-target lesions.`,
+ 'trials:readingBM:warnning:msg03': `Use diameter tool or arrow tool to measure target lesions.`,
+ 'trials:readingBM:warnning:msg04': `Use diameter tool or rectangle tool or arrow tool to measure non-target lesions.`,
+ 'trials:readingBM:warnning:msg05': `Use diameter tool or arrow tool to measure new lesions.`,
+ 'trials:readingBM:warnning:msg06': `If the state of a target lesion is "Present", its long axis should be greater than 10mm and no less than twice the slice thickness. Please use diameter measurement tool to mark it.`,
+ 'trials:readingBM:warnning:msg07': `If the state of a non-target lesion is "Present", please use length tool or rectangle tool to mark it.`,
+ 'trials:readingBM:warnning:msg08': `If the state of a target lesion is "Present", please use length tool to mark it.`,
+ 'trials:readingBM:warnning:msg09': `If the state of a target lesion is "Too small", please use arrow tool to mark it.`,
+ 'trials:readingBM:warnning:msg10': `If the state of a target lesion is "NE", do not mark it.`,
+ 'trials:readingBM:warnning:msg11': `If the state of a target lesion is "Disappeared", please only use arrow tool to mark it.`,
+ 'trials:readingBM:warnning:msg12': `If the state of a non-target lesion is "Present", please use length tool or rectangle tool to mark it.`,
+ 'trials:readingBM:warnning:msg13': `If the state of a non-target lesion is "Unequivocal progression", please use diameter tool or rectangle tool to mark it.`,
+ 'trials:readingBM:warnning:msg14': `If the state of a non-target lesion is "NE", do not mark it.`,
+ 'trials:readingBM:warnning:msg15': `If the state of a non-target lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:readingBM:warnning:msg16': `If the state of a new lesion is "Unequivocal", please use diameter tool or arrow tool to mark it.`,
+ 'trials:readingBM:warnning:msg17': `If the state of a new lesion is "Suspected", please use diameter tool or arrow tool to mark it.`,
+ 'trials:readingBM:warnning:msg18': `If the state of a new lesion is "NE", do not mark it.`,
+ 'trials:readingBM:warnning:msg19': `If the state of a new lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg1': `If the state of a new nodal target lesion is "Present", please use bidirectional tool to mark it.`,
+ 'trials:iRecist:warnning:msg2': `If the state of a new non-nodal target lesion is "Present", please use diameter tool to mark it.`,
+ 'trials:iRecist:warnning:msg3': `If the state of a new nodal target lesion is "Disappeared", its short axis should be less than 10mm. Please use bidirectional tool to mark it.`,
+ 'trials:iRecist:warnning:msg4': `If the state of a new non-nodal target lesion is "Disappeared", please only use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg5': `If the state of a new nodal target lesion is "NE", do not mark it.`,
+ 'trials:iRecist:warnning:msg6': `If the state of a new non-nodal target lesion is "NE", do not mark it.`,
+ 'trials:iRecist:warnning:msg7': `If the state of a new nodal non-target lesion is "Present", please use bidirectional tool or rectangle tool to mark it.`,
+ 'trials:iRecist:warnning:msg8': `If the state of a new non-nodal non-target lesion is "Present", please use diameter tool or rectangle tool to mark it.`,
+ 'trials:iRecist:warnning:msg9': `If the state of a new nodal non-target lesion is "Progression", please use bidirectional tool or rectangle tool to mark it.`,
+ 'trials:iRecist:warnning:msg10': `If the state of a new non-nodal non-target lesion is "Progression", please use diameter tool or rectangle tool to mark it.`,
+ 'trials:iRecist:warnning:msg11': `If the state of a new nodal non-target lesion is "NE", do not mark it.`,
+ 'trials:iRecist:warnning:msg12': `If the state of a new non-nodal non-target lesion is "NE", do not mark it.`,
+ 'trials:iRecist:warnning:msg13': `If the state of a new nodal non-target lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg14': `If the state of a new non-nodal non-target lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg15': `If the state of an other previous new nodal lesion is "Unequivocal", please use bidirectional tool or arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg16': `If the state of an other previous new non-nodal lesion is "Unequivocal", please use diameter tool or arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg17': `If the state of an other previous new nodal lesion is "Suspected", please use bidirectional tool or arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg18': `If the state of an other previous new non-nodal lesion is "Suspected", please use diameter tool or arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg19': `If the state of an other previous new nodal lesion is "NE", do not mark it.`,
+ 'trials:iRecist:warnning:msg20': `If the state of an other previous new non-nodal lesion is "NE", do not mark it.`,
+ 'trials:iRecist:warnning:msg21': `If the state of a new nodal lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg22': `If the state of an other previous new non-nodal lesion is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg23': `If the state of a new nodal lesion after triggering iRECSIT is "Unequivocal", please use bidirectional tool or arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg24': `If the state of a new non-nodal lesion after triggering iRECSIT is "Unequivocal", please use diameter tool or arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg25': `If the state of a new nodal lesion after triggering iRECSIT is "Suspected", please use bidirectional tool or arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg26': `If the state of a new non-nodal lesion after triggering iRECSIT is "Suspected", please use diameter tool or arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg27': `If the state of a new nodal lesion after triggering iRECSIT is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg28': `If the state of a new non-nodal lesion after triggering iRECSIT is "Disappeared", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg29': `If the state of a new nodal lesion after triggering iRECSIT is "NE", do not mark it.`,
+ 'trials:iRecist:warnning:msg30': `If the state of a new non-nodal lesion after triggering iRECSIT is "NE", do not mark it.`,
+ 'trials:iRecist:warnning:msg31': `If the state of a new nodal target lesion is "Present", its short axis should be greater than 15mm. Please use bidirectional tool to mark it.`,
+ 'trials:iRecist:warnning:msg32': `If the state of a new non-nodal target lesion is "Present", its long axis should be greater than 10mm and no less than twice the slice thickness. Please use diameter measurement tool to mark it.`,
+ 'trials:iRecist:warnning:msg33': `If the state of a new nodal target lesion is "Too small", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg34': `If the state of a new non-nodal target lesion is "Too small", please use arrow tool to mark it.`,
+ 'trials:iRecist:warnning:msg35': `Use bidirectional tool or arrow tool to mark new nodal target lesion lesions.`,
+ 'trials:iRecist:warnning:msg36': `Use diameter tool or arrow tool to measure new non-nodal target lesions.`,
+ 'trials:iRecist:warnning:msg37': `Use bidirectional tool or rectangle Tool or arrow tool to mark new nodal non-target lesions.`,
+ 'trials:iRecist:warnning:msg38': `Use diameter tool or rectangle tool or arrow tool to measure new non-nodal, non-target lesions.`,
+ 'trials:iRecist:warnning:msg39': `Use bidirectional tool or arrow tool to mark other previous new nodal lesions.`,
+ 'trials:iRecist:warnning:msg40': `Use diameter tool or arrow tool to measure other previous new non-nodal lesions.`,
+ 'trials:iRecist:warnning:msg41': `Use bidirectional tool or arrow tool to mark new nodal lesion after triggering iRECSIT lesions.`,
+ 'trials:iRecist:warnning:msg42': `Use diameter tool or arrow tool to measure new non-nodal lesion after triggering iRECSIT lesions.`,
+ 'trials:iRecist:warnning:msg44': `Reminder`,
+ 'trials:iRecist:warnning:msg45': `You determine that the overall response of the current visit is PD. According to the *** Review Criteria, the visit trigger iRECIST review. Please re-evaluate the lesion:`,
+ 'trials:iRecist:warnning:msg46': `(1)New lesions can be converted into: New target lesions, new non-target lesions, and other previous new lesions.`,
+ 'trials:iRecist:warnning:msg47': `(2)New target lesions: Only unequivocal new lesions can be converted into new target lesions. The selection rules of new target lesions were the same as those of RECIST1.1. If the current lesion has been marked but does not meet the requirements of the new target lesion, please clear the mark and re-mark.`,
+ 'trials:iRecist:warnning:msg48': `(3)New non-target lesions: Only unequivocal new lesions can be converted into new non-target lesions. The selection rules of new target lesions were the same as those for RECIST1.1.`,
+ 'trials:iRecist:warnning:msg49': `(4)Other previous new lesions: The system will automatically convert the equivocal or disappeared new lesions into other previous new lesions. No need modification.`,
+ 'trials:globalReview:title:subject': `Subject:`,
+ 'trials:globalReview:title:result': `Global Review`,
+ 'trials:globalReview:title:clinicalData': `Clinical Data`,
+ 'trials:globalReview:button:submit': `Submit`,
+ 'trials:globalReview:table:visitName': `Visit Name`,
+ 'trials:globalReview:table:evaluationRes': `Assessment Results`,
+ 'trials:globalReview:table:isAgreeEvaluationRes': `Agree with assessment results?`,
+ 'trials:globalReview:table:adjustedRes': `Assessement Results after Adjustment`,
+ 'trials:globalReview:table:view': `View Details`,
+ 'trials:globalReview:dagTitle:adjust': `Adjust`,
+ 'trials:globalReview:title:previousRes': `Previous global review results`,
+ 'trials:globalReview:table:globalReading': `Global Review`,
+ 'trials:globalReview:table:visitRemark': `Timepoint comments`,
+ 'trials:globalReview:table:globalRemark': `Comnments`,
+ 'trials:globalReview:table:updateType': `Evaluation Update Type`,
+ 'trials:globalReview:message:msg1': `The global review hasn't been completed, and there are timepoints with unconfirmed assessment results.`,
+ 'trials:globalReview:message:msg2': `The current read has been completed. Proceed to the next one?`,
+ 'trials:hotkeys:title:hotkey': `Hotkeys`,
+ 'trials:hotkeys:message:input': `Please enter the key.`,
+ 'trials:hotkeys:message:confirmReset': `Confirm to reset?`,
+ 'trials:hotkeys:message:resetSuccessfully': `Reset successfully`,
+ 'trials:hotkeys:message:tip': `Tips:`,
+ 'trials:hotkeys:message:tip1': `This shortcut key has been bound to xxx`,
+ 'trials:reading:pcwg:msg1': `The number of new lesions has reached the limit and cannot be added`,
+ 'trials:reading:pcwg:msg2': `Use arrow tool or rectangle Tool to mark baseline lesions.`,
+ 'trials:reading:pcwg:msg3': `The maximum umber of xxx lesions cannot exceed yyy.`,
+ 'trials:reading:pcwg:msg4': `Use arrow tool or rectangle Tool to mark baseline lesions.`,
+ 'trials:reading:pcwg:msg5': `Please use arrow.`,
+ 'trials:reading:pcwg:msg6': `The initial number of baseline lesions is`,
+ 'trials:reading:pcwg:msg7': `Please mark lesions`,
+ 'trials:reading:pcwg:msg8': `The information of current lesion has been updated and not saved. Continue?`,
+ 'trials:adReview:title:subject': `Subject:`,
+ 'trials:adReview:title:result': `Assessment Result`,
+ 'trials:adReview:title:clinicalData': `Clinical Data`,
+ 'trials:adReview:table:visitName': `Visit name`,
+ 'trials:adReview:table:view': `View Details`,
+ 'trials:adReview:table:viewR1': `Reviewer 1(R1)`,
+ 'trials:adReview:table:viewR2': `Reviewer 2(R2)`,
+ 'trials:adReview:title:adResult': `Adjudication Result`,
+ 'trials:adReview:title:choseReader': `I agree with`,
+ 'trials:adReview:title:adReason': `Reason of selection`,
+ 'trials:adReview:title:screenShot': `Screenshot description`,
+ 'trials:adReview:title:adReview': `Adjudication read`,
+ 'trials:adReview:title:msg1': `I have reviewed all relevant imaging and evaluation data of the two independent reviewers. After careful consideration, I agree more with the overall assessment of the first independent reviewer (R1), because:`,
+ 'trials:adReview:title:msg3': `I have reviewed all relevant imaging and evaluation data of the two independent reviewers. After careful consideration, I agree more with the overall assessment of the second independent reviewer (R2), because:`,
+ 'trials:adReview:title:loading': `Loading`,
+ 'trials:adReview:title:previousRes': `Previous adjudication read results`,
+ 'trials:adReview:table:adReading': `Adjudication read`,
+ 'trials:adReview:table:adResult': `Adjudication result`,
+ 'trials:adReview:table:view': `View Details`,
+ 'trials:adReview:table:visitInfoview': `Visit details`,
+ 'trials:adReview:table:glInfo': `Global details`,
+ 'trials:adReview:title:msg2': `The current read has been completed. Proceed to the next one?`,
+ 'trials:adReview:title:msg4': `Must be in xxx format.`,
+ 'trials:readingReport:title:eicrf': `Electronic Imaging Case Report Form`,
+ 'trials:readingReport:title:expandDetails': `Expand Details`,
+ 'trials:readingReport:title:collapseDetails': `Collapse Details`,
+ 'trials:readingReport:button:refresh': `Refresh`,
+ 'trials:readingReport:button:jump': `Image`,
+ 'trials:readingReport:title:sysEvaluationRes': `System evaluation result:`,
+ 'trials:readingReport:message:msg1': `, is inconsistent with results of the current adjustment. Please fill in the reason for adjustment.`,
+ 'trials:readingReport:title:unknow': `Unknown`,
+ 'trials:readingReport:message:msg2': `Please complete the information of the efficacy assessment.`,
+ 'trials:readingReport:message:msg3': `Please fill in the reason for overall assessment adjustment.`,
+ 'trials:readingReport:message:msg4': `The current read has been completed. Proceed to the next one?`,
+ 'trials:readingReport:message:msg5': `The image quality assessment on the reading page is not saved. Continue to submit it?`,
+ 'trials:readingReport:message:msg6': `Accoding to *** Review Criteria, systerm suggests overall response is `,
+ 'trials:readingReport:message:msg7': `, but you adjusted to `,
+ 'trials:readingReport:message:msg8': `. Please note.`,
+ 'trials:oncologyReview:title:oncologyReview': `Oncology read`,
+ 'trials:oncologyReview:title:subject': `Subject:`,
+ 'trials:oncologyReview:title:result': `Assessment Result`,
+ 'trials:oncologyReview:button:clinicalData': `Clinical Data`,
+ 'trials:oncologyReview:title:visitName': `Visit Name`,
+ 'trials:oncologyReview:title:readingRes': `Imaging read results`,
+ 'trials:oncologyReview:title:isGlobalUpdate': `Any update to the global review?`,
+ 'trials:oncologyReview:title:view': `View Details`,
+ 'trials:oncologyReview:title:visitRemark': `Timepoint comments`,
+ 'trials:oncologyReview:title:oReviewRes': `Oncology review results`,
+ 'trials:oncologyReview:title:findings': `Conclusion`,
+ 'trials:oncologyReview:title:reason': `Reason`,
+ 'trials:oncologyReview:message:msg1': `Save failed, the conclusion of Oncology Review cannot be empty.`,
+ 'trials:oncologyReview:title:previousRes': `Previous oncology review results`,
+ 'trials:oncologyReview:title:msg2': `The current read has been completed. Proceed to the next one?`,
+ 'trials:clinicaldara:title:currentTask': `Current Read`,
+ 'trials:clinicaldara:title:nodata': `No data available`,
+ 'trials:clinicaldara:title:relatedTask': `Related Reads`,
+ 'trials:tab:title:readTask': `Completed`,
+ 'trials:readTask:table:isUrgent': `Expedited`,
+ 'trials:readTask:table:siteCode': `Site ID`,
+ 'trials:readTask:table:taskCode': `Read No.`,
+ 'trials:readTask:table:subjectCode': `Subject ID`,
+ 'trials:readTask:table:blindName': `Blind Read Mark`,
+ 'trials:readTask:table:TaskName': `Task Name`,
+ 'trials:readTask:table:criterionName': `Review Criteria`,
+ 'trials:readTask:table:taskState': `Status`,
+ 'trials:readTask:table:readingCategory': `Review Type`,
+ 'trials:readTask:table:allocateTime': `Time Assigned`,
+ 'trials:readTask:table:signTime': `Time Signed`,
+ 'trials:readTask:table:reReadingApplyState': `Application Status`,
+ 'trials:readTask:table:readingTaskState': `Read Status`,
+ 'trials:readTask:table:optType': `Impact after taking effect`,
+ 'trials:readTask:table:reader': `Independent Reviewers`,
+ 'trials:readTask:button:view': `View`,
+ 'trials:readTask:button:apply': `Apply for Re-Read`,
+ 'trials:readTask:button:backward': `History of return & Re-Read`,
+ 'trials:readTask:dagTitle:apply': `Apply for Re-Read`,
+ 'trials:readTask:title:applyReason': `Reason for application`,
+ 'trials:readTask:option:errorRecords': `Incorrect read records`,
+ 'trials:readTask:option:other': `Other`,
+ 'trials:readTask:title:remark': `Comments`,
+ 'trials:readTask:title:copyForm': `Whether to copy the eICRF of the timepoint?`,
+ 'trials:readTask:title:influenceList': `List of affected reads.`,
+ 'trials:readTask:message:msg1': `Please note that the application for re-read has been submitted successfully.`,
+ 'trials:readTask:button:reread': `Re-Read`,
+ 'trials:readTask:message:msg2': `Confirm the re-read?`,
+ 'trials:readTask:message:msg3': `Re-Read successfully!`,
+ 'trials:tab:title:medicalFeedback': `Expedited`,
+ 'trials:medicalFeedback:table:isUrgent': `Subject ID`,
+ 'trials:medicalFeedback:table:subjectCode': `Subject ID`,
+ 'trials:medicalFeedback:table:siteCode': `Site ID`,
+ 'trials:medicalFeedback:table:taskName': `Read Name`,
+ 'trials:medicalFeedback:table:taskBlindName': `Blind Read mark`,
+ 'trials:medicalFeedback:table:taskName': `TaskName`,
+ 'trials:medicalFeedback:table:armEnum': `Role`,
+ 'trials:medicalFeedback:table:reader': `Independent Reviewers`,
+ 'trials:medicalFeedback:table:criterionName': `Review Criteria`,
+ 'trials:medicalFeedback:table:readingCategory': `Review Type`,
+ 'trials:medicalFeedback:table:taskState': `Read Task Status`,
+ 'trials:medicalFeedback:table:auditState': `Review Status`,
+ 'trials:medicalFeedback:table:signTime': `Time Signed`,
+ 'trials:medicalFeedback:table:allocateTime': `Time Assigned`,
+ 'trials:medicalFeedback:table:firstReplyTime': `Time of first inquiry`,
+ 'trials:medicalFeedback:table:lastReplyTime': `Time of the last response`,
+ 'trials:medicalFeedback:table:isInvalid': `Review Task Status`,
+ 'trials:medicalFeedback:table:auditSignTime': `Time Signed`,
+ 'trials:medicalFeedback:table:auditAdvice': `Medical Review Comments`,
+ 'trials:medicalFeedback:table:doctorUserIdea': `Agree`,
+ 'trials:medicalFeedback:table:view': `View`,
+ 'trials:medicalFeedback:table:reply': `Reply`,
+ 'trials:medicalFeedback:title:mfDetail': `Medical Review Details`,
+ 'trials:medicalFeedback:title:qaRecord': `Query Record`,
+ 'trials:medicalFeedback:table:visitPointCount': `Timepoint Counts`,
+ 'trials:medicalFeedback:table:unKnow': `Unknown`,
+ 'trials:medicalFeedback:table:agreeToVisitPointCount': `Agree with Timepoint Counts?`,
+ 'trials:medicalFeedback:table:assessmentResults': `Assessment Result`,
+ 'trials:medicalFeedback:message:msg1': `According to the medical review comments, please confirm or clarify the following questions:`,
+ 'trials:medicalFeedback:message:msg2': `Screenshots of this medical review (if applicable) are as following:`,
+ 'trials:medicalFeedback:message:msg3': `According to the *** Review Criteria, the medical review comments for this kind of problems are recommended as:`,
+ 'trials:medicalFeedback:message:msg4': `In order to solve the above problems efficiently, please ensure the accuracy of the assessment result and clarify whether to accept the medical review conclusion. If you do not agree with it, please specify the reasons for disapproval one by one. Thank you very much.`,
+ 'trials:medicalFeedback:title:isEndorse': `Agree the Medical Concusion`,
+ 'trials:medicalFeedback:title:isRequestReread': `Apply for re-read?`,
+ 'trials:medicalFeedback:message:msg5': `Screenshots of this medical review (if applicable) are as following:`,
+ 'trials:medicalFeedback:message:loading': `Loading`,
+ 'trials:medicalFeedback:title:feedback': `Feedback`,
+ 'trials:medicalFeedback:form:isEndorse': `Agree the Medical Concusion`,
+ 'trials:medicalFeedback:form:isRequestReread': `Apply for re-read?`,
+ 'trials:medicalFeedback:form:applyReason': `Reason for application`,
+ 'trials:medicalFeedback:form:errorRecords': `Incorrect reading record`,
+ 'trials:medicalFeedback:form:other': `Other`,
+ 'trials:medicalFeedback:form:remark': `Remarks`,
+ 'trials:medicalFeedback:form:isCopyForm': `Reason for Application`,
+ 'trials:medicalFeedback:form:isCopyForm2': `Copy eICRF of Subsequent Visit Reads`,
+ 'trials:medicalFeedback:form:screenShot': `Releated Screenshots`,
+ 'trials:medicalFeedback:button:send': `Send`,
+ 'trials:medicalFeedback:message:format': `Must be in xxxx format.`,
+ 'trials:medicalFeedback:title:result': `Assessment Result`,
+ 'trials:medicalFeedback:button:audit': `Review`,
+ 'trials:medicalFeedback:title:conclusion': `Conclusion`,
+ 'trials:medicalFeedback:title:reason': `Reason:`,
+ 'trials:medicalFeedback:title:isGlobalChange': `Any updates?`,
+ 'trials:medicalFeedback:title:currentReaderType': `undefined`,
+ 'trials:medicalFeedback:title:currentReader': `Current Reviewers`,
+ 'trials:medicalFeedback:title:otherReader': `Related Reviewers`,
+ 'trials:medicalFeedback:title:auditQuestions': `Review Questions`,
+ 'trials:medicalFeedback:title:conclusions': `Conclusion`,
+ 'trials:medicalFeedback:button:saveAndSend': `Save & Send`,
+ 'trials:medicalFeedback:button:viewQuestions': `View the Query`,
+ 'trials:medicalFeedback:button:reply': `Reply`,
+ 'trials:medicalFeedback:button:close': `Close`,
+ 'trials:medicalFeedback:button:isQuestions': `Any Issue?`,
+ 'trials:medicalFeedback:title:qcQuestions': `Query Questions`,
+ 'trials:medicalFeedback:title:auditAdviceEnum': `Review Comments`,
+ 'trials:medicalFeedback:title:closeQc': `Close Query`,
+ 'trials:medicalFeedback:button:auditCompleted': `Review Completed`,
+ 'trials:medicalFeedback:button:nextTask': `Next Task`,
+ 'trials:medicalFeedback:message:closeQC': `Medical review has not completed, please close the medical query first.`,
+ 'trials:medicalFeedback:form:influenceList': `List of affected reads.`,
+ 'trials:medicalFeedback:message:confirmTemplate': `Please confirm the medical audit question template configuration first!`,
+ 'trials:medicalFeedback:label:closeReasonEnum': `Reason of close`,
+ 'trials:medicalFeedback:title:closeReasonEnum': `Reason of close:`,
+ 'trials:medicalFeedback:label:closereasonRemarks': `Remarks`,
+ 'trials:medicalFeedback:title:closereasonRemarks': `Remarks:`,
+ 'trials:medicalFeedback:title:relatedGlobalTask': `Related Global read`,
+ 'trials:medicalFeedback:title:relatedadjudicationTask': `Related Adjudication read`,
+ 'trials:medicalFeedback:message:goNextTask01': `The current medical review has completed. Next medical review?`,
+ 'trials:medicalFeedback:message:goNextTask02': `Next medical review?`,
+ 'trials:medicalFeedback:message:goNextTask03': `The current medical review has not completed. Next medical review?`,
+ 'trials:tab:title:rereadTask': `Return History`,
+ 'trials:rereadTask:table:isUrgent': `Expedited`,
+ 'trials:rereadTask:table:taskCode': `Read No.`,
+ 'trials:rereadTask:table:siteCode': `Site ID`,
+ 'trials:rereadTask:table:subjectCode': `Subject ID`,
+ 'trials:rereadTask:table:taskBlindName': `Blind Read Mark`,
+ 'trials:rereadTask:table:taskName': `Task Name`,
+ 'trials:rereadTask:table:criterionName': `Review Criteria`,
+ 'trials:rereadTask:table:taskState': `Read Task Status`,
+ 'trials:rereadTask:table:readingCategory': `Review Type`,
+ 'trials:rereadTask:table:signTime': `Time Completed`,
+ 'trials:rereadTask:table:requestReReadingType': `Type of Application`,
+ 'trials:rereadTask:table:requestReReadingTime': `Application Time`,
+ 'trials:rereadTask:table:requestReReadingReason': `Apply for Re-Read`,
+ 'trials:rereadTask:table:requestReReadingResultEnum': `Approved Results
+`,
+ 'trials:rereadTask:table:reReadingNewTaskCode': `New Read No.
+`,
+ 'trials:tab:reviewAssign': `Reads Assignment`,
+ 'trials:reviewAssign:searchForm:reader': `Reviewer`,
+ 'trials:reviewAssign:button:assignRules': `Assignment Rules`,
+ 'trials:reviewAssign:button:manualAllocation': `Manual Assignment`,
+ 'trials:reviewAssign:button:visitReadingTasks': `Visit/Global/Oncology Read`,
+ 'trials:reviewAssign:button:adReadingTasks': `Adjudication Read`,
+ 'trials:reviewAssign:table:siteCode': `Site ID`,
+ 'trials:reviewAssign:table:subjectCode': `Subject ID`,
+ 'trials:reviewAssign:table:visit': `Visit`,
+ 'trials:reviewAssign:table:global': `Global`,
+ 'trials:reviewAssign:table:ad': `Adjudication`,
+ 'trials:reviewAssign:table:oncology': `Oncology`,
+ 'trials:reviewAssign:table:r1': `Reviewer 1(R1)`,
+ 'trials:reviewAssign:table:r2': `Reviewer 2(R2)`,
+ 'trials:reviewAssign:table:ad': `Adjudicator`,
+ 'trials:reviewAssign:table:o1': `Oncology Reviewer`,
+ 'trials:reviewAssign:tableAction:manualAssignment': `Manual Assignment`,
+ 'trials:reviewAssign:tableAction:clearReaders': `Cancell Reviewers`,
+ 'trials:reviewAssign:tableAction:viewHistory': `View Cancell History`,
+ 'trials:trials-panel:taskAllocation': `Visit Reads Assignment`,
+ 'trials:trials-panel:reading': `Read`,
+ 'trials:trials-panel:refereeAllocation': `Adjudication Read Assignment`,
+ 'trials:reviewAssign:dialog:allocationRules': `Assignment Rules`,
+ 'trials:reviewAssign:allocationRules:title:readersList': `List of Reviewers`,
+ 'trials:reviewAssign:allocationRules:table:reader': `Reviewers`,
+ 'trials:reviewAssign:allocationRules:table:plannedCount': `No. of Potential Subjects`,
+ 'trials:reviewAssign:allocationRules:table:readingType': `Review Type`,
+ 'trials:reviewAssign:allocationRules:table:status': `Status`,
+ 'trials:reviewAssign:allocationRules:table:remark': `Note`,
+ 'trials:reviewAssign:allocationRules:title:subsequentAllocationRules': `Rules of Subsequent Reads Assignment `,
+ 'trials:reviewAssign:allocationRules:message1': `Default: Assign visit reads of the same subject automatically`,
+ 'trials:reviewAssign:allocationRules:message2': `Default: Assign visit reads of the same subject automatically`,
+ 'trials:reviewAssign:allocationRules:message3': `Default: Assign global reads of the same subject automatically`,
+ 'trials:reviewAssign:allocationRules:message4': `Default: Assign the second adjudication reads of the same subject automatically`,
+ 'trials:reviewAssign:allocationRules:edit': `Edit`,
+ 'trials:reviewAssign:allocationRules:add': `Add`,
+ 'trials:reviewAssign:dialog:assignReader': `Assign Reviewers`,
+ 'trials:reviewAssign:assignReader:title:readingModel': `Read Mode of Current Trial`,
+ 'trials:reviewAssign:assignReader:title:r1': `Reviewer 1 (R1)`,
+ 'trials:reviewAssign:assignReader:title:r2': `Reviewer 2 (R2)`,
+ 'trials:reviewAssign:assignReader:title:ad': `Adjudicator`,
+ 'trials:reviewAssign:assignReader:title:o1': `Oncology Reviewer`,
+ 'trials:reviewAssign:assignReader:table:reader': `Reviewer`,
+ 'trials:reviewAssign:assignReader:table:plannedSubjectCount': `No. of Scheduled Subject`,
+ 'trials:reviewAssign:assignReader:table:assignedSubjectCount': `No. of Assigned Subjects`,
+ 'trials:reviewAssign:assignReader:table:readingType': `Review Type`,
+ 'trials:reviewAssign:assignReader:table:pengdingTaskCount': `Pending Reads (in total)`,
+ 'trials:reviewAssign:assignReader:table:pengdingTrialsTaskCount': `Pending Reads (in this trial)`,
+ 'trials:reviewAssign:assignReader:table:averageReadingTime': `Average Turnaround Time ( exclude outliers) `,
+ 'trials:reviewAssign:assignReader:table:status': `Status`,
+ 'trials:reviewAssign:assignReader:table:remark': `Note`,
+ 'trials:reviewAssign:dialog:clearReader': `Unassign Reviewer`,
+ 'trials:reviewAssign:clearReader:title:clearAll': `Unassign All Unread Reviewer`,
+ 'trials:reviewAssign:clearReader:title:r1': `Reviewer 1(R1)`,
+ 'trials:reviewAssign:clearReader:title:r2': `Reviewer 2(R2)`,
+ 'trials:reviewAssign:clearReader:title:ad': `Adjudicator`,
+ 'trials:reviewAssign:clearReader:title:O1': `Oncology Reviewer`,
+ 'trials:reviewAssign:clearReader:title:msg1': `The reviewer who has begun to read can not be Unassigned`,
+ 'trials:reviewAssign:clearReader:title:reason': `Reason`,
+ 'trials:reviewAssign:clearReader:title:cancelReader': `Unassign Reviewer`,
+ 'trials:reviewAssign:clearReader:title:msg2': `All reviewers had been unassigned, please save.`,
+ 'trials:reviewAssign:clearReader:title:msg3': `No reviewer can be Unassigned.`,
+ 'trials:reviewAssign:dialog:cancelHistory': `Cancel History`,
+ 'trials:reviewAssign:cancelHistory:table:cancelTime': `Time Canceled`,
+ 'trials:reviewAssign:cancelHistory:table:cancelReason': `Reason`,
+ 'trials:reviewAssign:message:message01': `Confirm to assign it?`,
+ 'trials:reviewAssign:message:message02': `Confirm to cancel the assignment?`,
+ 'trials:reviewAssign:message:message03': `Be Effective Now!`,
+ 'trials:reviewAssign:message:message04': `No reviewer is available in this trial`,
+ 'trials:reviewAssign:message:message05': `Confirm to assign it automatically?`,
+ 'trials:reviewAssign:message:message06': `Assigned automatically!`,
+ 'trials:reviewAssign:message:message07': `Please select reviewer`,
+ 'trials:reviewAssign:message:message08': `The current read mode is xxx, please select the proper number of reviewers.`,
+ 'trials:reviewAssign:message:message09': `Assigned successfully!`,
+ 'trials:reviewAssign:message:message10': `Please select a subject to assign.`,
+ 'trials:reviewAssign:message:message11': `Confirm to delete?`,
+ 'trials:reviewAssign:readingTask:table:isUrgent': `Expedited`,
+ 'trials:reviewAssign:readingTask:table:taskCode': `Read No.`,
+ 'trials:reviewAssign:readingTask:table:siteCode': `Site ID`,
+ 'trials:reviewAssign:readingTask:table:subjectCode': `Subject ID`,
+ 'trials:reviewAssign:readingTask:table:visitName': `Visit/Review Period Name`,
+ 'trials:reviewAssign:readingTask:table:blindName': `Blind Read Mark`,
+ 'trials:reviewAssign:readingTask:table:createTime': `Read Creation Time`,
+ 'trials:reviewAssign:readingTask:table:taskStatus': `Read Task Satus`,
+ 'trials:reviewAssign:readingTask:table:taskType': `Review Type`,
+ 'trials:reviewAssign:readingTask:table:assignStatus': `Assignment Status`,
+ 'trials:reviewAssign:readingTask:table:role': `Role`,
+ 'trials:reviewAssign:readingTask:table:reader': `Reviewer`,
+ 'trials:reviewAssign:readingTask:table:criterionName': `Review Criteria`,
+ 'trials:reviewAssign:readingTask:table:assignTime': `Time Assigned`,
+ 'trials:reviewAssign:readingTask:table:adReader': `Adjudicator`,
+ 'trials:reviewAssign:readingTask:table:historyReader': `Previous Reviewer`,
+ 'trials:tab:reviewTrack': `Read Tracking`,
+ 'trials:reviewTrack:table:isUrgent': `Expedited`,
+ 'trials:reviewTrack:table:taskCode': `Read No.`,
+ 'trials:reviewTrack:table:siteCode': `Site ID`,
+ 'trials:reviewTrack:table:subjectCode': `Subject ID`,
+ 'trials:reviewTrack:table:taskName': `Read Name`,
+ 'trials:reviewTrack:table:blindName': `Blind Read Mark`,
+ 'trials:reviewTrack:table:completeClinicalDataEnum': `Clinical Data Completeness`,
+ 'trials:reviewTrack:table:createTime': `Time Created`,
+ 'trials:reviewTrack:table:taskStatus': `Read Task Status`,
+ 'trials:reviewTrack:table:taskType': `Review Type`,
+ 'trials:reviewTrack:table:role': `Role`,
+ 'trials:reviewTrack:table:reader': `Reviewer`,
+ 'trials:reviewTrack:table:criterionName': `Review Criteria`,
+ 'trials:reviewTrack:table:assignTime': `Time Assigned`,
+ 'trials:reviewTrack:table:suggesteFinishedTime': `Suggested Finish Time`,
+ 'trials:reviewTrack:table:readingStatus': `Read Status`,
+ 'trials:reviewTrack:table:signTime': `Time Completed `,
+ 'trials:reviewTrack:table:applyStatus': `Re-Read Application Status`,
+ 'trials:reviewTrack:table:auditStatus': `undefined`,
+ 'trials:reviewTrack:action:viewResults': `Review Result`,
+ 'trials:reviewTrack:action:applyReread': `Apply for Re-Read`,
+ 'trials:reviewTrack:action:backToRereadHistory': `Re-Read History`,
+ 'trials:reviewTrack:action:back': `Return`,
+ 'trials:reviewTrack:action:backToTaskList': `Read Queue affected by return`,
+ 'trials:reviewTrack:dialog:applyReread': `Apply for Re-Read`,
+ 'trials:reviewTrack:applyReread:title:applyReason': `Application Reason`,
+ 'trials:reviewTrack:applyReread:title:ImageRetransfer': `Re-upload Image`,
+ 'trials:reviewTrack:applyReread:title:other': `Other`,
+ 'trials:reviewTrack:applyReread:title:remark': `Note`,
+ 'trials:reviewTrack:applyReread:title:influencesList': `Affected read Queue`,
+ 'trials:reviewTrack:applyReread:title:postEffectiveImpacts': `Impacts after being effective`,
+ 'trials:reviewTrack:applyReread:title:msg1': `Note: there's read which had been applied for Re-Read in the queue.`,
+ 'trials:reviewTrack:dialog:backImpactList': `Reads Queue Affected by Return`,
+ 'trials:reviewTrack:dialog:impactList': `Affected Read Queue`,
+ 'trials:reviewTrack:impactList:save': `Confirm`,
+ 'trials:reviewTrack:message:returnedSuccessfully': `Returned Successfully`,
+ 'trials:reviewTrack:message:ImageRetransfer': `Reupload Image`,
+ 'trials:reviewTrack:message:applyedSuccessfully': `Re-Read Applied Successfully`,
+ 'trials:reviewTrack:message:urgentReason': `Reason for Expediting`,
+ 'trials:reviewTrack:message:urgentReasonNote': `Note`,
+ 'trials:reviewTrack:button:export': `Export`,
+ 'trials:reviewTrack:title:fileName': `Filename`,
+ 'trials:reviewTrack:title:download': `Download`,
+ 'trials:tab:rereadTrack': `Re-Read Tracking`,
+ 'trials:rereadTrack:table:isUrgent': `Expedited`,
+ 'trials:rereadTrack:table:taskCode': `Read No.`,
+ 'trials:rereadTrack:table:siteCode': `Site ID`,
+ 'trials:rereadTrack:table:subjectCode': `Subject ID`,
+ 'trials:rereadTrack:table:taskName': `Read Name`,
+ 'trials:rereadTrack:table:blindName': `Blind Read Mark`,
+ 'trials:rereadTrack:table:createTime': `Read Creation Time`,
+ 'trials:rereadTrack:table:taskStatus': `Read Task Status`,
+ 'trials:rereadTrack:table:taskType': `Review Type`,
+ 'trials:rereadTrack:table:role': `Role`,
+ 'trials:rereadTrack:table:reader': `Reviewer`,
+ 'trials:rereadTrack:table:criterionName': `Review Criteria`,
+ 'trials:rereadTrack:table:signTime': `Time Read Completed `,
+ 'trials:rereadTrack:table:applyType': `Application Type`,
+ 'trials:rereadTrack:table:applyTime': `Time Re-Read Applied`,
+ 'trials:rereadTrack:table:applyReason': `Application Reason`,
+ 'trials:rereadTrack:table:approvalResult': `Approval Result`,
+ 'trials:rereadTrack:table:newTaskCode': `New Read No.`,
+ 'trials:rereadTrack:table:agree': `Agree`,
+ 'trials:rereadTrack:table:reject': `Reject`,
+ 'trials:rereadTrack:table:influenceTaskList': `Affected Read Queue`,
+ 'trials:rereadTrack:table:ReReadingApplyState': `Application Status`,
+ 'trials:rereadTrack:dialog:reject': `Reject`,
+ 'trials:rereadTrack:reject:title:reason': `Reject Reason`,
+ 'trials:rereadTrack:message:msg1': `Confirm to apply for re-read?`,
+ 'trials:rereadTrack:message:msg2': `Re-Read Applied Successfully`,
+ 'trials:rereadTrack:message:msg3': `Application was Agreed!`,
+ 'trials:rereadTrack:message:msg4': `Application was Rejected!`,
+ 'trials:tab:pmMedicalReview': `Medical Review`,
+ 'trials:pmMedicalReview:table:isUrgent': `Expedited`,
+ 'trials:pmMedicalReview:table:taskCode': `Read No.`,
+ 'trials:pmMedicalReview:table:siteCode': `Site ID`,
+ 'trials:pmMedicalReview:table:subjectCode': `Subject ID`,
+ 'trials:pmMedicalReview:table:taskName': `Read Name`,
+ 'trials:pmMedicalReview:table:blindName': `Blind Read Mark`,
+ 'trials:pmMedicalReview:table:taskType': `Review Type`,
+ 'trials:pmMedicalReview:table:taskState': `Read Task Status`,
+ 'trials:pmMedicalReview:table:role': `Role`,
+ 'trials:pmMedicalReview:table:reader': `Reviewer`,
+ 'trials:pmMedicalReview:table:criterionName': `Review Criteria`,
+ 'trials:pmMedicalReview:table:signTime': `Read Completed Time`,
+ 'trials:pmMedicalReview:table:mim': `Medical Manager`,
+ 'trials:pmMedicalReview:table:allocateTime': `Time Assigned`,
+ 'trials:pmMedicalReview:table:isInvalid': `Status`,
+ 'trials:pmMedicalReview:table:auditState': `Review Status`,
+ 'trials:pmMedicalReview:table:auditAdvice': `Review Comments`,
+ 'trials:pmMedicalReview:table:whetherAgree': `Reviewer Agrees`,
+ 'trials:pmMedicalReview:table:auditSignTime': `Time Signed`,
+ 'trials:pmMedicalReview:action:view': `View`,
+ 'trials:pmMedicalReview:action:failure': `Invalidate`,
+ 'trials:pmMedicalReview:action:assign': `undefined`,
+ 'trials:pmMedicalReview:action:cancelAssign': `undefined`,
+ 'trials:pmMedicalReview:button:select': `Select`,
+ 'trials:pmMedicalReview:select:isUrgent': `Expedited`,
+ 'trials:pmMedicalReview:select:taskCode': `Read No.`,
+ 'trials:pmMedicalReview:select:siteCode': `Site ID`,
+ 'trials:pmMedicalReview:select:subjectCode': `Subject ID`,
+ 'trials:pmMedicalReview:select:subjectSecondCode': `Second ID of Subject`,
+ 'trials:pmMedicalReview:select:taskName': `Read name`,
+ 'trials:pmMedicalReview:select:taskBlindName': `Blind Read Mark`,
+ 'trials:pmMedicalReview:select:taskType': `Review Type`,
+ 'trials:pmMedicalReview:select:role': `Role`,
+ 'trials:pmMedicalReview:select:reader': `Reviewer`,
+ 'trials:pmMedicalReview:select:criterionName': `Review Criteria`,
+ 'trials:pmMedicalReview:select:signTime': `Time Read Completed`,
+ 'trials:pmMedicalReview:select:readingDurationTime': `Read Duration Time`,
+ 'trials:pmMedicalReview:select:isGeneratedJudge': `Trigger Adjudication `,
+ 'trials:pmMedicalReview:select:globalReadingChanged': `Corrected in Global Read`,
+ 'trials:pmMedicalReview:select:auditCount': `No. of Reviews`,
+ 'trials:pmMedicalReview:select:allocation': `Assign`,
+ 'trials:pmMedicalReview:select:batchAllocation': `Batch Assign`,
+ 'trials:pmMedicalReview:allocation:aliocationMIM': `Assign Medical Manager`,
+ 'trials:pmMedicalReview:allocation:MIM': `Medical Manager`,
+ 'trials:pmMedicalReview:allocation:msg1': `Please select a medical review to be assigned.`,
+ 'trials:pmMedicalReview:dialog:medicalReview': `Medical Review Details`,
+ 'trials:pmMedicalReview:button:setInvalid': `Set Medical Review Status as Invalid`,
+ 'trials:pmMedicalReview:message:msg01': `Please select medical review.`,
+ 'trials:pmMedicalReview:message:msg02': `Confirm to set the medical review status as invalid?`,
+ 'trials:pmMedicalReview:message:msg03': `Set Successfully!`,
+ 'trials:pmMedicalReview:message:msg04': `Please select medical review to be assigned.`,
+ 'trials:pmMedicalReview:message:msg05': `Confirm to cancel the assignment?`,
+ 'trials:pmMedicalReview:message:msg06': `Assignment cancelled!`,
+ 'trials:tab:consistencyAnalysis': `Consistency Analysis`,
+ 'trials:consistencyAnalysis:table:isUrgent': `Expedited`,
+ 'trials:consistencyAnalysis:table:taskCode': `Read No.`,
+ 'trials:consistencyAnalysis:table:siteCode': `Site ID`,
+ 'trials:consistencyAnalysis:table:subjectCode': `Subject ID`,
+ 'trials:consistencyAnalysis:table:impact': `Impact`,
+ 'trials:consistencyAnalysis:table:taskName': `Read Name`,
+ 'trials:consistencyAnalysis:table:taskBlindName': `Blind Read Mark`,
+ 'trials:consistencyAnalysis:table:taskType': `Review Type`,
+ 'trials:consistencyAnalysis:table:category': `Consistency Analysis Type`,
+ 'trials:consistencyAnalysis:table:role': `Role`,
+ 'trials:consistencyAnalysis:table:reader': `Reviewer`,
+ 'trials:consistencyAnalysis:table:criterionName': `Review Criteria`,
+ 'trials:consistencyAnalysis:table:taskStatus': `Read Task Status`,
+ 'trials:consistencyAnalysis:table:auditTime': `Time Assigned`,
+ 'trials:consistencyAnalysis:table:suggesteFinishedTime': `Suggested Read Time`,
+ 'trials:consistencyAnalysis:table:reviewStatus': `Read Status`,
+ 'trials:consistencyAnalysis:table:signTime': `Read Complete Time`,
+ 'trials:consistencyAnalysis:table:applyStatus': `Application Stattus`,
+ 'trials:consistencyAnalysis:table:impactInfluence': `Affected by Return`,
+ 'trials:consistencyAnalysis:action:view': `Read Result`,
+ 'trials:consistencyAnalysis:action:setInvalid': `Set read status as Invalid`,
+ 'trials:consistencyAnalysis:button:self': `Inner-Reviewer Consistency Analysis`,
+ 'trials:consistencyAnalysis:button:group': `Inter-Reviewers Consistency Analysis`,
+ 'trials:consistencyAnalysis:title:impactInfluence': `Affected by Return`,
+ 'trials:consistencyAnalysis:message:selectCriterion': `Please select a review criteria.`,
+ 'trials:selftConsistencyAnalysis:button:config': `Config the Rule of Inner-Reviewer Consistency Analysis`,
+ 'trials:selftConsistencyAnalysis:table:reader': `Reviewer`,
+ 'trials:selftConsistencyAnalysis:table:visitNum': `No. of Visits`,
+ 'trials:selftConsistencyAnalysis:table:intervalPeriod': `Interval Period (week)`,
+ 'trials:selftConsistencyAnalysis:table:isReadingPeriod': `Selected Visits set Review Period `,
+ 'trials:selftConsistencyAnalysis:table:isGenerateGlobalTask': `Global Read Generated`,
+ 'trials:selftConsistencyAnalysis:table:plannedSubjectNum': `No. of Scheduled Subjects`,
+ 'trials:selftConsistencyAnalysis:table:createdSubjectNum': `No. of Created Subjects`,
+ 'trials:selftConsistencyAnalysis:button:select': `Select`,
+ 'trials:consistencyAnalysis:button:exportSelf': `Export Inner-Reviewer Consistency Analysis`,
+ 'trials:grouptConsistencyAnalysis:button:config': `Config the Rule of Inter-Reviewers Consistency Analysis`,
+ 'trials:grouptConsistencyAnalysis:table:siteCode': `Site ID`,
+ 'trials:grouptConsistencyAnalysis:table:subjectCode': `Subject ID`,
+ 'trials:grouptConsistencyAnalysis:table:validVisitCount': `No. of Visits Met to Rules`,
+ 'trials:grouptConsistencyAnalysis:button:create': `Create`,
+ 'trials:grouptConsistencyAnalysis:table:backImpact': `Affected by Return`,
+ 'trials:grouptConsistencyAnalysis:message:msg1': `Please select the subject`,
+ 'trials:consistencyAnalysis:button:exportGroup': `Export Inner-Reviewers Consistency Analysis`,
+ 'trials:consistencyAnalysisRule:table:visitNum': `No. of Visits`,
+ 'trials:consistencyAnalysisRule:table:isReadingPeriod': `Presence of Review Period`,
+ 'trials:consistencyAnalysisRule:table:intervalPeriod': `Interval Period (week)`,
+ 'trials:consistencyAnalysisRule:table:plannedNum': `No. of Scheduled Subjects`,
+ 'trials:consistencyAnalysisRule:table:siteCode': `Virtual Site ID`,
+ 'trials:consistencyAnalysisRule:table:subjectNum': `Virtual Subject ID`,
+ 'trials:consistencyAnalysisRule:table:isGenerateGlobalTask': `Global Read Generated`,
+ 'trials:consistencyAnalysis:dialog:selectSubject': `Subject Selection`,
+ 'trials:consistencyAnalysis:dialog:applyReread': `Apply for Re-Read`,
+ 'trials:consistencyAnalysis:applyReread:reason': `Application Reason`,
+ 'trials:consistencyAnalysis:applyReread:imageReload': `Reupload Image`,
+ 'trials:consistencyAnalysis:applyReread:other': `Other`,
+ 'trials:consistencyAnalysis:applyReread:remark': `Note`,
+ 'trials:consistencyAnalysis:applyReread:msg1': `Confirm to set the consistency analysis read as invalid?`,
+ 'trials:consistencyAnalysis:applyReread:msg2': `Set Successfully!`,
+ 'trials:consistencyAnalysis:applyReread:msg3': `Re-Read Applied Successfully`,
+ 'trials:trials-panel:reading:hotkeys': `Reading Tool Configuration`,
+ 'trials:dicom-show:nowStudy': `Current Study`,
+ 'trials:dicom-show:relevanceStudy': `Associated Stuies`,
+ 'trials:dicom-show:nowSeries': `Current Series`,
+ 'trials:dicom-show:transform': `Associated Series`,
+ 'trials:dicom-show:lens': `Magnify`,
+ 'trials:dicom-show:measurementLabeling': `Measurement & Mark`,
+ 'trials:dicom-show:Probe': `Probe`,
+ 'trials:dicom-show:Length': `Diameter`,
+ 'trials:dicom-show:Angle': `Angle`,
+ 'trials:dicom-show:CobbAngle': `Cobb Angle`,
+ 'trials:dicom-show:EllipticalRoi': `Ellipse`,
+ 'trials:dicom-show:RectangleRoi': `Rectangle`,
+ 'trials:dicom-show:FreehandRoi': `Polygon`,
+ 'trials:dicom-show:Bidirectional': `Bidirectional `,
+ 'trials:dicom-show:ArrowAnnotate': `Text`,
+ 'trials:dicom-show:Eraser': `Clear`,
+ 'trials:dicom-show:image': `Screenshot`,
+ 'trials:dicom-show:play': `Play`,
+ 'trials:dicom-show:firstframe': `First`,
+ 'trials:dicom-show:previousframe': `Previous`,
+ 'trials:dicom-show:nextframe': `Next`,
+ 'trials:dicom-show:lastframe': `Last`,
+ 'trials:dicom-show:default': `Default`,
+ 'trials:dicom-show:dicomCanvasWwwc': `W/L`,
+ 'trials:dicom-show:custom': `Custom`,
+ 'trials:dicom-show:pseudocolor': `Palette Colors`,
+ 'trials:dicom-show:color': `Color`,
+ 'trials:trials-panel:attachments:spm-enrollment': `Reviewer Selection`,
+ 'trials:none-dicom-show:fileList': `File List`,
+ 'trials:trials-panel:taskAllocation': `Visit Read Assignment`,
+ 'trials:trials-panel:reading': `Read`,
+ 'trials:trials-panel:refereeAllocation': `Adjudication Read Assignment`,
+ 'trials:trials-panel:readingTracking': `Read Tracking`,
+ 'trials:trials-panel:reReadingTracking': `Re-Read Approval`,
+ 'trials:trials-panel:tab:pmMedicalFeedback': `Medical Review`,
+ 'trials:trials-panel:reading:consistency-analysis': `Consistency Analysis`,
+ 'trials:trials-panel:attachments:reReadingTracking': `Re-Read Approval`,
+ 'trials:trials-panel:tab:pendingReview': `undefined`,
+ 'trials:pendingReview:title:urgentReason': `undefined`,
+ 'trials:pendingReview:title:urgentNote': `undefined`,
+ 'trials:pendingReview:table:auditResult': `undefined`,
+ 'trials:pendingReview:button:audit': `undefined`,
+ 'trials:pendingReview:button:enrollmentConfirm': `undefined`,
+ 'trials:pendingReview:button:pdConfirm': `undefined`,
+ 'trials:pendingReview:button:auditRecords': `undefined`,
+ 'trials:pendingReview:title:notAgreeReason': `undefined`,
+ 'trials:pendingReview:title:note': `undefined`,
+ 'trials:pendingReview:title:screenshots': `undefined`,
+ 'trials:pendingReview:button:modify': `undefined`,
+ 'trials:pendingReview:button:confirm': `undefined`,
+ 'trials:trials-panel:tab:reviewed': `undefined`,
+ 'trials:trials-panel:title:audit': `undefined`,
+ 'trials:trials-panel:tab:audit-record': `undefined`,
+ 'trials:auditRecord:table:creator': `undefined`,
+ 'trials:auditRecord:table:createTime': `undefined`,
+ 'trials:auditRecord:table:isEnrollment': `undefined`,
+ 'trials:auditRecord:table:isPDConfirm': `undefined`,
+ 'trials:auditRecord:table:latestReplyUserName': `undefined`,
+ 'trials:auditRecord:table:latestReplyTime': `undefined`,
+ 'trials:auditRecord:table:readingResult': `undefined`,
+ 'trials:auditRecord:table:auditRecords': `undefined`,
+ 'trials:auditRecord:table:auditResult': `undefined`,
+ 'trials:auditRecord:title:auditResult': `undefined`,
+ 'trials:auditRecord:title:notAgreeReason': `undefined`,
+ 'trials:auditRecord:title:note': `undefined`,
+ 'trials:auditRecord:title:screenshot': `undefined`,
+ 'trials:trials-panel:tab:confirmation': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:button:apply': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:qsName': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:qsNameEn': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:groupName': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:groupNameEn': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:type': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:options': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:isDisplay': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:isRequired': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:decimalPlaces': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:unit': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:cutOffDate': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:isDependence': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:displayTriggerVal': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:isStudyDate': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:maxLength': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:maxRowCount': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:maxUploadCount': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:orderNum': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:optionsValidate': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:birthDay': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:button:view': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:button:tblQuestion': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:preview': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:msg:applySuccesssfully': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:add': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:view': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:edit': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:msg:delSuccessfully': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:tblQs': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:msg:options': `undefined`,
+ 'trials:trials-config:clinicalDataQuestionCfg:msg:questionOfHomonyms': `undefined`,
+ 'trials:trials-config:processConfig:title:clinicalDataQSCfg': `undefined`,
+ 'trials:components:clinicalDataQS:msg:signSuccessfully': `undefined`,
+ 'trials:components:clinicalDataQS:msg:birthDay': `undefined`,
+ 'trials:components:clinicalDataQS:msg:submitSuccessfully': `undefined`,
+ 'trials:components:clinicalDataQS:title:tableQs': `undefined`,
+ 'CustomWwwcForm:form:label:ww': `undefined`,
+ 'CustomWwwcForm:form:label:wl': `undefined`,
+}
\ No newline at end of file
diff --git a/src/lang/index.js b/src/lang/index.js
new file mode 100644
index 0000000..d8ca3c5
--- /dev/null
+++ b/src/lang/index.js
@@ -0,0 +1,27 @@
+import Vue from 'vue'
+import VueI18n from 'vue-i18n'
+import store from '@/store'
+import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang
+import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui lang
+import enLocale from './en'
+import zhLocale from './zh'
+import xfenLocale from './xfen'
+import xfzhLocale from './xfzh'
+Vue.use(VueI18n)
+const messages = {
+ en: {
+ ...enLocale,
+ ...elementEnLocale
+ },
+ zh: {
+ ...zhLocale,
+ ...elementZhLocale
+ }
+}
+const language = store.getters.language
+const i18n = new VueI18n({
+ locale: language || 'zh',
+ messages
+})
+
+export default i18n
diff --git a/src/lang/xfen.js b/src/lang/xfen.js
new file mode 100644
index 0000000..0e72764
--- /dev/null
+++ b/src/lang/xfen.js
@@ -0,0 +1,23 @@
+/* eslint-disable */
+export default {
+ 'components:uploadvideo:message:xf1': `Upload successfully`,
+ 'components:uploadvideo:message:xf2': `The video selected cannot be played in the browser.please click ‘Transcode’ and upload the video after transcoding.`,
+ 'components:uploadvideo:message:xf3': `The video can not be transcoded,since the page is not in the security context. Please contact the developer to configure SSL certificate`,
+ 'components:uploadvideo:message:xf4': `The video can not be transcoded,since nginx is not set up for same-source isolation. Please contact the developer to configure the Nginx request header.`,
+ 'components:uploadvideo:message:xf5': `Start transcoding. Please do not close the window or page`,
+ 'components:uploadvideo:message:xf6': `Transcod Successfully`,
+ 'components:uploadvideo:message:xf7': `The files has been read successfully.Please upload.`,
+ 'passwordReset:form:passwordCentent': `Passwords must have: 1) 8 - 32 characters; 2) At least 1 number; 3) At least 1 uppercase letter; 4) At least 1 lowercase letter; 5) At least 1 special character (~!-@#$%^&*_+?)`,
+ 'trials:uploadNonDicoms:action:xfuploadvideo': `Upload video`,
+ 'trials:uploadNonDicoms:title:xfuploadvideo': `Upload video`,
+ 'trials:uploadNonDicoms:title:xflookvideo': `View Video`,
+ 'trials:trials-panel:taskAllocation': `Visit Read Assignment`,
+ 'trials:trials-panel:reading': `Read`,
+ 'trials:trials-panel:refereeAllocation': `Adjudication Read Assignment`,
+ 'trials:trials-panel:readingTracking': `Read Tracking`,
+ 'trials:trials-panel:reReadingTracking': `Re-Read Approval
+`,
+ 'trials:trials-panel:tab:pmMedicalFeedback': `Medical Review`,
+ 'trials:trials-panel:reading:consistency-analysis': `Consistency Analysis`,
+ 'trials:trials-panel:attachments:reReadingTracking': `Re-read Approvaling`,
+}
\ No newline at end of file
diff --git a/src/lang/xfzh.js b/src/lang/xfzh.js
new file mode 100644
index 0000000..a18439c
--- /dev/null
+++ b/src/lang/xfzh.js
@@ -0,0 +1,22 @@
+/* eslint-disable */
+export default {
+ 'components:uploadvideo:message:xf1': `上传成功`,
+ 'components:uploadvideo:message:xf2': `选择的视频不能在浏览器环境播放,请点击转码,等待转码成功之后再进行上传操作`,
+ 'components:uploadvideo:message:xf3': `页面未在安全上下文中,不能进行转码,请联系开发人员配置SSL证书`,
+ 'components:uploadvideo:message:xf4': `nginx未设置同源隔离,不能进行转码,请联系开发人员配置Nginx请求头`,
+ 'components:uploadvideo:message:xf5': `开始转码,请勿关闭窗口或页面`,
+ 'components:uploadvideo:message:xf6': `转码成功`,
+ 'components:uploadvideo:message:xf7': `文件读取成功,请上传`,
+ 'passwordReset:form:passwordCentent': `密码必须包含:1)8 – 32 个字符;2)至少1个数字;3) 至少1个大写字母;4)至少1个小写字母;5)至少1个特殊字符 (~!-@#$%^&*_+?)`,
+ 'trials:uploadNonDicoms:action:xfuploadvideo': `上传视频文件`,
+ 'trials:uploadNonDicoms:title:xfuploadvideo': `上传视频文件`,
+ 'trials:uploadNonDicoms:title:xflookvideo': `查看视频文件`,
+ 'trials:trials-panel:taskAllocation': `访视任务分配`,
+ 'trials:trials-panel:reading': `阅片`,
+ 'trials:trials-panel:refereeAllocation': `裁判任务分配`,
+ 'trials:trials-panel:readingTracking': `阅片跟踪`,
+ 'trials:trials-panel:reReadingTracking': `重阅跟踪`,
+ 'trials:trials-panel:tab:pmMedicalFeedback': `医学审核`,
+ 'trials:trials-panel:reading:consistency-analysis': `一致性分析`,
+ 'trials:trials-panel:attachments:reReadingTracking': `重阅审批`,
+}
\ No newline at end of file
diff --git a/src/lang/zh.js b/src/lang/zh.js
new file mode 100644
index 0000000..2906c69
--- /dev/null
+++ b/src/lang/zh.js
@@ -0,0 +1,2397 @@
+/* eslint-disable */
+export default {
+ 'common:button:search': `查询`,
+ 'common:button:reset': `重置`,
+ 'common:button:save': `保存`,
+ 'common:button:cancel': `取消`,
+ 'common:button:new': `新增`,
+ 'common:button:add': `添加`,
+ 'common:button:edit': `编辑`,
+ 'common:button:delete': `删除`,
+ 'common:button:remove': `移除`,
+ 'common:button:sign': `签名`,
+ 'common:button:export': `导出`,
+ 'common:button:submit': `提交`,
+ 'common:button:download': `下载`,
+ 'common:button:upload': `上传`,
+ 'common:button:confirm': `确认`,
+ 'common:button:close': `关闭`,
+ 'common:button:batchDelete': `批量删除`,
+ 'common:button:preview': `预览`,
+ 'common:button:view': `查看`,
+ 'common:button:downloadTpl': `下载模板`,
+ 'common:action:action': `操作`,
+ 'common:ruleMessage:specify': `请注明`,
+ 'common:ruleMessage:select': `请选择`,
+ 'common:ruleMessage:maxLength': `最大长度为`,
+ 'common:message:savedSuccessfully': `保存成功!`,
+ 'common:message:deletedSuccessfully': `删除成功!`,
+ 'common:message:removedSuccessfully': `移除成功!`,
+ 'common:message:addedSuccessfully': `添加成功!`,
+ 'common:message:updatedSuccessfully': `更新成功!`,
+ 'common:message:signSuccessfully': `签名成功!`,
+ 'common:message:signTip': `请仔细阅读文件,并签名确认`,
+ 'common:dialogTitle:sign': `签名`,
+ 'common:label:sign': `当前用户名为:`,
+ 'common:form:sign:userName': `用户名`,
+ 'common:form:sign:password': `密码`,
+ 'common:message:signWarning': `用户名输入错误!`,
+ 'common:message:downloadFile': `该文件不支持在线预览`,
+ 'common:placeholder:selectorsearch': `选择或搜索`,
+ 'common:placeholder:select': `选择`,
+ 'common:title:languageType': `语言类型`,
+ 'common:title:error': `出错了`,
+ 'common:title:goHome': `返回`,
+ 'trials:trials-list:table:trialId': `项目编号`,
+ 'trials:trials-list:table:experimentName': `试验名称`,
+ 'trials:trials-list:table:researchNumber': `研究方案号`,
+ 'trials:trials-list:table:sponsor': `申办方`,
+ 'trials:trials-list:table:isDeleted': `是否删除`,
+ 'trials:trials-list:table:status': `状态`,
+ 'trials:trials-list:table:createDate': `创建日期`,
+ 'trials:trials-list:table:ExpetiedTaskCount': `加急阅片`,
+ 'trials:trials-list:table:ReReadingApprovalCount': `重阅审批`,
+ 'trials:trials-list:table:PendingReconciliationCount': `待核查`,
+ 'trials:trials-list:table:PendingResponseCount': `待回复`,
+ 'trials:trials-list:action:panel': `详情`,
+ 'trials:trials-list:action:edit': `编辑`,
+ 'trials:trials-list:action:status': `状态`,
+ 'trials:trials-list:action:abolition': `删除`,
+ 'trials:trials-list:dialogTitle:new': `新增`,
+ 'trials:trials-list:dialogTitle:edit': `编辑`,
+ 'trials:trials-list:form:trialId': `项目编号`,
+ 'trials:trials-list:form:trialType': `项目类型`,
+ 'trials:trials-list:form:experimentName': `试验名称`,
+ 'trials:trials-list:form:researchNumber': `研究方案号`,
+ 'trials:trials-list:form:researchUnit': `主研单位`,
+ 'trials:trials-list:form:pi': `主要研究者`,
+ 'trials:trials-list:form:sponsor': `申办方`,
+ 'trials:trials-list:form:cro': `CRO`,
+ 'trials:trials-list:form:isDeclaration': `是否申报项目`,
+ 'trials:trials-list:form:declarationType': `申报类型`,
+ 'trials:trials-list:form:phase': `临床分期`,
+ 'trials:trials-list:form:indicationType': `适应症类型`,
+ 'trials:trials-list:form:indication': `适应症`,
+ 'trials:trials-list:form:siteCount': `中心数量`,
+ 'trials:trials-list:form:visitCount': `总访视量`,
+ 'trials:trials-list:form:patientsNum': `受试者数量`,
+ 'trials:trials-list:form:timePointsPerPatient': `平均访视量`,
+ 'trials:trials-list:form:modality': `检查技术`,
+ 'trials:trials-list:form:criterion': `阅片标准`,
+ 'trials:trials-list:form:reviewType': `阅片类型`,
+ 'trials:trials-list:form:reviewMode': `阅片模式`,
+ 'trials:trials-list:form:expedited': `实时阅片`,
+ 'trials:trials-list:form:projectCycle': `项目周期(月)`,
+ 'trials:trials-list:form:totalReviewers': `阅片人数`,
+ 'trials:trials-list:form:typeofReviewers': `阅片人类型`,
+ 'trials:trials-list:form:save': `保存`,
+ 'trials:trials-list:form:cancel': `取消`,
+ 'trials:trials-list:message:addedSuccessfully': `添加成功!`,
+ 'trials:trials-list:message:updatedSuccessfully': `更新成功!`,
+ 'trials:trials-list:message:abolition': `是否确认删除此项目?`,
+ 'trials:trials-list:message:abolitionSuccessfully': `删除成功!`,
+ 'trials:trials-list:button:abolitionCancel': `取消`,
+ 'trials:trials-list:button:abolitionConfirm': `确认`,
+ 'trials:trials-list:dialogTitle:changeStatus': `项目状态变更`,
+ 'trials:trials-list:label:reason': `原因`,
+ 'trials:trials-list:button:changeStatusCancel': `取消`,
+ 'trials:trials-list:button:changeStatusConfirm': `确认`,
+ 'trials:trials-list:message:changeStatusMes1': `项目设置为启动后,部分配置不可更改!`,
+ 'trials:trials-list:message:changeStatusMes2': `项目设置为完成,数据不可更改!`,
+ 'trials:trials-list:message:changeStatusMes3': `项目设置为停止,数据不可更改!`,
+ 'trials:tab:recordsManage': `文件签署`,
+ 'trials:tab:selfAttachment': `文件签署`,
+ 'trials:self-attachment:table:fileType': `文件类型`,
+ 'trials:self-attachment:table:fileName': `文件名称`,
+ 'trials:self-attachment:table:isDeleted': `是否废除`,
+ 'trials:self-attachment:table:uploadTime': `上传时间`,
+ 'trials:self-attachment:table:isSign': `是否签署`,
+ 'trials:self-attachment:table:signTime': `签署时间`,
+ 'trials:self-attachment:action:preview': `预览`,
+ 'trials:self-attachment:action:sign': `签署`,
+ 'trials:tab:signRecords': `签署记录`,
+ 'trials:signRecords:table:fileType': `文件类型`,
+ 'trials:signRecords:table:fileName': `文件名称`,
+ 'trials:signRecords:table:fileLevel': `文件级别`,
+ 'trials:signRecords:table:isDeleted': `是否废除`,
+ 'trials:signRecords:table:uploadTime': `上传时间`,
+ 'trials:signRecords:table:isSign': `是否签署`,
+ 'trials:signRecords:table:user': `签署人`,
+ 'trials:signRecords:table:userName': `用户名`,
+ 'trials:signRecords:table:userType': `用户类型`,
+ 'trials:signRecords:table:confirmTime': `签署时间`,
+ 'trials:signRecords:action:preview': `预览`,
+ 'trials:tab:siteResearch': `中心调研`,
+ 'trials:researchRecord:button:questionStaffs': `中心人员`,
+ 'trials:researchRecord:button:questionLink': `调查表链接`,
+ 'trials:researchRecord:placeholder:contactorInfo': `姓名/邮箱/电话`,
+ 'trials:researchRecord:table:siteId': `中心编号`,
+ 'trials:researchRecord:table:siteName': `中心名称`,
+ 'trials:researchRecord:table:contactor': `联系人`,
+ 'trials:researchRecord:table:contactorPhone': `联系电话`,
+ 'trials:researchRecord:table:contactorEmail': `联系邮箱`,
+ 'trials:researchRecord:table:preliminaryUser': `初审人`,
+ 'trials:researchRecord:table:ReviewerUser': `审核人`,
+ 'trials:researchRecord:table:status': `调查表状态`,
+ 'trials:researchRecord:table:isDeleted': `是否废除`,
+ 'trials:researchRecord:table:updateTime': `更新时间`,
+ 'trials:researchRecord:action:view': `审批`,
+ 'trials:researchRecord:action:abolish': `废除`,
+ 'trials:researchRecord:dialogTitle:questionStaff': `中心人员汇总表`,
+ 'trials:researchRecord:dialogButton:sendEmail': `发邮件`,
+ 'trials:researchRecord:message:createLinkSuccessfully': `成功创建调查表链接`,
+ 'trials:researchRecord:label:link': `链接:`,
+ 'trials:researchRecord:button:copyLink': `复制链接`,
+ 'trials:researchRecord:message:abolish': `是否确认废除?`,
+ 'trials:researchRecord:message:abolishSuccessfully': `保存成功!`,
+ 'trials:researchRecord:message:researchFormLink': `中心调研表链接`,
+ 'trials:researchRecord:message:copySuccessfully': `复制成功`,
+ 'trials:researchRecord:message:copyFailed': `复制失败`,
+ 'trials:researchStaff:table:siteId': `中心编号`,
+ 'trials:researchStaff:table:siteName': `中心名称`,
+ 'trials:researchStaff:table:Name': `姓名`,
+ 'trials:researchStaff:table:role': `角色`,
+ 'trials:researchStaff:table:phone': `电话号码`,
+ 'trials:researchStaff:table:email': `邮箱`,
+ 'trials:researchStaff:table:organization': `单位`,
+ 'trials:researchStaff:table:isGenerateAccount': `是否生成账号`,
+ 'trials:researchStaff:table:userType': `用户类型`,
+ 'trials:researchStaff:table:status': `状态`,
+ 'trials:researchStaff:table:isJoin': `是否加入`,
+ 'trials:researchStaff:message:sendEmalil': `邮件发送成功`,
+ 'trials:researchForm:title:question': `中心调研表`,
+ 'trials:researchForm:form:trialId': `项目编号`,
+ 'trials:researchForm:form:researchNo': `试验方案号`,
+ 'trials:researchForm:form:researchName': `试验名称`,
+ 'trials:researchForm:form:decleareType': `适应症类型`,
+ 'trials:researchForm:form:siteName': `中心名称`,
+ 'trials:researchForm:form:siteId': `中心编号`,
+ 'trials:researchForm:button:updateQsForm': `更新调研表`,
+ 'trials:researchForm:button:cancelUpdateQsForm': `取消更新调研表`,
+ 'trials:researchForm:form:originalEmail': `原调研表填写人邮箱`,
+ 'trials:researchForm:form:contactorEmail': `联系邮箱`,
+ 'trials:researchForm:form:verifyCode': `验证码`,
+ 'trials:researchForm:form:contactor': `联系人`,
+ 'trials:researchForm:form:contactorPhone': `联系人电话`,
+ 'trials:researchForm:form:contactorEmail': `联系人邮箱`,
+ 'trials:researchForm:form:engravingCycle': `平均刻盘周期(天)`,
+ 'trials:researchForm:form:isQualified': `请确认参与本项目影像采集的影像技师具备对应的资质(如:“技师证”,对应设备的“大型设备上岗证”)`,
+ 'trials:researchForm:form:notQualifiedReason': `原因`,
+ 'trials:researchForm:form:staffType': `研究单位疗效评估人员类型`,
+ 'trials:researchForm:form:isFollowStudyParam': `是否严格按照研究单位影像手册参数完成图像采集`,
+ 'trials:researchForm:form:notFollowStudyParam': `不能严格按照研究单位影像手册参数采集图像原因`,
+ 'trials:researchForm:button:send': `发送`,
+ 'trials:researchForm:button:verifyCode': `验证码`,
+ 'trials:researchForm:formRule:phone': `电话号码无效`,
+ 'trials:researchForm:formRule:email': `邮箱无效`,
+ 'trials:researchForm:formRule:maxLength': `最大长度为50`,
+ 'trials:researchForm:formRule:specify': `请注明`,
+ 'trials:researchForm:formRule:select': `请选择`,
+ 'trials:researchForm:button:submit': `提交`,
+ 'trials:researchForm:button:auditPasses': `审核通过`,
+ 'trials:researchForm:button:auditRejected': `驳回`,
+ 'trials:researchForm:button:historicalRecord': `历史记录`,
+ 'trials:researchForm:title:researchSurveyStatus': `调研表状态:`,
+ 'trials:researchForm:dialogTitle:reject': `驳回`,
+ 'trials:researchForm:form:rejectReson': `驳回原因`,
+ 'trials:researchForm:message:saveWarning': `必须要有一条人员记录或者设备记录`,
+ 'trials:researchForm:message:saveWarning1': `crc角色和影像负责人角色至少有1个!`,
+ 'trials:researchForm:message:saveWarning2': `至少有1个crc账号和至少1个SR账号!`,
+ 'trials:researchForm:message:submitWarning': `是否确认提交?`,
+ 'trials:researchForm:message:auditWarning': `是否确认审核通过?`,
+ 'trials:researchForm:button:loginOut': `退出`,
+ 'trials:staffResearch:title:staff': `人员调查`,
+ 'trials:staffResearch:title:historicalStaff': `历史人员`,
+ 'trials:staffResearch:title:newStaff': `新增人员`,
+ 'trials:staffResearch:form:originalState': `原状态`,
+ 'trials:staffResearch:form:updateState': `更新状态`,
+ 'trials:staffResearch:form:lastName': `姓`,
+ 'trials:staffResearch:form:firstName': `名`,
+ 'trials:staffResearch:form:name': `姓名`,
+ 'trials:staffResearch:form:role': `角色`,
+ 'trials:staffResearch:form:phone': `电话号码`,
+ 'trials:staffResearch:form:email': `邮箱`,
+ 'trials:staffResearch:form:organization': `单位`,
+ 'trials:staffResearch:form:isGenerate': `是否生成账号`,
+ 'trials:staffResearch:form:userType': `用户类型`,
+ 'trials:staffResearch:form:status': `加入`,
+ 'trials:staffResearch:form:isSuccess': `账号是否生成成功`,
+ 'trials:staffResearch:dialogTitle:add': `添加`,
+ 'trials:staffResearch:dialogTitle:edit': `编辑`,
+ 'trials:staffResearch:message:confirmDel': `是否确认删除?`,
+ 'trials:staffResearch:message:delSuccessfully': `删除成功!`,
+ 'trials:equiptResearch:title:equiptResearch': `设备调研`,
+ 'trials:equiptResearch:form:equipment': `扫描设备`,
+ 'trials:equiptResearch:form:param': `扫描参数`,
+ 'trials:equiptResearch:form:manufacturer': `扫描仪器制造商名称`,
+ 'trials:equiptResearch:form:model': `扫描仪型号`,
+ 'trials:equiptResearch:dialogTitle:add': `添加`,
+ 'trials:equiptResearch:dialogTitle:edit': `编辑`,
+ 'trials:equiptResearch:message:confirmDel': `是否确认删除?`,
+ 'trials:equiptResearch:message:delSuccessfully': `删除成功!`,
+ 'trials:equiptResearch:form:remark': `备注`,
+ 'trials:equiptResearch:form:precautions': `注意事项`,
+ 'trials:equiptResearch:form:item1': `只要有可能,请确保受试者使用上述指定的扫描仪器采集影像。`,
+ 'trials:equiptResearch:form:item2': `请确保对每位受试者的扫描参数在整个研究过程中保持一致。`,
+ 'trials:equiptResearch:form:item3': `试验过程中,如果有任何人员、设备或扫描仪器的替换,请及时更新该表格。`,
+ 'trials:equiptResearch:form:item4': `请保存好原始(未经压缩的;非重建的)数据。`,
+ 'trials:tab:seletctedReviews': `阅片人筛选`,
+ 'trials:seletctedReviews:title:trialInfor': `项目详情`,
+ 'trials:seletctedReviews:title:enrollment': `入组`,
+ 'trials:seletctedReviews:timeline:selection': `选择`,
+ 'trials:seletctedReviews:timeline:submission': `提交`,
+ 'trials:seletctedReviews:timeline:approval': `审核`,
+ 'trials:seletctedReviews:timeline:confirmation': `确认`,
+ 'trials:seletctedReviews:form:modality': `检查类型`,
+ 'trials:seletctedReviews:form:subspeciality': `亚专业`,
+ 'trials:seletctedReviews:form:position': `职位`,
+ 'trials:seletctedReviews:form:rank': `职称`,
+ 'trials:seletctedReviews:form:institution': `机构`,
+ 'trials:seletctedReviews:table:name': `姓名`,
+ 'trials:seletctedReviews:table:nameCN': `中文姓名`,
+ 'trials:seletctedReviews:table:id': `用户名`,
+ 'trials:seletctedReviews:table:status': `状态`,
+ 'trials:seletctedReviews:table:submitted': `已被提交数`,
+ 'trials:seletctedReviews:table:approved': `已被审核数`,
+ 'trials:seletctedReviews:table:reading': `正在读`,
+ 'trials:seletctedReviews:table:specialty': `专业`,
+ 'trials:seletctedReviews:table:subspecialty': `亚专业`,
+ 'trials:seletctedReviews:table:institution': `机构`,
+ 'trials:seletctedReviews:table:city': `城市`,
+ 'trials:seletctedReviews:table:country': `国家`,
+ 'trials:seletctedReviews:table:selector': `选择人`,
+ 'trials:seletctedReviews:table:selectionTime': `选择时间`,
+ 'trials:seletctedReviews:table:submitter': `提交人`,
+ 'trials:seletctedReviews:table:submissionTime': `提交时间`,
+ 'trials:seletctedReviews:table:approver': `审核人`,
+ 'trials:seletctedReviews:table:approvalTime': `审核时间`,
+ 'trials:seletctedReviews:table:confirmor': `确认人`,
+ 'trials:seletctedReviews:table:confirmationTime': `确认时间`,
+ 'trials:seletctedReviews:label:language': `语言`,
+ 'trials:seletctedReviews:button:select': `选择`,
+ 'trials:seletctedReviews:button:submissionDownAll': `下载`,
+ 'trials:seletctedReviews:button:submissionDown': `下载`,
+ 'trials:seletctedReviews:button:submit': `提交`,
+ 'trials:seletctedReviews:button:approve': `审核`,
+ 'trials:seletctedReviews:button:confirm': `确认`,
+ 'trials:seletctedReviews:message:msg1': `是否确认选择?`,
+ 'trials:seletctedReviews:message:msg2': `是否确认提交?`,
+ 'trials:seletctedReviews:title:language': `语言`,
+ 'trials:enrolledReviews:button:tackNum': `任务量 (未读/已读/总数)`,
+ 'trials:spmAudit:button:agree': `同意`,
+ 'trials:spmAudit:button:reject': `拒绝`,
+ 'trials:spmAudit:button:influenceList': `已影响任务列表`,
+ 'trials:spmAudit:title:rejected': `驳回`,
+ 'trials:spmAudit:title:rejectedReason': `驳回原因`,
+ 'trials:spmAudit:title:title1': `重阅影响任务列表`,
+ 'trials:spmAudit:title:title2': `已影响任务列表`,
+ 'trials:spmAudit:title:title3': `申请重阅成功`,
+ 'trials:spmAudit:title:title4': `同意申请成功!`,
+ 'trials:spmAudit:title:title5': `拒绝申请成功!`,
+ 'trials:spmEnroll:title:userList': `备选人员列表`,
+ 'trials:spmEnroll:table:blindNameCN': `中文名`,
+ 'trials:spmEnroll:table:blindName': `英文名`,
+ 'trials:spmEnroll:table:specialityId': `专业`,
+ 'trials:spmEnroll:table:subspecialityIds': `亚专业`,
+ 'trials:spmEnroll:table:submmitUserName': `提交人`,
+ 'trials:spmEnroll:table:submmitTime': `提交时间`,
+ 'trials:spmEnroll:table:optUserName': `审核人`,
+ 'trials:spmEnroll:table:optTimeStr': `审核时间`,
+ 'trials:spmEnroll:button:view': `查看阅片人简历`,
+ 'trials:spmEnroll:button:agree': `同意`,
+ 'trials:spmEnroll:title:msg1': `是否确认审核?`,
+ 'trials:tab:enrolledReviews': `独立阅片人`,
+ 'trials:enrolledReviews:table:name': `姓名`,
+ 'trials:enrolledReviews:table:nameCN': `中文姓名`,
+ 'trials:enrolledReviews:table:userName': `用户名`,
+ 'trials:enrolledReviews:table:enrollmentTime': `入组时间`,
+ 'trials:enrolledReviews:table:enable': `启用`,
+ 'trials:enrolledReviews:table:disable': `停用`,
+ 'trials:enrolledReviews:table:id': `编号`,
+ 'trials:enrolledReviews:table:status': `状态`,
+ 'trials:enrolledReviews:table:training': `培训`,
+ 'trials:enrolledReviews:table:refresherTraining': `重新培训`,
+ 'trials:enrolledReviews:table:tp': `时间点`,
+ 'trials:enrolledReviews:table:tpRegular': `普通`,
+ 'trials:enrolledReviews:table:tp48H': `48小时`,
+ 'trials:enrolledReviews:table:tp24H': `24小时`,
+ 'trials:enrolledReviews:table:ad': `仲裁`,
+ 'trials:enrolledReviews:table:adRegular': `普通`,
+ 'trials:enrolledReviews:table:ad48H': `48小时`,
+ 'trials:enrolledReviews:table:ad24H': `24小时`,
+ 'trials:enrolledReviews:table:gl': `全局`,
+ 'trials:enrolledReviews:table:downtime': `空跑`,
+ 'trials:enrolledReviews:table:readingType': `阅片类型`,
+ 'trials:enrolledReviews:table:ackOfSow': `ACK of SOW`,
+ 'trials:enrolledReviews:table:action': `操作`,
+ 'trials:enrolledReviews:button:config': `配置`,
+ 'trials:enrolledReviews:button:view': `查看`,
+ 'trials:enrolledReviews:button:delete': `删除`,
+ 'trials:enrolledReviews:button:upload': `上传`,
+ 'trials:enrolledReviews:action:stats': `统计`,
+ 'trials:enrolledReviews:label:notUpload': `未上传`,
+ 'trials:enrolledReviews:label:enrolled': `入组`,
+ 'trials:enrolledReviews:label:outOfEnrollment': `出组`,
+ 'trials:enrolledReviews:label:enrollmentStatus': `入组状态`,
+ 'trials:enrolledReviews:label:outOfEnrollmentTime': `出组时间`,
+ 'trials:enrolledReviews:label:mustBepdf': `必须是PDF格式`,
+ 'trials:enrolledReviews:dialogTitle:changeStatus': `编辑阅片人状态`,
+ 'trials:enrolledReviews:label:enrollmentStaus': `入组状态`,
+ 'trials:enrolledReviews:dialogTitle:changeReadingType': `编辑阅片类型`,
+ 'trials:enrolledReviews:dialogTitle:signedAckOfSow': `已签名的ACK of SOW`,
+ 'trials:enrolledReviews:message:statsWarning': `Ack-Sow未上传,是否继续?`,
+ 'trials:enrolledReviews:message:uploadSowWaring1': `只允许上传1个文件`,
+ 'trials:enrolledReviews:message:deleteSOWWarning': `是否确认删除?`,
+ 'trials:enrolledReviews:message:SOW': `既往阅片情况声明`,
+ 'trials:enrolledReviews:message:EQC': `入项资格确认书`,
+ 'trials:stats:form:name': `姓名`,
+ 'trials:stats:form:source': `来源`,
+ 'trials:stats:form:beginMonth': `开始月份`,
+ 'trials:stats:form:endMonth': `结束月份`,
+ 'trials:stats:table:month': `月份`,
+ 'trials:stats:table:action': `操作`,
+ 'trials:stats:action:add': `添加`,
+ 'trials:stats:action:reset': `重置`,
+ 'trials:stats:action:edit': `编辑`,
+ 'trials:stats:action:del': `删除`,
+ 'trials:stats:form:expedited': `实时阅片`,
+ 'trials:stats:form:dispalyAll': `展示所有`,
+ 'trials:stats:form:workmonth': `工作月份`,
+ 'trials:stats:form:workdate': `工作日期`,
+ 'trials:stats:dialogTitle:add': `添加`,
+ 'trials:stats:dialogTitle:edit': `编辑`,
+ 'trials:stats:message:del': `是否确认删除?`,
+ 'trials:stats:message:reset': `是否确认重置?`,
+ 'trials:stats:message:training': `来自客户的培训数据是:`,
+ 'trials:stats:message:refresherTraining': `来自客户的重新培训数据是:`,
+ 'trials:stats:message:tp': `来自客户的时间点数据是:`,
+ 'trials:stats:message:tp48H': `来自客户的时间点(48小时)数据是:`,
+ 'trials:stats:message:tp24H': `来自客户的时间点(24小时)数据是:`,
+ 'trials:stats:message:ad': `来自客户的仲裁数据是:`,
+ 'trials:stats:message:ad48H': `来自客户的仲裁数据(48小时)是:`,
+ 'trials:stats:message:ad24H': `来自客户的仲裁数据(24小时)数据是:`,
+ 'trials:stats:message:global': `来自客户的全局数据是:`,
+ 'trials:stats:message:downtime': `来自客户的空跑数据是:`,
+ 'trials:stats:message:editWorkload': `当前日期已有数据,是否确认编辑?`,
+ 'trials:stats:message:editWorkloadWarning1': `工作量不能全为0`,
+ 'trials:stats:message:editWorkloadWarning2': `工作量数据不正确,是否确认保存?`,
+ 'trials:tab:trialSummary': `项目汇总`,
+ 'trials:tab:trialInfo': `项目信息`,
+ 'trials:tab:auditRecord': `痕迹稽查`,
+ 'trials:auditRecord:table:researchNo': `研究方案号`,
+ 'trials:auditRecord:table:siteNo': `中心编号`,
+ 'trials:auditRecord:table:subject': `受试者`,
+ 'trials:auditRecord:table:visit': `访视`,
+ 'trials:auditRecord:table:taskName': `任务名称`,
+ 'trials:auditRecord:table:taskBlindName': `盲态任务标识`,
+ 'trials:auditRecord:table:criterion': `阅片标准`,
+ 'trials:auditRecord:table:funcModule': `功能模块`,
+ 'trials:auditRecord:table:operationName': `操作名`,
+ 'trials:auditRecord:table:modifyReason': `修改原因`,
+ 'trials:auditRecord:table:isSign': `是否电签`,
+ 'trials:auditRecord:table:operator': `操作人`,
+ 'trials:auditRecord:table:userName': `用户名`,
+ 'trials:auditRecord:table:role': `角色`,
+ 'trials:auditRecord:table:operateTime': `操作时间`,
+ 'trials:auditRecord:action:detail': `详情`,
+ 'trials:auditRecord:title:historicalOperations': `同一对象历史操作`,
+ 'trials:auditRecord:title:relationOperations': `同一对象关联操作`,
+ 'trials:auditRecord:title:fieldName': `字段名`,
+ 'trials:auditRecord:title:fieldValue': `值`,
+ 'trials:auditRecord:title:beforeDeletion': `删除前`,
+ 'trials:auditRecord:title:beforeModification': `修改前`,
+ 'trials:auditRecord:title:afterDeletion': `删除后`,
+ 'trials:auditRecord:title:afterModification': `修改后`,
+ 'trials:auditRecord:title:viewDetail': `查看详情`,
+ 'trials:auditRecord:title:viewImage': `查看图片`,
+ 'trials:auditRecord:title:signInfo': `签名信息:`,
+ 'trials:auditRecord:title:viewRelationOperations': `查看关联操作`,
+ 'trials:auditRecord:title:signInfo2': `签名信息`,
+ 'trials:tab:uploadMonitor': `上传监控`,
+ 'trials:uploadMonitor:table:siteId': `中心编号`,
+ 'trials:uploadMonitor:table:subjectId': `受试者编号`,
+ 'trials:uploadMonitor:table:visitName': `访视名称`,
+ 'trials:uploadMonitor:table:studyId': `检查编号`,
+ 'trials:uploadMonitor:table:imageType': `影像类型`,
+ 'trials:uploadMonitor:table:uploader': `上传人`,
+ 'trials:uploadMonitor:table:ip': `IP`,
+ 'trials:uploadMonitor:table:beginTime': `开始时间`,
+ 'trials:uploadMonitor:table:endTime': `结束时间`,
+ 'trials:uploadMonitor:table:totalTime': `总共用时`,
+ 'trials:uploadMonitor:table:fileCount': `文件数`,
+ 'trials:uploadMonitor:table:fileSize': `文件大小`,
+ 'trials:uploadMonitor:table:isRepetition': `是否有重复文件`,
+ 'trials:uploadMonitor:table:uploadStatus': `是否上传成功`,
+ 'trials:uploadMonitor:table:remark': `备注`,
+ 'trials:uploadMonitor:table:uploadInterval': `上传用时`,
+ 'trials:uploadMonitor:table:archiveInterval': `归档用时`,
+ 'trials:tab:login-log': `登录日志`,
+ 'trials:loginLog:table:optType': `操作类型`,
+ 'trials:loginLog:table:incorrectUserName': `错误用户名`,
+ 'trials:loginLog:table:userName': `用户名`,
+ 'trials:loginLog:table:userType': `用户类型`,
+ 'trials:loginLog:table:optUserName': `被操作用户名`,
+ 'trials:loginLog:table:optUserType': `被操作用户类型`,
+ 'trials:loginLog:table:createTime': `创建时间`,
+ 'trials:loginLog:table:beginTime': `开始时间`,
+ 'trials:loginLog:table:endTime': `结束时间`,
+ 'trials:tab:site': `中心`,
+ 'trials:site:table:siteId': `中心编号`,
+ 'trials:site:table:site': `中心名称`,
+ 'trials:site:table:city': `城市`,
+ 'trials:site:table:country': `国家`,
+ 'trials:site:table:subjects': `受试者数量`,
+ 'trials:site:table:visits': `访视数数量`,
+ 'trials:site:table:staff': `参与人员`,
+ 'trials:site:table:name': `姓名`,
+ 'trials:site:table:userType': `用户类型`,
+ 'trials:site:table:organization': `单位`,
+ 'trials:site:table:phone': `电话号码`,
+ 'trials:site:table:dataAssigned': `授权时间`,
+ 'trials:site:table:status': `状态`,
+ 'trials:site:table:deletedTime': `禁用时间`,
+ 'trials:site:dialogTitle:staff': `参与者`,
+ 'trials:tab:subject': `受试者`,
+ 'trials:subject:table:site': `中心编号`,
+ 'trials:subject:table:subjectId': `受试者编号`,
+ 'trials:subject:table:medicalNo': `受试者第二编号`,
+ 'trials:subject:table:firstGiveMedicineTime': `访视基准日期`,
+ 'trials:subject:table:status': `状态`,
+ 'trials:subject:table:totalVisitCount': `总访视量`,
+ 'trials:subject:table:inPlanVisitCount': `计划访视量`,
+ 'trials:subject:table:outPlanVisitCount': `计划外访视量`,
+ 'trials:subject:table:totalVisitSubmmitCount': `当前提交访视量`,
+ 'trials:subject:table:isMissingImages': `是否漏传`,
+ 'trials:subject:table:missingSubmmitCount': `漏提交访视量`,
+ 'trials:subject:table:lostVisitCount': `失访访视量`,
+ 'trials:subject:table:latestVisitName': `最新提交访视名称`,
+ 'trials:subject:table:age': `年龄`,
+ 'trials:subject:table:gender': `性别`,
+ 'trials:subject:table:isUrgent': `是否加急`,
+ 'trials:subject:table:outVisitDate': `结束访视日期`,
+ 'trials:subject:table:finalSubjectVisit': `末次访视`,
+ 'trials:subject:table:outVisitReason': `原因`,
+ 'trials:subject:action:edit': `编辑`,
+ 'trials:subject:action:status': `状态`,
+ 'trials:subject:action:delete': `删除`,
+ 'trials:subject:dialogTitle:new': `添加`,
+ 'trials:subject:dialogTitle:edit': `编辑`,
+ 'trials:subject:dialogTitle:editStatus': `状态变更`,
+ 'trials:subject:message:delete': `是否确认删除?`,
+ 'trials:subject:title:report': `实时报告`,
+ 'trials:subject:title:addReport': `生成报告`,
+ 'trials:subject:title:sendReport': `发送实时报告(受试者编号:xxx)`,
+ 'trials:subject:title:send': `发送`,
+ 'trials:subject:message:sendReport': `是否确认发送受试者xxx的实时报告?`,
+ 'trials:subject:message:sendSuccessfully': `发送成功`,
+ 'trials:tab:readingPeriod': `访视进度`,
+ 'trials:readingPeriod:table:siteCode': `中心编号`,
+ 'trials:readingPeriod:table:subjectCode': `受试者编号`,
+ 'trials:readingPeriod:table:readingPlan': `阅片计划`,
+ 'trials:readingPeriod:table:readingType': `阅片类型`,
+ 'trials:readingPeriod:table:readingName': `阅片期名称`,
+ 'trials:readingPeriod:table:readingSchedule': `进度`,
+ 'trials:readingPeriod:table:enroll': `入`,
+ 'trials:readingPeriod:table:urgent': `急`,
+ 'trials:readingPeriod:table:finalVisit': `末`,
+ 'trials:readingPeriod:table:pd': `PD`,
+ 'trials:readingPeriod:table:lastVisit': `上一访视`,
+ 'trials:readingPeriod:table:deadlineVisit': `截止访视`,
+ 'trials:readingPeriod:table:deadlineVisit2': `截止访视:`,
+ 'trials:readingPeriod:table:correspondVisit': `对应阅片期`,
+ 'trials:readingPeriod:table:clinicalInfo': `临床资料`,
+ 'trials:readingPeriod:table:clinicalInfo2': `临床资料:`,
+ 'trials:readingPeriod:table:stakeholder': `当前干系人`,
+ 'trials:readingPeriod:table:noCD': `无`,
+ 'trials:readingPeriod:buttton:addSubjectImageRP': `添加影像学阅片期`,
+ 'trials:readingPeriod:buttton:addSubjectOncologyRP': `添加肿瘤学阅片期`,
+ 'trials:readingPeriod:buttton:exportSubjectTbl': `导出受试者进展表`,
+ 'trials:readingPeriod:buttton:exportPeriodTbl': `导出阅片期信息表`,
+ 'trials:readingPeriod:dialogTitle:addSubjectPR': `添加阅片期`,
+ 'trials:addSubjectPR:table:rpType': `阅片期类型`,
+ 'trials:addSubjectPR:table:rpName': `阅片期名称`,
+ 'trials:addSubjectPR:table:deadlineVisit': `截止访视`,
+ 'trials:readingPeriod:button:view': `查看`,
+ 'trials:readingPeriod:dialogTitle:clinicalData': `临床资料`,
+ 'trials:readingPeriod:cd:table:clinicalDataName': `临床数据名称`,
+ 'trials:readingPeriod:cd:table:dataLevel': `数据级别`,
+ 'trials:readingPeriod:cd:table:transferType': `传输方式`,
+ 'trials:readingPeriod:cd:table:fileCount': `文件数量`,
+ 'trials:readingPeriod:cd:action:view': `查看`,
+ 'trials:readingPeriod:cd:action:sign': `签名`,
+ 'trials:readingPeriod:cd:action:edit': `编辑`,
+ 'trials:readingPeriod:cd:action:delete': `删除`,
+ 'trials:readingPeriod:cd:message:delete': `是否确认删除?`,
+ 'trials:readingPeriod:cd:title:downloadTpl': `下载模板`,
+ 'trials:readingPeriod:cd:title:tips': `提示:`,
+ 'trials:readingPeriod:cd:title:tips1': `当前访视/阅片期需要采集“临床数据名称”。请采集临床数据后,按照模板上传,并签名确认。`,
+ 'trials:readingPeriod:cd:title:tips2': `若当前访视/阅片期未能采集到临床数据,请上传空白模板,并签名确认。`,
+ 'trials:readingPeriod:cd:title:preview': `预览`,
+ 'trials:readingPeriod:cd:title:cdStatus': `阅片临床数据状态`,
+ 'trials:readingPeriod:cd:title:cdCheck': `核查`,
+ 'trials:readingPeriod:dialogTitle:EditSubjectPR': `编辑阅片期`,
+ 'trials:readingPeriod:verify:title:fileList': `文件列表`,
+ 'trials:readingPeriod:verify:title:preview': `预览`,
+ 'trials:readingPeriod:verify:title:result': `核查结果`,
+ 'trials:readingPeriod:verify:title:isComplete': `临床信息是否完整`,
+ 'trials:readingPeriod:verify:title:isBlind': `临床信息是否盲化`,
+ 'trials:readingPeriod:cd:table:fileName': `文件名称`,
+ 'trials:readingPeriod:cd:action:viewFile': `预览`,
+ 'trials:readingPeriod:cd:action:deleteFile': `删除`,
+ 'trials:readingPeriod:cd:form:data': `数据类容`,
+ 'trials:readingPeriod:cd:message:uploadFile': `请上传文件!`,
+ 'trials:readingPeriod:button:detail': `详情`,
+ 'trials:rpDetail:dialogTitle:detail': `详情`,
+ 'trials:readingPeriod:button:delete': `删除`,
+ 'trials:readingPeriod:button:rpManage': `阅片期管理`,
+ 'trials:rpManage:dialogTitle:setRP': `设置阅片期`,
+ 'trials:rpManage:table:readingType': `阅片期类型`,
+ 'trials:rpManage:table:readingName': `阅片期名称`,
+ 'trials:rpManage:table:subjectRange': `受试者范围`,
+ 'trials:rpManage:table:designatedSite': `指定中心`,
+ 'trials:rpManage:table:expirationDate': `截止日期`,
+ 'trials:rpManage:table:expirationVisit': `截止访视`,
+ 'trials:rpManage:table:linkedVisits': `关联阅片期`,
+ 'trials:rpManage:table:readingStatus': `状态`,
+ 'trials:rpManage:table:effectiveTime': `生效时间`,
+ 'trials:rpManage:action:edit': `编辑`,
+ 'trials:rpManage:action:status': `状态`,
+ 'trials:rpManage:action:delete': `删除`,
+ 'trials:rpManage:button:addImageReading': `添加影像学阅片`,
+ 'trials:rpManage:button:addOncologyReading': `添加肿瘤学阅片`,
+ 'trials:rpManage:dialogTitle:addRP': `新增`,
+ 'trials:rpManage:dialogTitle:editRP': `编辑`,
+ 'trials:rpManage:dialogTitle:linkedRP': `关联计划阅片期`,
+ 'trials:rpManage:dialogTitle:statusChange': `状态变更`,
+ 'trials:rpManage:message:delete': `是否确认删除?`,
+ 'trials:rpManage:message:closeDialog': `阅片期未保存,是否确认关闭?`,
+ 'trials:addRP:form:sites': `中心`,
+ 'trials:addRP:form:condition': `条件`,
+ 'trials:addRP:button:createPR': `生成阅片期`,
+ 'trials:addRP:button:confirmAddPR': `确认添加`,
+ 'trials:linkedRP:table:siteCode': `中心编号`,
+ 'trials:linkedRP:table:subjectCode': `受试者编号`,
+ 'trials:linkedRP:table:expirationVisit': `截止访视`,
+ 'trials:linkedRP:table:latestScanDate': `最晚拍片日期`,
+ 'trials:linkedRP:table:expirationDate': `截止日期`,
+ 'trials:linkedRP:table:readingName': `阅片期名称`,
+ 'trials:linkedRP:table:effectiveTime': `生效时间`,
+ 'trials:trials-panel:subject:brainMetastasis': `脑转移`,
+ 'trials:trials-panel:form:ParticipateEvaluation': `参与评估`,
+ 'trials:subject:form:ImageSelect': `影像筛选`,
+ 'trials:subject:action:Select': `选择受试者`,
+ 'trials:subject:action:ImageSelect': `影像筛选`,
+ 'trials:subject:action:BatchImageSelect': `批量筛选`,
+ 'trials:trials-panel:table:ParticipateEvaluation': `参与评估`,
+ 'trials:subject:table:ImageSelect': `影像筛选`,
+ 'trials:subject:dialogTitle:SubjectsSelect': `选择受试者`,
+ 'trials:subject:message:SubjectsSelect': `请选择受试者`,
+ 'trials:readingPeriod:message:sureToDelete': `是否确认删除`,
+ 'trials:readingPeriod:title:screeningRule': `筛选规则`,
+ 'trials:readingPeriod:label:IsJoinEvaluation': `评估影像检查部位`,
+ 'trials:readingPeriod:value:IsJoinEvaluation': `脑部`,
+ 'trials:readingPeriod:title:visitsList': `待处理访视列表`,
+ 'trials:trials-panel:table:VisitName': `访视`,
+ 'trials:trials-panel:table:EarliestScanDate': `最早拍片日期`,
+ 'trials:trials-panel:table:LatestScanDate': `最晚拍片日期`,
+ 'trials:trials-panel:table:ImageFilterState': `影像筛选状态`,
+ 'trials:trials-panel:table:EarliestScanDate': `最早拍片日期`,
+ 'trials:subject:action:handleCreateTask': `生成任务`,
+ 'trials:readingPeriod:title:taskList': `已生成任务列表`,
+ 'trials:trials-panel:table:UpdateTime': `任务生成时间`,
+ 'trials:subject:action:openReReadingOrBackList': `回退`,
+ 'trials:subject:action:handleOpenTaskAllocation': `任务列表`,
+ 'trials:readingPeriod:title:taskAllocationVisible': `访视任务`,
+ 'trials:readingPeriod:message:batchGenerateTask': `生成成功`,
+ 'trials:readingPeriod:title:study': `检查`,
+ 'trials:readingPeriod:title:series': `序列`,
+ 'trials:readingPeriod:confirm:Images': `确认后影像无法修改,是否提交?`,
+ 'trials:readingPeriod:confirm:SuccessfulScreening': `筛选成功`,
+ 'trials:tab:visit': `访视`,
+ 'trials:tab:crcUpload': `影像上传`,
+ 'trials:crcUpload:button:submit': `批量提交`,
+ 'trials:crcUpload:button:add': `计划外访视`,
+ 'trials:crcUpload:table:challengeState': `质疑状态`,
+ 'trials:crcUpload:table:submitState': `提交状态`,
+ 'trials:crcUpload:table:urgent': `是否加急`,
+ 'trials:crcUpload:table:siteId': `中心编号`,
+ 'trials:crcUpload:table:subjectId': `受试者编号`,
+ 'trials:crcUpload:table:visitName': `访视名称`,
+ 'trials:crcUpload:table:dataCollected': `数据收集`,
+ 'trials:crcUpload:table:earliestScanDate': `最早拍片日期`,
+ 'trials:crcUpload:table:latestScanDate': `最晚拍片日期`,
+ 'trials:crcUpload:table:submitState': `提交状态`,
+ 'trials:crcUpload:table:submitTime': `提交时间`,
+ 'trials:crcUpload:table:auditState': `审核状态`,
+ 'trials:crcUpload:action:upload': `上传`,
+ 'trials:crcUpload:action:submit': `提交`,
+ 'trials:crcUpload:action:edit': `编辑`,
+ 'trials:crcUpload:action:delete': `删除`,
+ 'trials:crcUpload:label:isNotClose': `未关闭`,
+ 'trials:crcUpload:label:isClosed': `已关闭`,
+ 'trials:crcUpload:label:lostVisit': `失`,
+ 'trials:crcUpload:label:lostVisitDetail': `失访`,
+ 'trials:crcUpload:label:pd': `PD`,
+ 'trials:crcUpload:label:pdDetail': `PD确认`,
+ 'trials:crcUpload:label:finalVisit': `末`,
+ 'trials:crcUpload:label:finalVisitDetail': `末次访视`,
+ 'trials:crcUpload:label:enrollmentConfirm': `入`,
+ 'trials:crcUpload:label:enrollmentConfirmDetail': `入组确认`,
+ 'trials:crcUpload:label:firstGiveMedicineTime': `√`,
+ 'trials:crcUpload:label:firstGiveMedicineTimeD': `已设置访视基准日期`,
+ 'trials:crcUpload:label:dicom': `DICOM检查`,
+ 'trials:crcUpload:label:noneDicom': `非DICOM检查`,
+ 'trials:crcUpload:label:clinicalData': `临床数据`,
+ 'trials:crcUpload:tips:remark': `√:已设置访视基准日期;末:末次访视;失:失访;PD:PD确认;入:入组确认`,
+ 'trials:crcUpload:message:baseDate': `该受试者访视基准日期未填写,请补充后,再提交访视影像。`,
+ 'trials:crcUpload:dialogTitle:qsRecord': `质疑记录`,
+ 'trials:crcUpload:message:submit': `是否确认提交?`,
+ 'trials:crcUpload:message:bulkSubmit': `请确认该批次提交的受试者未遗漏之前访视,如有遗漏请尽快提交。是否继续提交?`,
+ 'trials:crcUpload:message:submittedSuccessfully': `提交成功!`,
+ 'trials:crcUpload:message:deleteVisit': `是否确认删除?`,
+ 'trials:crcUpload:message:deleteVisitSuccessfully': `删除成功!`,
+ 'trials:crcUpload:dialogTitle:new': `新增`,
+ 'trials:crcUpload:dialogTitle:edit': `编辑`,
+ 'trials:crcUpload:form:siteId': `中心`,
+ 'trials:crcUpload:form:subjectId': `受试者`,
+ 'trials:crcUpload:form:visitName': `访视`,
+ 'trials:crcUpload:form:preVisitName': `上一访视`,
+ 'trials:crcUpload:form:baseDateOfVisit': `访视基准日期`,
+ 'trials:crcUpload:form:enrollmentConfirmation': `入组确认评估`,
+ 'trials:crcUpload:form:pd': `疾病进展确认评估`,
+ 'trials:crcUpload:form:isFinalAssessment': `是否末次评估`,
+ 'trials:crcUpload:form:isLostFollowUp': `是否失访`,
+ 'trials:crcUpload:form:setFinalAssessment': `注:设置末次访视后,该受试者将被设置为出组,不能再添加计划外访视`,
+ 'trials:crcUpload:form:setFinalAssessment1': `设置为末次访视,访视名为xxx`,
+ 'trials:uploadedDicoms:tab:uploadDicoms': `DICOM影像上传`,
+ 'trials:uploadedDicoms:table:studyId': `检查编号`,
+ 'trials:uploadedDicoms:table:modality': `检查类型`,
+ 'trials:uploadedDicoms:table:bodyPart': `检查部位`,
+ 'trials:uploadedDicoms:table:seriesCount': `序列数量`,
+ 'trials:uploadedDicoms:table:instanceCount': `图像数量`,
+ 'trials:uploadedDicoms:table:studyDate': `检查日期`,
+ 'trials:uploadedDicoms:table:uploadedTime': `上传时间`,
+ 'trials:uploadedDicoms:action:view': `查看`,
+ 'trials:uploadedDicoms:action:delete': `删除`,
+ 'trials:uploadedDicoms:action:preview': `预览`,
+ 'trials:uploadedDicoms:message:deleteMes': `是否确认删除?`,
+ 'trials:uploadedDicoms:message:deleteSuccessfully': `删除成功!`,
+ 'trials:uploadedDicoms:title:dicomFilesOnly': `只支持DICOM影像`,
+ 'trials:uploadedDicomsicom:button:selectFolder': `选择文件夹`,
+ 'trials:uploadDicomList:table:studyDetail1': `申请号,检查设备,序列数量,图像数量`,
+ 'trials:uploadDicomList:table:studyDetail2': `检查部位,检查描述`,
+ 'trials:uploadDicomList:table:studyInfo': `检查信息`,
+ 'trials:uploadDicomList:table:patientInfo': `患者信息`,
+ 'trials:uploadDicomList:table:pId': `患者编号`,
+ 'trials:uploadDicomList:table:patientName': `患者姓名`,
+ 'trials:uploadDicomList:table:pInfo': `患者性别,患者年龄,患者出生日期`,
+ 'trials:uploadDicomList:table:status': `状态`,
+ 'trials:uploadDicomList:table:stats': `总共/成功/失败`,
+ 'trials:uploadDicomList:button:exportFailed': `导出(失败文件)`,
+ 'trials:uploadDicomList:button:close': `关闭`,
+ 'trials:uploadDicomList:button:upload': `上传`,
+ 'trials:uploadDicomList:message:informationConsistent': `DICOM 文件的信息与此受试者不一致`,
+ 'trials:uploadDicomList:message:genderConsistent': `患者性别与此受试者性别不一致`,
+ 'trials:uploadDicomList:label:uploadingNotAllowed': `未通过校验`,
+ 'trials:uploadDicomList:label:prompt': `提示`,
+ 'trials:uploadDicomList:label:confirm': `确认`,
+ 'trials:uploadDicomList:label:uploading': `上传中`,
+ 'trials:uploadDicomList:label:uploaded': `归档完成`,
+ 'trials:uploadDicomList:label:uploadFailed': `上传失败`,
+ 'trials:uploadDicomList:message:archiveSuccess': `文件已上传成功,等待归档。归档完成后可查看影像数据,现在可以返回。`,
+ 'trials:uploadDicomList:message:archiveSuccess': `归档中`,
+ 'trials:uploadNonDicoms:tab:uploadNonDicoms': `非DICOM影像上传`,
+ 'trials:uploadNonDicoms:button:add': `新增`,
+ 'trials:uploadNonDicoms:button:preview': `预览`,
+ 'trials:uploadNonDicoms:table:studyId': `检查编号`,
+ 'trials:uploadNonDicoms:table:modality': `检查类型`,
+ 'trials:uploadNonDicoms:table:bodyPart': `检查部位`,
+ 'trials:uploadNonDicoms:table:files': `图像数量`,
+ 'trials:uploadNonDicoms:table:fileName': `文件名称`,
+ 'trials:uploadNonDicoms:table:studyDate': `检查日期`,
+ 'trials:uploadNonDicoms:table:updateTime': `更新时间`,
+ 'trials:uploadNonDicoms:action:preview': `预览`,
+ 'trials:uploadNonDicoms:action:upload': `上传`,
+ 'trials:uploadNonDicoms:action:edit': `编辑`,
+ 'trials:uploadNonDicoms:action:delete': `删除`,
+ 'trials:uploadNonDicoms:dialogTitle:upload': `上传`,
+ 'trials:uploadNonDicoms:label:fileType': `仅支持jpg/jpeg/png/bmp 文件`,
+ 'trials:uploadNonDicoms:button:selectFolder': `选择文件夹`,
+ 'trials:uploadNonDicoms:button:select': `选择文件`,
+ 'trials:uploadNonDicoms:dialogTitle:preview': `预览`,
+ 'trials:uploadNonDicoms:dialogTitle:add': `新增`,
+ 'trials:uploadNonDicoms:dialogTitle:edit': `编辑`,
+ 'trials:uploadNonDicoms:message:delete': `是否确认删除?`,
+ 'trials:uploadNonDicoms:message:deleteStudyAndFiles': `该检查已有影像文件,删除检查将删除所有影像文件。若只删除影像文件,请点击 “文件”列数字,在弹出列表中删除选中影像文件。是否继续删除该检查?`,
+ 'trials:uploadNonDicoms:message:deletedSuccessfully': `删除成功!`,
+ 'trials:uploadNonDicoms:message:uploadSize': `上传文件大小不能超过1G`,
+ 'trials:uploadNonDicoms:message:uploadedSuccessfully': `上传成功!`,
+ 'trials:uploadNonDicoms:message:exsitSameFile': `列表中存在同名文件:xxx。`,
+ 'trials:uploadNonDicoms:message:isContinueUpload': `本次上传,将会增加同名文件, 是否继续?`,
+ 'trials:uploadClinicalData:tab:uploadClinicalData': `临床数据采集`,
+ 'trials:uploadClinicalData:title:historyTherapy': `既往局部治疗史`,
+ 'trials:uploadClinicalData:title:pastTreatment': `既往放疗史`,
+ 'trials:uploadClinicalData:table:bodyPart': `放疗部位`,
+ 'trials:uploadClinicalData:table:beginDate': `开始日期`,
+ 'trials:uploadClinicalData:table:endDate': `结束日期`,
+ 'trials:uploadClinicalData:table:isPD': `病灶是否PD`,
+ 'trials:uploadClinicalData:title:pastSurgery': `既往手术史`,
+ 'trials:uploadClinicalData:table:surgeryName': `手术名称`,
+ 'trials:uploadClinicalData:table:surgeryDate': `手术日期`,
+ 'trials:uploadClinicalData:title:others': `既往其他治疗史`,
+ 'trials:uploadClinicalData:table:treatmentType': `治疗类型`,
+ 'trials:uploadClinicalData:table:treatmentbeginDate': `开始日期`,
+ 'trials:uploadClinicalData:table:treatmentendDate': `结束日期`,
+ 'trials:uploadClinicalData:table:fileName': `文件名称`,
+ 'trials:uploadClinicalData:table:uploadedTime': `上传时间`,
+ 'trials:uploadClinicalData:action:preview': `预览`,
+ 'trials:uploadClinicalData:button:selectFile': `选择`,
+ 'trials:uploadClinicalData:button:uploadFile': `上传`,
+ 'trials:uploadClinicalData:message:uploadSuccessfully': `上传成功`,
+ 'trials:uploadClinicalData:title:uploadFile': `上传`,
+ 'trials:uploadClinicalData:button:downloadTemplate': `下载模板`,
+ 'trials:uploadClinicalData:title:table': `表格`,
+ 'components:uploadvideo:message:xf1': `上传成功`,
+ 'components:uploadvideo:message:xf2': `选择的视频不能在浏览器环境播放,请点击转码,等待转码成功之后再进行上传操作`,
+ 'components:uploadvideo:message:xf3': `页面未在安全上下文中,不能进行转码,请联系开发人员配置SSL证书`,
+ 'components:uploadvideo:message:xf4': `nginx未设置同源隔离,不能进行转码,请联系开发人员配置Nginx请求头`,
+ 'components:uploadvideo:message:xf5': `开始转码,请勿关闭窗口或页面`,
+ 'components:uploadvideo:message:xf6': `转码成功`,
+ 'components:uploadvideo:message:xf7': `文件读取成功,请上传`,
+ 'trials:uploadNonDicoms:action:xfuploadvideo': `上传视频文件`,
+ 'trials:uploadNonDicoms:title:xfuploadvideo': `上传视频文件`,
+ 'trials:uploadNonDicoms:title:xflookvideo': `查看视频文件`,
+ 'trials:reuploadDicoms:button:applyReupload': `申请重传`,
+ 'trials:reuploadDicoms:button:reupload': `重传`,
+ 'trials:reuploadDicoms:button:reuploadFinished': `确认重传完成`,
+ 'trials:reuploadDicoms:button:send': `发送`,
+ 'trials:tab:crcQuality': `影像质疑`,
+ 'trials:crcQuestion:table:challengeCode': `质疑编号`,
+ 'trials:crcQuestion:table:siteId': `中心编号`,
+ 'trials:crcQuestion:table:subjectId': `受试者编号`,
+ 'trials:crcQuestion:table:visitName': `访视名称`,
+ 'trials:crcQuestion:table:reuploadSatus': `重传状态`,
+ 'trials:crcQuestion:table:reuploadTime': `重传完成时间`,
+ 'trials:crcQuestion:table:createTime': `创建时间`,
+ 'trials:crcQuestion:table:deadline': `处理截止时限`,
+ 'trials:crcQuestion:table:isOverTime': `是否超限`,
+ 'trials:crcQuestion:table:isClose': `是否关闭`,
+ 'trials:crcQuestion:table:latestMsgTime': `最新回复时间`,
+ 'trials:crcQuestion:table:closedTime': `关闭时间`,
+ 'trials:crcQuestion:table:qCProcessEnum': `审核批次`,
+ 'trials:crcQuestion:action:reply': `回复`,
+ 'trials:crcQuestion:label:isNotClose': `未关闭`,
+ 'trials:crcQuestion:label:isClosed': `已关闭`,
+ 'trials:crcQuestion:dialogTitle:message1': `质疑记录`,
+ 'trials:crcQuestion:button:applyReupload': `申请重传`,
+ 'trials:crcQuestion:button:reupload': `重传`,
+ 'trials:crcQuestion:button:reuploadCompleted': `确认重传完成`,
+ 'trials:crcQuestion:button:send': `发送`,
+ 'trials:crcQuestion:button:close': `关闭`,
+ 'trials:crcQuestion:message:applyReupload': `是否确认申请重传?`,
+ 'trials:crcQuestion:message:applyOrUpload': `CRC申请重传/上传影像`,
+ 'trials:crcQuestion:message:reuploadConfirm': `是否确认重传完成?`,
+ 'trials:crcQuestion:message:reuploadFinished': `CRC已重传完成`,
+ 'trials:crcQuestion:message:replaceTask': `该访视的影像质控任务已经由xxx领取,您是否确认替换?`,
+ 'trials:crcQuestion:message:replaceTaskSuccessfully': `替换成功!`,
+ 'trials:crcQuestion:button:replaceTask': `替换`,
+ 'trials:tab:dicomsQuality': `影像质控`,
+ 'trials:qcCheck:table:isUrgent': `是否加急`,
+ 'trials:qcCheck:table:siteId': `中心编号`,
+ 'trials:qcCheck:table:subjectId': `受试者编号`,
+ 'trials:qcCheck:table:visitName': `访视名称`,
+ 'trials:qcCheck:table:dataCollected': `数据收集`,
+ 'trials:qcCheck:table:eScanDate': `最早拍片日期`,
+ 'trials:qcCheck:table:lScanDate': `最晚拍片日期`,
+ 'trials:qcCheck:table:submitTime': `提交时间`,
+ 'trials:qcCheck:table:auditState': `审核状态`,
+ 'trials:qcCheck:table:crrentUser': `领取人`,
+ 'trials:qcCheck:table:participant': `参与人`,
+ 'trials:qcCheck:table:challengeState': `质疑状态`,
+ 'trials:qcCheck:table:reviewer': `历史审核人`,
+ 'trials:qcCheck:label:preliminary': `初`,
+ 'trials:qcCheck:label:preliminaryAudit': `初审人`,
+ 'trials:qcCheck:label:review': `复`,
+ 'trials:qcCheck:label:reviewAudit': `复审人`,
+ 'trials:qcCheck:button:receive': `领取`,
+ 'trials:qcCheck:button:release': `释放`,
+ 'trials:qcCheck:button:audit': `审核`,
+ 'trials:qcCheck:button:preliminaryAudit': `初审`,
+ 'trials:qcCheck:button:review': `复审`,
+ 'trials:qcCheck:dialogTitle:setUrgent': `设置紧急状态`,
+ 'trials:qcCheck:message:receive': `是否确认领取?`,
+ 'trials:qcCheck:message:release': `是否确认释放?`,
+ 'trials:qcCheck:message:receivedSuccessfully': `领取成功!`,
+ 'trials:qcCheck:message:releasedSuccessfully': `释放成功!`,
+ 'trials:qcCheck:message:isUrgent': `是否确认将当前访视设置为加急?`,
+ 'trials:qcCheck:message:isNotUrgent': `是否确认将当前访视设置为不加急?`,
+ 'trials:qcCheck:message:delete': `是否确认删除?`,
+ 'trials:qcCheck:message:deletedSuccessfully': `删除成功!`,
+ 'trials:qcCheck:tips:remark': `末:末次访视;失:失访;PD:PD确认;入:入组确认`,
+ 'trials:audit:tab:dicoms': `DICOM影像`,
+ 'trials:audit:title:dicoms': `检查信息`,
+ 'trials:audit:tip:visitWindow': `访视窗口期`,
+ 'trials:audit:tip:visitWindowNotSet': `访视基准日期或窗口未设置`,
+ 'trials:audit:button:previewAllDiocms': `预览所有影像`,
+ 'trials:audit:button:previewReadingDiocms': `预览阅片影像`,
+ 'trials:audit:table:studyId': `检查编号`,
+ 'trials:audit:table:modality': `检查类型`,
+ 'trials:audit:table:modality1': `检查设备`,
+ 'trials:audit:table:bodyPart': `检查部位`,
+ 'trials:audit:table:seriesCount': `序列数量`,
+ 'trials:audit:table:instanceCount': `图像数量`,
+ 'trials:audit:table:studyDate': `检查日期`,
+ 'trials:audit:table:studyUploadTime': `上传时间`,
+ 'trials:audit:table:isReading': `是否阅片`,
+ 'trials:audit:table:isDelete': `是否删除`,
+ 'trials:audit:action:preview': `预览`,
+ 'trials:audit:action:edit': `编辑`,
+ 'trials:audit:title:series': `序列信息`,
+ 'trials:audit:table:seriesId': `序列号`,
+ 'trials:audit:table:seriesOfStudyId': `检查编号`,
+ 'trials:audit:table:seriesModality': `检查类型`,
+ 'trials:audit:table:seriesOfInstanceCount': `图像数量`,
+ 'trials:audit:table:seriesOfStudyDate': `检查日期`,
+ 'trials:audit:table:seriesOfUploadedDate': `上传时间`,
+ 'trials:audit:action:seriesPreview': `预览`,
+ 'trials:audit:action:setSeriesNotReading': `设置为不阅片`,
+ 'trials:audit:action:setSeriesReading': `设置为阅片`,
+ 'trials:audit:action:setSeriesDeleted': `设置为删除`,
+ 'trials:audit:action:setSeriesNoDelete': `设置为不删除`,
+ 'trials:audit:message:setSeriesReading': `是否确认更改?`,
+ 'trials:audit:message:setSeriesNotReading': `是否确认更改?`,
+ 'trials:audit:message:setSeriesDeleted': `是否确认更改?`,
+ 'trials:audit:message:setSeriesNoDelete': `是否确认更改?`,
+ 'trials:audit:tab:nonDicoms': `非DICOM影像`,
+ 'trials:audit:title:nonDicomsTitle': `检查信息`,
+ 'trials:audit:tip:nonDicomsVisitWindow': `访视窗口期`,
+ 'trials:audit:tip:nonDicomsPreviewAll': `预览`,
+ 'trials:audit:table:nonDicomsStudyId': `检查编号`,
+ 'trials:audit:table:nonDicomsModality': `检查类型`,
+ 'trials:audit:table:nonDicomsBodypart': `检查部位`,
+ 'trials:audit:table:nonDicomsFileCount': `图像数量`,
+ 'trials:audit:table:nonDicomsFileName': `文件名称`,
+ 'trials:audit:table:nonDicomsStudyDate': `检查日期`,
+ 'trials:audit:table:nonDicomsUpdateTime': `更新时间`,
+ 'trials:audit:button:nonDicomsPreview': `预览`,
+ 'trials:audit:button:nonDicomsEdit': `编辑`,
+ 'trials:audit:tab:clinicalData': `临床数据`,
+ 'trials:audit:title:questions': `审核问题`,
+ 'trials:audit:message:noData': `暂无数据`,
+ 'trials:audit:button:save': `保存`,
+ 'trials:audit:button:question': `发质疑`,
+ 'trials:audit:button:historicalQuestions': `历史质疑`,
+ 'trials:audit:button:auditPassed': `审核通过`,
+ 'trials:audit:button:auditFailed': `审核终止`,
+ 'trials:audit:dialogTitle:question': `发起质疑`,
+ 'trials:audit:form:questionContent': `质疑内容`,
+ 'trials:audit:form:questionDeadline': `处理截止时限`,
+ 'trials:audit:form:questionSummary': `问题总结`,
+ 'trials:audit:form:actionMatters': `行动事项`,
+ 'trials:audit:dialogTitle:historicalQuestions': `历史质疑`,
+ 'trials:audit:button:refreshHistoryQs': `刷新`,
+ 'trials:audit:message:qsContentIsNull': `质疑内容不能为空!`,
+ 'trials:audit:message:qsOverWindow': `超窗`,
+ 'trials:audit:message:qsOverWindow1': `本访视经系统计算窗口期时间段为`,
+ 'trials:audit:message:qsOverWindow2': `而访视图像拍片日期为`,
+ 'trials:audit:message:qsOverWindow3': `影像检查未在窗口期内`,
+ 'trials:audit:message:qsOverWindow4': `请确认本访视是否超窗,如超窗请回复原因`,
+ 'trials:audit:message:sureToUpdate': `是否确认更改?`,
+ 'trials:audit:message:specifyQuestions': `请先核查图像,保存审核问题后,再下审核结论!`,
+ 'trials:audit:message:changeSeriesStatus': `是否确认将此序列状态变更为xxx?`,
+ 'trials:audit:label:setSeriesReading': `阅片`,
+ 'trials:audit:label:setSeriesNotReading': `不阅片`,
+ 'trials:audit:label:setSeriesDeleted': `删除`,
+ 'trials:audit:label:setSeriesNotDelete': `不删除`,
+ 'trials:tab:qcQuality': `QC质疑`,
+ 'trials:qcQuality:table:challengeCode': `质疑编号`,
+ 'trials:qcQuality:table:siteId': `中心编号`,
+ 'trials:qcQuality:table:subjectId': `受试者编号`,
+ 'trials:qcQuality:table:visitName': `访视名称`,
+ 'trials:qcQuality:table:createTime': `创建时间`,
+ 'trials:qcQuality:table:organizer': `创建人`,
+ 'trials:qcQuality:table:latestReplyer': `最新回复人`,
+ 'trials:qcQuality:table:latestReplyTime': `最新回复时间`,
+ 'trials:qcQuality:table:reUploadStatus': `重传状态`,
+ 'trials:qcQuality:table:reUploadTime': `重传完成时间`,
+ 'trials:qcQuality:table:deadline': `处理截止时限`,
+ 'trials:qcQuality:table:qsDuration': `质疑时长`,
+ 'trials:qcQuality:table:isOverTime': `是否超限`,
+ 'trials:qcQuality:table:closingTime': `关闭时间`,
+ 'trials:qcQuality:table:isReupload': `是否重传`,
+ 'trials:qcQuality:table:isClosed': `是否关闭`,
+ 'trials:qcQuality:table:latestMsgTime': `最新消息时间`,
+ 'trials:qcQuality:table:qCProcessEnum': `审核批次`,
+ 'trials:qcQuality:action:reply': `回复`,
+ 'trials:qcQuality:action:close': `关闭`,
+ 'trials:qcQuality:dialogTitle:reply': `质疑记录`,
+ 'trials:qcQuality:dialog:qcContent': `您好,本访视影像及所有数据的问题总结如下:`,
+ 'trials:qcQuality:dialogTips:tip': `说明:为高效解决/处理以上全部质疑问题,麻烦您在准确核实情况后逐条准确完整回复上述行动事项,明确是否可以纠正,如无法纠正请提醒研究者在以后的影像学检查中注意上述问题(如适用)。`,
+ 'trials:qcQuality:dialog:deadline': `处理截止时限`,
+ 'trials:qcQuality:dialog:none': `无`,
+ 'trials:qcQuality:dialogButton:send': `发送`,
+ 'trials:qcQuality:dialogButton:close': `关闭`,
+ 'trials:qcQuality:dialogButton:agreeToReupload': `同意重传`,
+ 'trials:qcQuality:dialogTitle:closeQuestion': `关闭质疑`,
+ 'trials:qcQuality:label:closeReason': `关闭原因`,
+ 'trials:qcQuality:radio:reason1': `问题已解决`,
+ 'trials:qcQuality:radio:reason2': `问题无法解决强制关闭质疑`,
+ 'trials:qcQuality:radio:reason3': `其他`,
+ 'trials:qcQuality:label:otherReason': `其他原因说明`,
+ 'trials:qcQuality:message:problemSolved': `问题已解决`,
+ 'trials:qcQuality:message:problemNotSolved': `问题无法解决强制关闭质疑,已提醒中心下次注意`,
+ 'trials:qcQuality:message:closedSuccessfully': `关闭成功!`,
+ 'trials:qcQuality:message:agreeToReupload': `是否确认同意重传?`,
+ 'trials:qcQuality:label:agreeToReupload': `IQC同意重传`,
+ 'trials:qcQuality:title:closed': `已关闭`,
+ 'trials:qcQuality:title:unClose': `未关闭`,
+ 'trials:qcQuality:title:title1': `请补充检查xxx的检查部位!`,
+ 'trials:qcQuality:title:title2': `是否确认进入下一个质控任务?`,
+ 'trials:qcQuality:title:title3': `当前领取的质控任务已全部完成!`,
+ 'trials:qcQuality:label:passReason': `通过原因`,
+ 'trials:qcQuality:label:closeReason': `关闭原因`,
+ 'trials:tab:consistencyCheck': `一致性核查`,
+ 'trials:consistencyCheck:button:upload': `上传`,
+ 'trials:consistencyCheck:button:download': `下载模板`,
+ 'trials:consistencyCheck:table:isUrgent': `是否加急`,
+ 'trials:consistencyCheck:table:checkChallengeState': `核查质疑状态`,
+ 'trials:consistencyCheck:table:siteId': `中心编号`,
+ 'trials:consistencyCheck:table:subjectId': `受试者编号`,
+ 'trials:consistencyCheck:table:visitName': `访视名称`,
+ 'trials:consistencyCheck:table:auditState': `核查前状态`,
+ 'trials:consistencyCheck:table:requestBackState': `回退状态`,
+ 'trials:consistencyCheck:table:checkTime': `核查时间`,
+ 'trials:consistencyCheck:table:checkPassedTime': `核查通过时间`,
+ 'trials:consistencyCheck:table:checkState': `核查状态`,
+ 'trials:consistencyCheck:table:checkResult': `不一致项`,
+ 'trials:consistencyCheck:table:scanDate': `检查日期`,
+ 'trials:consistencyCheck:table:modality': `检查类型`,
+ 'trials:consistencyCheck:action:reply': `回复`,
+ 'trials:consistencyCheck:action:view': `查看`,
+ 'trials:consistencyCheck:action:applyFallback': `申请回退`,
+ 'trials:consistencyCheck:action:fallback': `回退`,
+ 'trials:consistencyCheck:action:close': `关闭`,
+ 'trials:consistencyCheck:action:pass': `通过`,
+ 'trials:consistencyCheck:dialogTitle:qsContent': `质疑内容`,
+ 'trials:consistencyCheck:label:noData': `暂无数据`,
+ 'trials:consistencyCheck:button:rejectBack': `拒绝回退`,
+ 'trials:consistencyCheck:button:sendMessage': `发送`,
+ 'trials:consistencyCheck:dialogTitle:passManually': `手动通过一次性核查原因`,
+ 'trials:consistencyCheck:dialogTitle:close': `关闭一致性核查原因`,
+ 'trials:consistencyCheck:label:reason': `原因`,
+ 'trials:consistencyCheck:message:pmPerformed': `PM执行了一致性核查回退`,
+ 'trials:consistencyCheck:message:fallbackSuccessfully': `回退成功!`,
+ 'trials:consistencyCheck:message:closedSuccessfully': `关闭成功!`,
+ 'trials:consistencyCheck:message:appledSuccessfully': `申请成功!`,
+ 'trials:consistencyCheck:message:apply': `是否确认申请回退?`,
+ 'trials:consistencyCheck:label:file': `文件`,
+ 'trials:consistencyCheck:message:excelFileOnly': `必须是Excel文件`,
+ 'trials:consistencyCheck:dialogButton:upload': `上传`,
+ 'trials:consistencyCheck:message:xlsx': `必须是xls、xlsx格式`,
+ 'trials:consistencyCheck:message:onlyOneFile': `只允许上传一个文件`,
+ 'trials:consistencyCheck:button:export1': `导出一致性核查表`,
+ 'trials:consistencyCheck:button:export2': `导出一致性核查记录表`,
+ 'trials:consistencyCheck:title:note': `备注:`,
+ 'trials:consistencyCheck:title:reply': `回复`,
+ 'trials:consistencyCheck:title:close': `关闭`,
+ 'trials:consistencyCheck:title:replyConsistency': `回复一致性核查`,
+ 'trials:consistencyCheck:title:message1': `经系统核实`,
+ 'trials:consistencyCheck:title:message2': `该受试者本访视在IRC中已提交的影像检查情况如下,如果下列影像中存在多余影像,请勾选:`,
+ 'trials:consistencyCheck:title:message3': `您确认该访视上传了多余的影像检查,请说明原因。如需要删除影像,请申请回退,谢谢配合!`,
+ 'trials:consistencyCheck:title:message4': `IRC多余影像原因`,
+ 'trials:consistencyCheck:title:message5': `IRC和EDC中不一致的影像检查如下,如果情况属实,请勾选:`,
+ 'trials:consistencyCheck:title:message6': `IRC和EDC中不一致的影像检查如下,如果情况属实,请勾选:无`,
+ 'trials:consistencyCheck:title:message7': `您确认当前访视有遗漏影像检查,请选择原因。如需要补充上传影像,请申请回退,谢谢配合!`,
+ 'trials:consistencyCheck:title:message8': `IRC缺失影像原因`,
+ 'trials:consistencyCheck:title:message9': `EDC按疗效评估数据记录影像检查信息`,
+ 'trials:consistencyCheck:title:message10': `EDC录入错误`,
+ 'trials:consistencyCheck:title:message11': `IRC数据上传错误,申请回退并重新上传`,
+ 'trials:consistencyCheck:title:message12': `经核实,该受试者本访视存在,并且已在IRC系统中已提交的影像检查如下:`,
+ 'trials:consistencyCheck:title:none': `无`,
+ 'trials:consistencyCheck:title:message13': `本访视存在,但是在IRC和EDC中不一致的影像检查如下:`,
+ 'trials:consistencyCheck:title:message14': `本访视存在,但是在IRC和EDC中不一致的影像检查如下:无`,
+ 'trials:consistencyCheck:title:message15': `问题原因如下:`,
+ 'trials:consistencyCheck:title:message16': `1.IRC多余影像原因:`,
+ 'trials:consistencyCheck:title:message17': `请填写IRC多余影像原因!`,
+ 'trials:consistencyCheck:title:message18': `2.IRC缺失影像原因:`,
+ 'trials:consistencyCheck:title:message19': `请选择IRC缺失影像原因!`,
+ 'trials:consistencyCheck:title:message20': `请准确核实后录入当前访视的实际影像检查记录:`,
+ 'trials:consistencyCheck:title:add': `添加`,
+ 'trials:consistencyCheck:title:studyDate': `检查日期`,
+ 'trials:consistencyCheck:title:studyModality': `检查类型`,
+ 'trials:consistencyCheck:title:submitted': `已提交`,
+ 'trials:consistencyCheck:title:existed': `实际存在`,
+ 'trials:consistencyCheck:title:delete': `删除`,
+ 'trials:consistencyCheck:title:title1': `IRC与实际情况影像检查不一致的原因为:`,
+ 'trials:consistencyCheck:title:addStudy': `添加检查`,
+ 'trials:consistencyCheck:title:title2': `请选择检查日期和检查类型`,
+ 'trials:consistencyCheck:title:title3': `确定删除该条检查记录?`,
+ 'trials:consistencyCheck:title:title4': `请录入真实的检查情况`,
+ 'trials:consistencyCheck:title:title5': `经核实,该受试者当前访视的实际影像检查如下:`,
+ 'trials:consistencyCheck:title:title6': `yyyy的xxx影像检查`,
+ 'trials:consistencyCheck:title:title7': `IRC与实际情况不一致影像检查如下`,
+ 'trials:consistencyCheck:title:title8': `IRC多余`,
+ 'trials:consistencyCheck:title:title9': `IRC缺少`,
+ 'trials:consistencyCheck:title:title10': `IRC与实际情况影像检查不一致的原因为:`,
+ 'trials:consistencyCheck:title:title11': `IRC与实际情况影像检查一致`,
+ 'trials:consistencyCheck:dialogTitle:xfpassManually': `一致性核查通过`,
+ 'trials:consistencyCheck:dialogTitle:xfclose': `关闭一致性核查`,
+ 'trials:check:radio:passreason1': `线上质疑解决核查通过`,
+ 'trials:check:radio:passreason2': `线下核查通过`,
+ 'trials:check:radio:passreason3': `实时阅片跳过核查`,
+ 'trials:check:radio:passreason4': `其它`,
+ 'trials:check:radio:closereason1': `问题已解决`,
+ 'trials:check:radio:closereason2': `问题无法解决强制关闭质疑`,
+ 'trials:check:radio:closereason3': `其他`,
+ 'trials:consistencyCheck:label:passreason': `原因`,
+ 'trials:consistencyCheck:label:closereason': `备注`,
+ 'trials:tab:dicomForward': `影像转发`,
+ 'trials:dicomForward:table:siteId': `中心编号`,
+ 'trials:dicomForward:table:subjectId': `受试者编号`,
+ 'trials:dicomForward:tableon:visitName': `访视名称`,
+ 'trials:dicomForward:table:forwardStatus': `转发状态`,
+ 'trials:dicomForward:table:forwardUser': `转发人`,
+ 'trials:dicomForward:table:forwardTime': `转发时间`,
+ 'trials:dicomForward:action:forward': `转发`,
+ 'trials:dicomForward:message:forwardSuccessfully': `转发成功!`,
+ 'trials:dicomForward:message:sureToForward': `是否确认转发?`,
+ 'trials:trials-panel:tab:readingTask': `待阅`,
+ 'trials:trials-panel:tab:readTask': `已阅`,
+ 'trials:trials-panel:tab:medicalFeedback': `医学反馈`,
+ 'trials:trials-panel:tab:rereadTask': `退回历史`,
+ 'trials:trials-panel:tab:mimMedicalAudit': `医学审核`,
+ 'trials:tab:studyList': `检查`,
+ 'trials:studyList:table:studyId': `检查编号`,
+ 'trials:studyList:table:imageType': `图像类型`,
+ 'trials:studyList:table:studyInfo': `检查信息`,
+ 'trials:studyList:table:visit': `访视`,
+ 'trials:studyList:table:subject': `受试者`,
+ 'trials:studyList:table:site': `中心`,
+ 'trials:studyList:table:uploader': `上传人`,
+ 'trials:studyList:table:uploadTime': `上传时间`,
+ 'trials:studyList:button:view': `查看`,
+ 'trials:studyList:table:modality': `检查设备`,
+ 'trials:studyList:table:bodyPart': `检查部位`,
+ 'trials:studyList:table:count': `检查数量`,
+ 'trials:studyList:table:studyDate': `检查日期`,
+ 'trials:studyList:table:seriesNum': `序列编号`,
+ 'trials:studyList:table:description': `描述`,
+ 'trials:studyList:table:sliceThickness': `层厚`,
+ 'trials:studyList:table:instanceCount': `图像数量`,
+ 'trials:studyList:table:fileName': `文件名称`,
+ 'trials:studyList:table:visitName': `访视名称`,
+ 'trials:studyList:table:visitNum': `访视号`,
+ 'trials:studyList:table:siteId': `中心编号`,
+ 'trials:studyList:table:siteName': `中心名称`,
+ 'trials:studyList:label:series': `序列`,
+ 'trials:studyList:dialogTitle:view': `预览`,
+ 'trials:studyList:action:share': `分享`,
+ 'trials:tab:setting': `配置`,
+ 'trials:tab:trialCfg': `项目配置`,
+ 'trials:trialConfig:title:logincCfg': `逻辑配置`,
+ 'trials:logincCfg:form:subjectNumberRule': `受试者编号规则提醒`,
+ 'trials:logincCfg:form:subjectNum2': `受试者第二编号`,
+ 'trials:logincCfg:form:subjectNumFormat': `受试者编号格式`,
+ 'trials:logincCfg:form:scanDateVerify': `扫描日期校验`,
+ 'trials:logincCfg:form:visitBaseDate': `访视基准日期`,
+ 'trials:logincCfg:form:visitBaseDataDes': `基准日期说明`,
+ 'trials:logincCfg:form:subjectAge': `受试者年龄`,
+ 'trials:logincCfg:form:subjectGender': `受试者性别`,
+ 'trials:logincCfg:form:lastVisitName': `计划外的末次访视名称`,
+ 'trials:logincCfg:form:clinicalInforTransfer': `临床信息传输`,
+ 'trials:logincCfg:form:clinicalConfig': `临床数据配置`,
+ 'trials:logincCfg:form:imageCopy': `影像跨项目复制`,
+ 'trials:logincCfg:form:bodypart': `检查部位`,
+ 'trials:logincCfg:form:modality': `检查技术`,
+ 'trials:logincCfg:form:exceededDays': `影像质疑超限天数`,
+ 'trials:trialCfg:title:processCfg': `流程配置`,
+ 'trials:processCfg:form:qcProcess': `影像质控流程`,
+ 'trials:processCfg:form:conProcess': `一致性核查流程`,
+ 'trials:processCfg:form:readingMode': `阅片方式`,
+ 'trials:processCfg:form:imagePlatform': `阅片平台`,
+ 'trials:processCfg:form:criterion': `阅片标准`,
+ 'trials:processCfg:form:digitPlaces': `修约小数位数`,
+ 'trials:processCfg:form:readingType': `阅片模式`,
+ 'trials:processCfg:form:IsAutoCreate': `自动生成阅片任务`,
+ 'trials:processCfg:form:IsAdditionalAssessment': `存在附加评估`,
+ 'trials:processCfg:form:global': `全局阅片`,
+ 'trials:processCfg:form:ad': `仲裁阅片`,
+ 'trials:processCfg:form:clinical': `肿瘤学阅片`,
+ 'trials:processCfg:form:adRules': `仲裁规则`,
+ 'trials:processCfg:title:criterion': `阅片标准`,
+ 'trials:processCfg:title:criterionName': `阅片标准名称`,
+ 'trials:processCfg:title:clinicalDataCfg': `临床数据配置`,
+ 'trials:processCfg:title:clinicalDataName': `临床数据名称`,
+ 'trials:processCfg:title:uploader': `上传人`,
+ 'trials:processCfg:title:dataLevel': `数据级别`,
+ 'trials:processCfg:title:transferType': `传输方式`,
+ 'trials:processCfg:title:modulesName': `模板名称`,
+ 'trials:processCfg:message:delete': `是否确认删除?`,
+ 'trials:processCfg:message:update': `是否确认更改?`,
+ 'trials:processCfg:title:module': `模板`,
+ 'trials:processCfg:button:select': `选择`,
+ 'trials:processCfg:title:docFormat': `(必须是doc/docx格式)`,
+ 'trials:processCfg:title:onlyOneFile': `只允许上传一个文件`,
+ 'trials:processCfg:form:medicalAudit': `医学审核`,
+ 'trials:trialCfg:title:urgentCfg': `加急配置`,
+ 'trials:urgentCfg:form:enroll': `入组确认评估`,
+ 'trials:urgentCfg:form:pd': `疾病进展确认评估`,
+ 'trials:urgentCfg:form:trial': `启用项目加急`,
+ 'trials:urgentCfg:form:subject': `启用受试者加急`,
+ 'trials:urgentCfg:form:enrollConfirmDefaultUserType': `入组确认评估角色`,
+ 'trials:urgentCfg:form:PDProgressDefaultUserType': `疾病进展确认评估角色`,
+ 'trials:trialCfg:button:confirm': `配置确认`,
+ 'trials:trialCfg:button:update': `更新`,
+ 'trials:trialCfg:button:updateAndConfirm': `配置更新确认`,
+ 'trials:trialCfg:button:confirmCfg': `确认`,
+ 'trials:trialCfg:dialogTitle:cfgConfirm': `确认`,
+ 'trials:trialCfg:table:cfgItem': `配置项`,
+ 'trials:trialCfg:table:cfgVal': `配置值`,
+ 'trials:trialCfg:table:beforeChange': `更改前`,
+ 'trials:trialCfg:table:updated': `更改后`,
+ 'trials:trialCfg:formRule:bodyPart': `选项请用 ‘|’ 分隔。例如:Chest|Head|Other`,
+ 'trials:trialCfg:formRule:modality': `选项请用 ‘|’ 分隔。例如:CT|MR|CR|PET|Other`,
+ 'trials:tab:siteAndStaff': `人员&中心管理`,
+ 'trials:staff:title:staff': `人员`,
+ 'trials:staff:button:addExternalStaff': `添加新用户`,
+ 'trials:staff:button:addInternalStaff': `添加平台用户`,
+ 'trials:staff:table:name': `姓名`,
+ 'trials:staff:table:uid': `用户名`,
+ 'trials:staff:table:organization': `单位`,
+ 'trials:staff:table:phone': `电话`,
+ 'trials:staff:table:email': `邮箱`,
+ 'trials:staff:table:userType': `用户类型`,
+ 'trials:staff:table:status': `状态`,
+ 'trials:staff:table:joinTime': `加入日期`,
+ 'trials:staff:table:exitTime': `退出日期`,
+ 'trials:staff:table:authorizationTime': `授权时间`,
+ 'trials:staff:table:disableTime': `禁用时间`,
+ 'trials:staff:action:status': `状态`,
+ 'trials:staff:dialogTitle:add': `添加`,
+ 'trials:staff:dialogTitle:status': `状态`,
+ 'trials:staff:message:addStaff': `是否确认添加?`,
+ 'trials:staff:button:sendEmail': `发邮件`,
+ 'trials:externalStaff:table:lastName': `姓`,
+ 'trials:externalStaff:table:firstName': `名`,
+ 'trials:externalStaff:table:name': `姓名`,
+ 'trials:externalStaff:table:phone': `电话`,
+ 'trials:externalStaff:table:email': `邮箱`,
+ 'trials:externalStaff:table:organization': `单位`,
+ 'trials:externalStaff:table:userType': `用户类型`,
+ 'trials:externalStaff:table:status': `状态`,
+ 'trials:externalStaff:button:delete': `删除`,
+ 'trials:externalStaff:button:saveAndSendEmail': `保存并发邮件`,
+ 'trials:externalStaff:dialogTitle:add': `添加`,
+ 'trials:externalStaff:dialogTitle:edit': `编辑`,
+ 'trials:externalStaff:message:delete': `是否确认删除?`,
+ 'trials:externalStaff:message:add': `是否确认添加?`,
+ 'trials:externalStaff:formRule:phone': `电话无效`,
+ 'trials:externalStaff:formRule:email': `邮箱无效`,
+ 'trials:siteAndStaff:title:site': `中心`,
+ 'trials:sitesList:button:siteResearch': `中心调研`,
+ 'trials:sitesList:button:SeeNextPage': `参见下一页`,
+ 'trials:sitesList:table:siteId': `中心编号`,
+ 'trials:sitesList:table:siteName': `中心名称`,
+ 'trials:sitesList:table:siteAliasName': `中心别名`,
+ 'trials:sitesList:table:city': `城市`,
+ 'trials:sitesList:table:country': `国家`,
+ 'trials:sitesList:table:staff': `参与人员`,
+ 'trials:sitesList:table:status': `是否启用`,
+ 'trials:sitesList:table:timeAdded': `授权时间`,
+ 'trials:sitesList:table:timeDeleted': `禁用时间`,
+ 'trials:sitesList:action:assign': `CRC/CRA`,
+ 'trials:sitesList:dialogTitle:assignSite': `添加中心`,
+ 'trials:sitesList:dialogTitle:assignStaff': `CRC/CRA人员列表(项目:xxx)`,
+ 'trials:sitesList:dialogTitle:editSite': `编辑`,
+ 'trials:sitesList:dialogTitle:staff': `CRC/CRA人员列表(中心:xxx)`,
+ 'trials:sitesList:dialogTitle:editStaffStauts': `编辑`,
+ 'trials:sitesList:message:setSiteId': `请先设置中心编号`,
+ 'trials:sitesList:message:removeSite': `是否确认移除?`,
+ 'trials:sitesList:message:removedSuccessfully': `移除成功!`,
+ 'trials:sitesList:form:keyWord': `关键词`,
+ 'trials:sitesList:formPlaceholder:keyWord': `人员用户名/姓名/邮箱`,
+ 'trials:sitesList:dialogTitle:upload': `导入`,
+ 'trials:internalStaff:button:assign': `分配`,
+ 'trials:internalStaff:table:name': `姓名`,
+ 'trials:internalStaff:table:uid': `用户名`,
+ 'trials:internalStaff:table:phone': `电话`,
+ 'trials:internalStaff:table:email': `邮箱`,
+ 'trials:internalStaff:table:organization': `单位`,
+ 'trials:internalStaff:table:userType': `用户类型`,
+ 'trials:internalStaff:table:status': `状态`,
+ 'trials:internalStaff:table:authorizationTime': `授权时间`,
+ 'trials:internalStaff:table:disableTime': `禁用时间`,
+ 'trials:internalStaff:action:status': `状态`,
+ 'trials:internalStaff:message:assign': `是否确认分配?`,
+ 'trials:sitesList:dialogTitle:addSite': `添加中心`,
+ 'trials:sitesList:dialogButton:customSite': `自定义`,
+ 'trials:sitesList:dialogButton:addSite': `添加`,
+ 'trials:customSite:title:custom': `自定义`,
+ 'trials:customSite:form:siteId': `中心编号`,
+ 'trials:customSite:form:siteName': `中心名称`,
+ 'trials:customSite:form:orgCode': `组织机构代码`,
+ 'trials:customSite:form:country': `国家`,
+ 'trials:customSite:form:city': `城市`,
+ 'trials:customSite:form:address': `地址`,
+ 'trials:customSite:form:hospital': `附属医院`,
+ 'trials:customSite:form:director': `负责人`,
+ 'trials:customSite:form:directorPhone': `负责人电话`,
+ 'trials:customSite:form:contactor': `联系人`,
+ 'trials:customSite:form:contactorPhone': `联系人电话`,
+ 'trials:customSite:message:add': `是否确认添加?`,
+ 'trials:tab:visitPlan': `访视管理`,
+ 'trials:visitPlan:button:confirm': `确认`,
+ 'trials:visitPlan:button:adjustRecord': `调整记录`,
+ 'trials:visitPlan:table:visitName': `访视名称`,
+ 'trials:visitPlan:table:isBaseLine': `是否基线`,
+ 'trials:visitPlan:table:blindName': `盲态标识`,
+ 'trials:visitPlan:table:viistNum': `访视号`,
+ 'trials:visitPlan:table:viistDay': `访视间隔(天)`,
+ 'trials:visitPlan:table:window': `窗口`,
+ 'trials:visitPlan:table:isConfirm': `是否确认`,
+ 'trials:visitPlan:table:isDeleted': `是否废除`,
+ 'trials:visitPlan:table:description': `描述`,
+ 'trials:visitPlan:table:createTime': `创建时间`,
+ 'trials:visitPlan:table:day': `天`,
+ 'trials:visitPlan:dialogTitle:record': `调整记录`,
+ 'trials:adjustRecord:table:connfirmor': `确认人`,
+ 'trials:adjustRecord:table:connfirmTime': `确认时间`,
+ 'trials:adjustRecord:table:record': `超窗结论不一致记录`,
+ 'trials:adjustRecord:action:download': `下载`,
+ 'trials:adjustRecord:message:confirm': `是否确认提交?`,
+ 'trials:adjustRecord:formRule:window': `上区间要小于下区间!`,
+ 'trials:visitPlan:button:blindFlag': `盲态标识`,
+ 'trials:visitPlan:button:bsBlindFlag': `基线盲态标识`,
+ 'trials:visitPlan:button:visitBlindFlag': `随访盲态标识前缀`,
+ 'trials:tab:qcCfg': `QC问题配置`,
+ 'trials:qcCfg:button:preview': `预览`,
+ 'trials:qcCfg:button:confirm': `配置确认`,
+ 'trials:qcCfg:button:default': `默认问题`,
+ 'trials:qcCfg:button:custom': `自定义`,
+ 'trials:qcCfg:table:questionName': `审核问题`,
+ 'trials:qcCfg:table:type': `类型`,
+ 'trials:qcCfg:table:typeValue': `选项`,
+ 'trials:qcCfg:table:order': `序号`,
+ 'trials:qcCfg:table:isRequired': `是否必填`,
+ 'trials:qcCfg:table:isEnable': `启用状态`,
+ 'trials:qcCfg:table:parentQs': `父问题`,
+ 'trials:qcCfg:table:parentTriggerValue': `显示触发值`,
+ 'trials:qcCfg:table:level': `级别`,
+ 'trials:qcCfg:message:typeValue': `选项请用‘|’分割多个选项`,
+ 'trials:qcCfg:message:deleteWarning': `该问题下存在子问题,不允许删除!`,
+ 'trials:qcCfg:message:msg1': `选项不允许存在相同值`,
+ 'trials:qcCfg:message:msg2': `请先配置QC审核问题再进行确认!`,
+ 'trials:qcCfg:message:delete': `是否确认删除?`,
+ 'trials:qcCfg:dialogTitle:new': `新增`,
+ 'trials:qcCfg:dialogTitle:edit': `编辑`,
+ 'trials:qcCfg:dialogTitle:custom': `自定义`,
+ 'trials:tab:attachment': `文件管理`,
+ 'trials:attachment:table:fileType': `文件类型`,
+ 'trials:attachment:table:fileName': `文件名称`,
+ 'trials:attachment:table:min': `查看最短时间(分钟)`,
+ 'trials:attachment:table:isDeleted': `是否废除`,
+ 'trials:attachment:table:userType': `需要签署的用户类型`,
+ 'trials:attachment:table:description': `描述`,
+ 'trials:attachment:table:updateTime': `更新时间`,
+ 'trials:attachment:action:preview': `预览`,
+ 'trials:attachment:action:edit': `编辑`,
+ 'trials:attachment:action:apolish': `废除`,
+ 'trials:attachment:dialogTitle:preview': `预览`,
+ 'trials:attachment:message:abolish': `是否确认废除此文件?`,
+ 'trials:attachment:message:delete': `是否确认删除?`,
+ 'trials:attachment:form:file': `文件`,
+ 'trials:attachment:message:pdf': `必须是PDF格式`,
+ 'trials:attachment:message:selectFile': `请选择文件`,
+ 'trials:attachment:message:uploadFile': `只允许上传一个文件`,
+ 'trials:attachment:button:select': `选择`,
+ 'trials:tab:medicalAuditCfg': `医学审核问题配置`,
+ 'trials:medicalAuditCfg:message:message1': `请勾选医学审核问题`,
+ 'trials:tab:readingUnitCfg': `阅片单元配置`,
+ 'trials:readingUnit:button:sync': `同步当前标准`,
+ 'trials:readingUnit:button:confirm': `确认`,
+ 'trials:readingUnit:message:sync': `确定要同步最新标准配置吗?`,
+ 'trials:readingUnit:message:msg1': `系统检测当前阅片标准配置发生更新,是否确认获取最新配置信息?`,
+ 'trials:readingUnit:message:msg2': `xxx区域信息不完整,请完成后确认!`,
+ 'trials:readingUnit:label:isconfirm': `是否确认:`,
+ 'trials:readingUnit:readingRules': `阅片规则`,
+ 'trials:readingUnit:readingRules:title:readingTool': `阅片工具`,
+ 'trials:readingUnit:readingRules:title:isReadingPeriod': `存在阅片期`,
+ 'trials:readingUnit:readingRules:title:readingTaskViewInOrder': `任务展示方式`,
+ 'trials:readingUnit:readingRules:title:readingTaskViewEnum': `任务组织级别`,
+ 'trials:readingUnit:readingRules:title:isReadingShowSubjectInfo': `阅片页面是否显示受试者信息`,
+ 'trials:readingUnit:readingRules:title:isReadingShowPreviousResults': `阅片页面是否可以查看既往任务结果`,
+ 'trials:readingUnit:readingRules:title:isECRFShowInDicomReading': `eICRF是否显示在影像阅片页面`,
+ 'trials:trials-panel:setting:reading-unit:TrialCriterionAdditionalAssessmentTypeList': `附加评估`,
+ 'trials:readingUnit:readingRules:title:readingDivision': `阅片人员`,
+ 'trials:readingUnit:readingRules:title:pIReadingScopen': `PI阅片范围`,
+ 'trials:readingUnit:readingCriterion': `阅片标准`,
+ 'trials:readingUnit:readingCriterion:title:formQs': `表单问题`,
+ 'trials:readingUnit:qsList:title:type': `题型`,
+ 'trials:readingUnit:qsList:title:qsName': `阅片问题(CN)`,
+ 'trials:readingUnit:qsList:title:qsNameEn': `阅片问题`,
+ 'trials:readingUnit:qsList:title:groupName': `分组(CN)`,
+ 'trials:readingUnit:qsList:title:groupNameEn': `分组`,
+ 'trials:readingUnit:qsList:title:PrecopyValue': `是否复制前值`,
+ 'trials:readingUnit:qsList:title:isRequired': `是否必填`,
+ 'trials:readingUnit:qsList:title:isShow': `是否显示`,
+ 'trials:readingUnit:qsList:title:isJudgeQuestion': `是否裁判问题`,
+ 'trials:readingUnit:qsList:title:isShowInDicom': `是否在阅片页显示`,
+ 'trials:readingUnit:qsList:title:globalReadingShowType': `是否在全局阅片显示`,
+ 'trials:readingUnit:qsList:title:orderMark': `自增序号前缀`,
+ 'trials:readingUnit:qsList:title:maxQuestionCount': `最大行数`,
+ 'trials:readingUnit:qsList:title:isCopyLesions': `随访是否复制`,
+ 'trials:readingUnit:qsList:title:dataSource': `问题数据来源`,
+ 'trials:readingUnit:qsList:title:valueType': `数值类型`,
+ 'trials:readingUnit:qsList:title:digitPlaces': `修约小数位数`,
+ 'trials:readingUnit:qsList:title:unit': `单位`,
+ 'trials:readingUnit:qsList:title:customUnit': `自定义单位`,
+ 'trials:readingUnit:qsList:title:customCalculateMark': `运算类型`,
+ 'trials:readingUnit:qsList:title:order': `序号`,
+ 'trials:readingUnit:qsList:title:tableName': `表格名称`,
+ 'trials:readingUnit:qsList:title:typeValue': `选项`,
+ 'trials:readingUnit:qsList:title:defaultValue': `默认值`,
+ 'trials:readingUnit:qsList:title:parentId': `显示依赖父问题`,
+ 'trials:readingUnit:qsList:title:parentTriggerValueList': `显示触发值`,
+ 'trials:readingUnit:qsList:title:relevanceId': `必填依赖父问题`,
+ 'trials:readingUnit:qsList:title:relevanceValueList': `必填触发值`,
+ 'trials:readingUnit:qsList:title:limitEdit': `限制编辑`,
+ 'trials:readingUnit:qsList:title:imageCount': `最大上传个数`,
+ 'trials:readingUnit:qsList:title:Remark': `注释`,
+ 'trials:readingUnit:qsList:title:FileType': `文件类型`,
+ 'trials:readingUnit:qsList:title:MaxAnswerLength': `最大字符数`,
+ 'trials:readingUnit:qsList:title:DependParentId': `关联问题`,
+ 'trials:readingUnit:qsList:title:DataTableColumn': `关联字段`,
+ 'trials:readingUnit:qsList:title:MaxRowCount': `重复出现最大次数`,
+ 'trials:readingUnit:qsList:message:msg0': `选项不允许存在相同值`,
+ 'trials:readingUnit:qsList:message:msg1': `请选择同级问题!`,
+ 'trials:readingUnit:qsList:message:msg2': `请选择表格问题下的子问题!`,
+ 'trials:readingUnit:qsList:message:msg3': `选项请用‘|’分割多个选项`,
+ 'trials:readingUnit:label:DictionaryCode': `关联字典`,
+ 'trials:readingUnit:label:QuestionGenre': `选项类型`,
+ 'trials:readingUnit:qsList:title:edit': `编辑`,
+ 'trials:readingUnit:qsList:title:view': `查看`,
+ 'trials:readingUnit:qsList:title:tableQs': `表格问题`,
+ 'trials:readingUnit:qsList:title:delete': `删除`,
+ 'trials:readingUnit:qsList:title:add': `添加`,
+ 'trials:readingUnit:qsList:title:ecrfPreview': `eICRF预览`,
+ 'trials:readingUnit:qsList:message:deleteConfirm': `是否确认删除?`,
+ 'trials:readingUnit:qsList:message:deleteSuccessfully': `删除成功!`,
+ 'trials:readingUnit:qsList:message:loading': `加载中`,
+ 'trials:readingUnit:qsList:message:imageFormat': `必须是xxx格式。`,
+ 'trials:readingUnit:readingCriterion:title:baseDataCfg': `基础数据配置`,
+ 'trials:readingUnit:baseDataCfg:title:organ': `器官`,
+ 'trials:readingUnit:baseDataCfg:title:organType': `器官类型`,
+ 'trials:readingUnit:baseDataCfg:title:classification': `分类`,
+ 'trials:readingUnit:baseDataCfg:title:classificationEn': `分类(英文)`,
+ 'trials:readingUnit:baseDataCfg:title:bodyPart': `部位`,
+ 'trials:readingUnit:baseDataCfg:title:bodyPartEn': `部位(英文)`,
+ 'trials:readingUnit:baseDataCfg:title:organ': `器官`,
+ 'trials:readingUnit:baseDataCfg:title:organEn': `器官(英文)`,
+ 'trials:readingUnit:baseDataCfg:title:TULAT': `位置`,
+ 'trials:readingUnit:baseDataCfg:title:TULATEn': `位置(英文)`,
+ 'trials:readingUnit:baseDataCfg:title:isLymphNodes': `是否淋巴结`,
+ 'trials:readingUnit:baseDataCfg:title:isCanEditPosition': `是否可以编辑`,
+ 'trials:readingUnit:baseDataCfg:title:showOrder': `序号`,
+ 'trials:readingUnit:baseDataCfg:title:remark': `备注`,
+ 'trials:readingUnit:baseDataCfg:title:isEnable': `是否显示`,
+ 'trials:readingUnit:baseDataCfg:title:dict': `标准字典`,
+ 'trials:readingUnit:baseDataCfg:title:dictTbl': `字典表名`,
+ 'trials:readingUnit:baseDataCfg:title:dictDesc': `描述`,
+ 'trials:readingUnit:baseDataCfg:title:dictChildCount': `子项数量`,
+ 'trials:readingUnit:baseDataCfg:title:dictOrder': `排序`,
+ 'trials:readingUnit:baseDataCfg:title:dictView': `查看`,
+ 'trials:readingUnit:baseDataCfg:title:dictValCN': `中文值`,
+ 'trials:readingUnit:baseDataCfg:title:dictValEN': `英文值`,
+ 'trials:readingUnit:baseDataCfg:title:dictValDesc': `描述`,
+ 'trials:readingUnit:baseDataCfg:title:dictVal': `标准字典值`,
+ 'trials:readingUnit:baseDataCfg:title:set': `设置`,
+ 'trials:readingUnit:baseDataCfg:button:sync': `同步`,
+ 'trials:readingUnit:baseDataCfg:button:set': `设置`,
+ 'trials:readingUnit:baseDataCfg:message:sync': `同步成功`,
+ 'trials:readingUnit:baseDataCfg:message:updateConfirm': `是否确认更改?`,
+ 'trials:readingUnit:baseDataCfg:message:deleteConfirm': `是否确认删除?`,
+ 'trials:readingUnit:baseDataCfg:message:deleteSuccessfully': `删除成功!`,
+ 'trials:readingUnit:GlobalReading': `全局阅片`,
+ 'trials:readingUnit:globalReading:title:globalAssessTypes': `评估更新类型`,
+ 'trials:readingUnit:globalReading:title:valueCN': `值`,
+ 'trials:readingUnit:globalReading:title:valueEN': `英文值`,
+ 'trials:readingUnit:globalReading:title:isBaseLineUse': `是否基线评估`,
+ 'trials:readingUnit:globalReading:title:isFollowVisitUse': `是否随访评估`,
+ 'trials:readingUnit:adRules': `仲裁规则`,
+ 'trials:adRules:title:arbitrationRule': `仲裁对象`,
+ 'trials:adRules:title:judgeTypeEnum': `产生裁判阅片的条件`,
+ 'trials:adRules:button:addRule': `添加规则`,
+ 'trials:adRules:title:order': `序号`,
+ 'trials:adRules:title:answerGroupA': `阅片人A`,
+ 'trials:adRules:title:answerGroupB': `阅片人B`,
+ 'trials:adRules:title:selectAnswerGroup': `当前选择答案分组:`,
+ 'trials:adRules:title:addGroup': `添加分组`,
+ 'trials:adRules:title:group': `分组:`,
+ 'trials:adRules:title:selectAnswer': `选择答案`,
+ 'trials:adRules:message:msg1': `删除该规则组?`,
+ 'trials:adRules:message:msg2': `请先选择答案A`,
+ 'trials:adRules:message:msg3': `请先选择答案B`,
+ 'trials:adRules:message:msg4': `成功新增答案规则`,
+ 'trials:adRules:message:msg5': `请先选择答案,再添加分组`,
+ 'trials:adRules:message:msg6': `确定重置当前设置的裁判任务生成规则吗?`,
+ 'trials:adRules:message:msg7': `重置成功`,
+ 'trials:adRules:message:msg8': `请先配置规则才能应用`,
+ 'trials:adRules:message:msg9': `应用成功`,
+ 'trials:readingUnit:oncologyReading': `肿瘤学阅片配置`,
+ 'trials:readingUnit:oncologyReading:title:oncologyAssessIdsStr': `评估结果`,
+ 'trials:readingUnit:oncologyReading:title:evaluationReason': `评估原因说明`,
+ 'trials:readingUnit:oncologyReading:title:valueCN': `中文值`,
+ 'trials:readingUnit:oncologyReading:title:valueEN': `英文值`,
+ 'trials:readingUnit:oncologyReading:title:oncologyReading': `肿瘤学阅片`,
+ 'trials:tab:emailManageCfg': `邮件管理`,
+ 'trials:emailManageCfg:title:code': `Code`,
+ 'trials:emailManageCfg:title:businessScenario': `业务场景`,
+ 'trials:emailManageCfg:title:fromName': `发件人`,
+ 'trials:emailManageCfg:title:fromEmail': `发件箱`,
+ 'trials:emailManageCfg:title:SMTPServerAddress': `SMTP服务器`,
+ 'trials:emailManageCfg:title:SMTPServerPort': `SMTP端口`,
+ 'trials:emailManageCfg:title:authorizationCode': `发件箱授权码`,
+ 'trials:emailManageCfg:title:toUserTypeList': `收件人`,
+ 'trials:emailManageCfg:title:copyUserTypeList': `抄送人`,
+ 'trials:emailManageCfg:title:fileName': `附件`,
+ 'trials:emailManageCfg:title:isReturnRequired': `是否需要回执`,
+ 'trials:emailManageCfg:title:isUrgent': `是否加急`,
+ 'trials:emailManageCfg:title:isAutoSend': `是否自动发送`,
+ 'trials:emailManageCfg:title:updateTime': `更新时间`,
+ 'trials:emailManageCfg:title:createTime': `创建时间`,
+ 'trials:emailManageCfg:button:select': `选择`,
+ 'trials:emailManageCfg:message:format': `(必须是word/excel格式)`,
+ 'trials:emailManageCfg:message:onlyOneFile': `最多只允许上传一个文件`,
+ 'trials:emailManageCfg:title:sendEmailCfg': `发件箱配置`,
+ 'trials:emailManageCfg:title:sendEmailAccount': `发件箱账号`,
+ 'trials:emailManageCfg:title:password': `密码/授权码`,
+ 'trials:emailManageCfg:title:emailTpl': `自动邮件模版`,
+ 'trials:emailManageCfg:title:commom': `通用`,
+ 'trials:emailManageCfg:title:criterions': `标准相关`,
+ 'trials:emailManageCfg:button:Default': `邮件模版`,
+ 'trials:emailManageCfg:table:EmailTopicCN': `邮件主题(CN)`,
+ 'trials:emailManageCfg:table:EmailTopic': `邮件主题(EN)`,
+ 'trials:emailManageCfg:table:BusinessScenarioEnum': `业务场景`,
+ 'trials:emailManageCfg:table:ToUserTypeList': `收件人`,
+ 'trials:emailManageCfg:table:CopyUserTypeList': `抄送人`,
+ 'trials:emailManageCfg:table:blackUserIdList': `黑名单`,
+ 'trials:emailManageCfg:table:EmailUrgentEnum': `加急状态`,
+ 'trials:emailManageCfg:table:EmailCron': `发送周期(天)`,
+ 'trials:emailManageCfg:table:IsAutoSend': `是否自动发送`,
+ 'trials:emailManageCfg:table:IsEnable': `是否启用`,
+ 'trials:emailManageCfg:table:CriterionTypeEnum': `阅片标准`,
+ 'trials:emailManageCfg:table:fileListCN': `附件(CN)`,
+ 'trials:emailManageCfg:table:fileListEN': `附件(EN)`,
+ 'trials:emailManageCfg:table:EmailHtmlContentCN': `邮件内容模版(CN)`,
+ 'trials:emailManageCfg:table:EmailHtmlContentEN': `邮件内容模版(EN)`,
+ 'trials:emailManageCfg:table:BusinessLevelEnum': `业务层级`,
+ 'trials:emailManageCfg:table:BusinessModuleEnum': `业务模块`,
+ 'trials:emailManageCfg:button:generate': `生成 cron`,
+ 'trials:emailManageCfg:message:msg1': `最多只能传一个附件`,
+ 'trials:emailManageCfg:message:msg2': `确定删除该配置?`,
+ 'trials:medicalFeedbackCfg:title:taskType': `任务类型`,
+ 'trials:medicalFeedbackCfg:title:criterion': `阅片标准`,
+ 'trials:medicalFeedbackCfg:title:isGeneral': `是否通用`,
+ 'trials:medicalFeedbackCfg:message:msg1': `请先配置医学审核问题再进行确认!`,
+ 'trials:medicalFeedbackCfg:message:msg2': `选项不允许存在相同值`,
+ 'trials:medicalFeedbackCfg:message:msg3': `暂无数据`,
+ 'trials:menuTitle:workbench': `工作台`,
+ 'trials:workbench:label:trialsStats': `项目`,
+ 'trials:workbench:label:attachmentsStats': `已签署文件`,
+ 'trials:workbench:label:pendingTasksStats': `待办任务`,
+ 'trials:workbench:label:messagesStats': `消息`,
+ 'trials:workbench:table:trialId': `项目编号`,
+ 'trials:workbench:table:experimentName': `试验名称`,
+ 'trials:workbench:table:researchNo': `研究方案号`,
+ 'trials:workbench:action:sign': `签署`,
+ 'trials:workbench:title:trialDocBeSigned': `待签署的项目文件`,
+ 'trials:trialDocBeSigned:table:fileCount': `待签署文件数量`,
+ 'trials:workbench:title:pendingSiteResearch': `中心调研`,
+ 'trials:pendingSiteResearch:table:siteCount': `待审批中心数量`,
+ 'trials:pendingSiteResearch:action:audit': `审核`,
+ 'trials:workbench:title:sysDocBeSigned': `待签署的系统文件`,
+ 'trials:sysDocBeSigned:table:fileType': `文件类型`,
+ 'trials:sysDocBeSigned:table:fileName': `文件名称`,
+ 'trials:sysDocBeSigned:table:uploadTime': `上传时间`,
+ 'trials:tab:notice': `通知消息`,
+ 'trials:notice:table:notificationType': `通知类型`,
+ 'trials:notice:table:notificationContent': `通知内容`,
+ 'trials:notice:table:notificationStatus': `通知状态`,
+ 'trials:notice:table:publisher': `发布人`,
+ 'trials:notice:table:releaseTime': `发布时间`,
+ 'trials:notice:table:endTime': `失效时间`,
+ 'trials:notice:table:appendix': `附件`,
+ 'trials:notice:table:isRead': `是否已读`,
+ 'trials:notice:action:detail': `详情`,
+ 'login:title:system': `研究单位阅片系统`,
+ 'login:form:userName': `用户名`,
+ 'login:form:password': `密码`,
+ 'login:button:login': `登录`,
+ 'login:button:forgetPassword': `忘记密码?`,
+ 'login:formRule:userName': `请输入用户名`,
+ 'login:formRule:password': `请输入密码`,
+ 'login:message:login1': `当前用户为首次登录,请先修改密码之后再次登录!`,
+ 'login:message:login2': `此账户暂未配置菜单权限,请联系管理员处理后再登录!`,
+ 'recompose:title:init': `初始化用户名和密码`,
+ 'recompose:form:userName': `用户名`,
+ 'recompose:form:oldPassword': `旧密码`,
+ 'recompose:form:newPassword': `新密码`,
+ 'recompose:form:confirmPassword': `确认密码`,
+ 'recompose:button:cancel': `取消`,
+ 'recompose:button:save': `保存`,
+ 'recompose:message:warning': `该页面只提供给首次进入系统的用户使用`,
+ 'recompose:message:passwordDiffer': `两次密码不一致`,
+ 'recompose:message:updatedSuccessfully': `修改成功,请重新登录账号`,
+ 'recompose:message:passwordValid': `密码由8-32个字符组成`,
+ 'recompose:form:email': `邮箱`,
+ 'recompose:form:role': `角色`,
+ 'passwordReset:title:reset': `重置密码`,
+ 'passwordReset:form:email': `邮箱`,
+ 'passwordReset:form:verificationCode': `获取验证码`,
+ 'passwordReset:form:userName': `用户名`,
+ 'passwordReset:form:userType': `用户类型`,
+ 'passwordReset:form:password': `新密码`,
+ 'passwordReset:form:confirmPassword': `确认密码`,
+ 'passwordReset:button:send': `发送`,
+ 'passwordReset:button:wait': `等待`,
+ 'passwordReset:button:verify': `校验`,
+ 'passwordReset:button:cancel': `取消`,
+ 'passwordReset:button:submit': `保存`,
+ 'passwordReset:formRule:email': `请输入邮箱`,
+ 'passwordReset:formRule:password': `请输入密码`,
+ 'passwordReset:formRule:confirmPassword': `请再次输入密码`,
+ 'passwordReset:formRule:passwordsDiffer': `两次密码不一致`,
+ 'passwordReset:formRule:passwordinvalid': `邮箱无效`,
+ 'passwordReset:message:updatedSuccessfully': `修改成功!`,
+ 'trials:trials-myinfo:title:avater': `个人头像`,
+ 'trials:trials-myinfo:title:basicInfo': `用户基本信息`,
+ 'trials:trials-myinfo:form:surname': `姓`,
+ 'trials:trials-myinfo:form:givenname': `名`,
+ 'trials:trials-myinfo:form:gender': `性别`,
+ 'trials:trials-myinfo:form:organization': `单位`,
+ 'trials:trials-myinfo:form:department': `部门`,
+ 'trials:trials-myinfo:form:position': `职位`,
+ 'trials:trials-myinfo:button:save': `保存`,
+ 'trials:trials-myinfo:title:accountInfo': `账号信息`,
+ 'trials:trials-myinfo:form:userName': `用户名`,
+ 'trials:trials-myinfo:form:phone': `电话`,
+ 'trials:trials-myinfo:form:email': `邮箱`,
+ 'trials:trials-myinfo:button:update': `修改`,
+ 'trials:trials-myinfo:button:getVCode': `获取验证码`,
+ 'trials:trials-myinfo:button:wait': `等待`,
+ 'trials:trials-myinfo:message:updateSuccessfully': `修改成功!`,
+ 'trials:trials-myinfo:message:sendSuccessfully': `发送成功`,
+ 'trials:trials-myinfo:message:modifyPWSuccessfully': `修改成功,请重新登录账号`,
+ 'trials:trials-myinfo:button:loginout': `退出`,
+ 'trials:trials-myinfo:title:updatePaasord': `修改密码`,
+ 'trials:tab:trials': `我的项目`,
+ 'trials:trials:title:back': `返回`,
+ 'trials:trials:title:backTrialList': `返回项目列表`,
+ 'trials:trials:title:eics': `研究单位阅片系统`,
+ 'trials:tab:reading': `阅片`,
+ 'trials:tab:pendingReadingTasks': `待阅`,
+ 'trials:pendingReadingTasks:table:subjectCode': `受试者编号`,
+ 'trials:pendingReadingTasks:table:remainingReadingVolume': `剩余阅片量`,
+ 'trials:pendingReadingTasks:table:suggestedCompletionTime': `建议完成时间`,
+ 'trials:pendingReadingTasks:table:remainingTaskVolume': `剩余阅片量`,
+ 'trials:pendingReadingTasks:table:amountOfJudgesRemaining': `剩余裁判量`,
+ 'trials:pendingReadingTasks:table:amountOfCompletedTasks': `已完成任务量`,
+ 'trials:pendingReadingTasks:table:numberOfJudgesCompleted': `已完成裁判量`,
+ 'trials:pendingReadingTasks:table:recipient': `当前领取人`,
+ 'trials:pendingReadingTasks:button:beginRandomReview': `开始随机阅片`,
+ 'trials:pendingReadingTasks:table:operate': `操作`,
+ 'trials:pendingReadingTasks:button:review': `阅片`,
+ 'trials:pendingReadingTasks:button:release': `释放`,
+ 'trials:pendingReadingTasks:message:released': `释放成功!`,
+ 'trials:pendingReadingTasks:button:ExistReadingApply': `当前受试者存在重阅申请还未处理完毕,不允许进行后续阅片`,
+ 'trials:reading:tabTitle:review': `阅片`,
+ 'trials:reading:tabTitle:report': `报告`,
+ 'trials:reading:dagTitle:msg1': `当前阅片任务存在临床数据,请查看。若已查看,请点击“确认”。`,
+ 'trials:reading:button:confirm': `确认`,
+ 'trials:reading:warnning:msg1': `已开始受试者xxx的阅片任务。`,
+ 'trials:reading:warnning:msg2': `xxx病灶信息未保存,是否要跳转到报告页面!`,
+ 'trials:reading:warnning:msg200': `病灶xxx的信息未保存或未完成,不能提交电子影像病例报告表!`,
+ 'trials:reading:warnning:msg201': `影像质量中有答案未保存,是否确定切换!`,
+ 'trials:reading:title:keySeries': `关键序列`,
+ 'trials:reading:button:download': `下载`,
+ 'trials:reading:button:pause': `暂停`,
+ 'trials:reading:button:marked': `有病灶标记`,
+ 'trials:reading:button:layout': `布局`,
+ 'trials:reading:button:wwwc': `调窗`,
+ 'trials:reading:button:wwwcDefault': `默认值`,
+ 'trials:reading:button:wwwcCustom': `自定义`,
+ 'trials:reading:button:wwwcRegion': `区域窗宽窗位`,
+ 'trials:reading:dagTitle:wwwcCustom': `自定义调窗`,
+ 'trials:reading:title:preset': `W/L 预设`,
+ 'trials:reading:button:reverseColor': `反色`,
+ 'trials:reading:button:zoom': `缩放`,
+ 'trials:reading:button:move': `移动`,
+ 'trials:reading:button:rotate': `旋转`,
+ 'trials:reading:button:rotateDefault': `默认值`,
+ 'trials:reading:button:rotateVertical': `垂直翻转`,
+ 'trials:reading:button:rotateHorizontal': `水平翻转`,
+ 'trials:reading:button:rotateTurnLeft': `左转`,
+ 'trials:reading:button:rotateTurnRight': `右转`,
+ 'trials:reading:button:fitWindow': `适应窗口`,
+ 'trials:reading:button:fitImage': `适应图像`,
+ 'trials:reading:button:imageIndexSync': `滚动同步`,
+ 'trials:reading:button:screenShot': `截屏`,
+ 'trials:reading:button:length': `直径测量`,
+ 'trials:reading:button:bidirectional': `长短径测量`,
+ 'trials:reading:button:arrowAnnotate': `箭头工具`,
+ 'trials:reading:button:rectangle': `矩形工具`,
+ 'trials:reading:button:reset': `重置`,
+ 'trials:reading:button:clinicalData': `临床数据`,
+ 'trials:reading:button:unsaved': `数据未保存!`,
+ 'trials:reading:button:incompleteInfor': `数据不完整`,
+ 'trials:reading:button:split': `分裂`,
+ 'trials:reading:button:customCfg': `个性化配置`,
+ 'trials:reading:tab:hotkeys': `热键`,
+ 'trials:reading:tab:wlTemplate': `W/l模板`,
+ 'trials:reading:tab:others': `其他`,
+ 'trials:reading:label:wlTplName': `名称`,
+ 'trials:reading:label:wlTplWW': `窗宽`,
+ 'trials:reading:label:wlTplWL': `窗位`,
+ 'trials:reading:wlTemplate:delete': `是否确认删除?`,
+ 'trials:reading:label:autoSwitch': `自动切换下一任务不必提醒`,
+ 'trials:reading:button:handbooks': `手册`,
+ 'trials:reading:warnning:unableEvaluate': `请确认是否本访视的所有病灶均无法评估?`,
+ 'trials:reading:warnning:msg3': `病灶xxx的信息未保存。如果执行分裂操作,xxx 的信息将被还原,是否继续?`,
+ 'trials:reading:warnning:msg4': `是否确认分裂?`,
+ 'trials:reading:warnning:msg5': `病灶xxx信息未保存,不允许继续添加。`,
+ 'trials:reading:warnning:msg6': `请使用长短径测量工具进行淋巴结靶病灶的标记。`,
+ 'trials:reading:warnning:msg7': `请使用直径测量工具进行非淋巴结靶病灶的标记。`,
+ 'trials:reading:warnning:msg8': `请使用长短径测量工具或矩形工具进行淋巴结非靶病灶的标记。`,
+ 'trials:reading:warnning:msg9': `请使用直径测量工具或矩形工具进行非淋巴结非靶病灶的标记。`,
+ 'trials:reading:warnning:msg10': `请使用长短径测量工具或箭头工具或矩形工具进行淋巴结靶病灶的标记。`,
+ 'trials:reading:warnning:msg11': `请使用直径测量工具或箭头工具进行非淋巴结靶病灶的标记。`,
+ 'trials:reading:warnning:msg12': `请使用长短径测量工具或箭头工具进行淋巴结新病灶的标记。`,
+ 'trials:reading:warnning:msg13': `请使用直径测量工具或箭头工具进行非淋巴结新病灶的标记。`,
+ 'trials:reading:warnning:msg14': `按照“***评估标准”的相关规则,靶病灶个数最多不能超过xxx个。`,
+ 'trials:reading:button:removeMark': `清除标记`,
+ 'trials:reading:warnning:msg15': `按照“***评估标准”的相关规则,当前病灶不允许设置为靶病灶!`,
+ 'trials:reading:warnning:msg17': `病灶xxx信息未保存,不允许执行此操作。`,
+ 'trials:reading:warnning:msg18': `当前病灶为靶病灶,不允许添加标记!`,
+ 'trials:reading:warnning:msg19': `病灶状态为“存在”的淋巴结靶病灶,短径应大于15mm,请使用长短径测量工具添加标记。`,
+ 'trials:reading:warnning:msg20': `病灶状态为“存在”的非淋巴结靶病灶,长径应大于10mm且不小于2倍层厚。请使用直径测量工具添加标记。`,
+ 'trials:reading:warnning:msg21': `病灶状态为“存在”的淋巴结非靶病灶,请使用长短径测量工具或矩形工具添加标记。`,
+ 'trials:reading:warnning:msg22': `病灶状态为“存在”的非淋巴结非靶病灶,请使用直径测量工具或矩形工具添加标记。`,
+ 'trials:reading:warnning:msg23': `病灶状态为“存在”的淋巴结靶病灶,请使用长短径测量工具添加标记。`,
+ 'trials:reading:warnning:msg24': `病灶状态为“存在”的非淋巴结靶病灶,请使用直径测量工具添加标记。`,
+ 'trials:reading:warnning:msg25': `病灶状态为“太小”的淋巴结靶病灶,请使用箭头工具添加标记。`,
+ 'trials:reading:warnning:msg26': `病灶状态为“太小”的非淋巴结靶病灶,请使用箭头工具添加标记。`,
+ 'trials:reading:warnning:msg27': `病灶状态为“无法评估”的淋巴结靶病灶,不需要添加标记。`,
+ 'trials:reading:warnning:msg28': `病灶状态为“无法评估”的非淋巴结靶病灶,不需要添加标记。`,
+ 'trials:reading:warnning:msg29': `病灶状态为“消失”的淋巴结靶病灶,短径应小于10mm,请使用长短径工具添加标记。`,
+ 'trials:reading:warnning:msg30': `病灶状态为“消失”的非淋巴结靶病灶,只能使用箭头工具添加标记。`,
+ 'trials:reading:warnning:msg31': `病灶状态为“存在”的淋巴结非靶病灶,请使用长短径测量工具或矩形工具添加标记。`,
+ 'trials:reading:warnning:msg32': `病灶状态为“存在”的非淋巴结非靶病灶,请使用直径测量工具或矩形工具添加标记。`,
+ 'trials:reading:warnning:msg33': `病灶状态为“显著增大”的淋巴结非靶病灶,请使用长短径测量工具或矩形工具添加标记。`,
+ 'trials:reading:warnning:msg34': `病灶状态为“显著增大”的非淋巴结非靶病灶,请使用直径测量工具或矩形工具添加标记。`,
+ 'trials:reading:warnning:msg35': `病灶状态为“无法评估”的淋巴结非靶病灶,不需要添加标记。`,
+ 'trials:reading:warnning:msg36': `病灶状态为“无法评估”的非淋巴结非靶病灶,不需要添加标记。`,
+ 'trials:reading:warnning:msg37': `病灶状态为“消失”的淋巴结非靶病灶,请使用箭头工具添加标记。`,
+ 'trials:reading:warnning:msg38': `病灶状态为“消失”的非淋巴结非靶病灶,请使用箭头工具添加标记。`,
+ 'trials:reading:warnning:msg39': `病灶状态为“明确”的淋巴结新病灶,请使用长短径测量工具或箭头工具添加标记。`,
+ 'trials:reading:warnning:msg40': `病灶状态为“明确”的非淋巴结新病灶,请使用直径测量工具或箭头工具添加标记。`,
+ 'trials:reading:warnning:msg41': `病灶状态为“疑似”的淋巴结新病灶,请使用长短径测量工具或箭头工具添加标记。`,
+ 'trials:reading:warnning:msg42': `病灶状态为“疑似”的非淋巴结新病灶,请使用直径测量工具或箭头工具添加标记。`,
+ 'trials:reading:warnning:msg43': `病灶状态为“无法评估”的淋巴结新病灶,不需要添加标记。`,
+ 'trials:reading:warnning:msg44': `病灶状态为“无法评估”的非淋巴结新病灶,不需要添加标记。`,
+ 'trials:reading:warnning:msg45': `病灶状态为“消失”的淋巴结新病灶,请使用箭头工具添加标记。`,
+ 'trials:reading:warnning:msg46': `病灶状态为“消失”的非淋巴结新病灶,请使用箭头工具添加标记。`,
+ 'trials:reading:warnning:msg47': `是否确认清除病灶标记?`,
+ 'trials:reading:warnning:msg48': `是否确认删除病灶?`,
+ 'trials:reading:title:lesionType': `病灶类型`,
+ 'trials:reading:warnning:msg49': `当前病灶为新建病灶,尚未保存。如果关闭窗口,将会删除病灶信息。是否继续?`,
+ 'trials:reading:warnning:msg50': `当前病灶信息有更新,未保存,是否继续?`,
+ 'trials:reading:warnning:msg51': `请使用直径测量工具或长短径测量工具或箭头工具进行新病灶的标记。`,
+ 'trials:reading:warnning:msg52': `请使用长短径测量工具或矩形工具或箭头工具进行淋巴结非靶病灶的标记。`,
+ 'trials:reading:warnning:msg53': `请使用直径测量工具或矩形工具或箭头工具进行非淋巴结非靶病灶的标记。`,
+ 'trials:reading:warnning:msg54': `基线病灶不能使用箭头工具标记。`,
+ 'trials:reading:warnning:msg55': `全局阅片调整为:`,
+ 'trials:reading:warnning:msg56': `该影像不具备测量长度所需的必要数据,不能进行长度测量。请选择其他工具进行标注。
+`,
+ 'trials:reading:warnning:msg57': `“xxx”快捷键信息不能为空!`,
+ 'trials:readingPGWC:warnning:msg1': ` 病灶数量范围为1~99`,
+ 'trials:readingPGWC:warnning:msg2': `病灶状态为“存在”的新病灶,请使用箭头工具添加标记
+`,
+ 'trials:readingPGWC:warnning:msg3': `病灶状态为“存在”的既往新病灶,请使用箭头工具添加标记
+`,
+ 'trials:readingPGWC:warnning:msg4': `病灶状态为“良性”的既往新病灶,请使用箭头工具添加标记
+`,
+ 'trials:readingPGWC:warnning:msg5': `病灶状态为“消失”的既往新病灶,请使用箭头工具添加标记
+`,
+ 'trials:readingPGWC:warnning:msg6': `病灶状态为“不可评估”的既往新病灶,不需要添加标记`,
+ 'trials:readingBM:warnning:msg01': `请使用直径测量工具进行靶病灶的标记。`,
+ 'trials:readingBM:warnning:msg02': `请使用直径测量工具或矩形测量工具进行非靶病灶的标记。`,
+ 'trials:readingBM:warnning:msg03': `请使用直径测量工具或箭头工具进行靶病灶的标记。`,
+ 'trials:readingBM:warnning:msg04': `请使用直径测量工具或矩形测量工具或箭头工具进行非靶病灶的标记。`,
+ 'trials:readingBM:warnning:msg05': `请使用直径测量工具或箭头工具进行新病灶的标记。`,
+ 'trials:readingBM:warnning:msg06': `病灶状态为“存在”的靶病灶,长径应大于10mm且不小于2倍层厚。请使用直径测量工具添加标记。`,
+ 'trials:readingBM:warnning:msg07': `病灶状态为“存在”的非靶病灶,请使用直径测量工具或矩形工具添加标记。`,
+ 'trials:readingBM:warnning:msg08': `病灶状态为“存在”的靶病灶,请使用直径测量工具添加标记。`,
+ 'trials:readingBM:warnning:msg09': `病灶状态为“太小”的靶病灶,请使用箭头工具添加标记。`,
+ 'trials:readingBM:warnning:msg10': `病灶状态为“无法评估”的靶病灶,不需要添加标记。`,
+ 'trials:readingBM:warnning:msg11': `病灶状态为“消失”的靶病灶,请使用箭头工具添加标记。`,
+ 'trials:readingBM:warnning:msg12': `病灶状态为“存在”的非靶病灶,请使用直径测量工具或矩形工具添加标记。`,
+ 'trials:readingBM:warnning:msg13': `病灶状态为“显著增大”的非靶病灶,请使用直径测量工具或矩形工具添加标记。`,
+ 'trials:readingBM:warnning:msg14': `病灶状态为“无法评估”的非靶病灶,不需要添加标记。`,
+ 'trials:readingBM:warnning:msg15': `病灶状态为“消失”的非靶病灶,请使用箭头工具添加标记。`,
+ 'trials:readingBM:warnning:msg16': `病灶状态为“明确”的新病灶,请使用直径测量工具或箭头工具添加标记。`,
+ 'trials:readingBM:warnning:msg17': `病灶状态为“疑似”的新病灶,请使用直径测量工具或箭头工具添加标记。`,
+ 'trials:readingBM:warnning:msg18': `病灶状态为“无法评估”的新病灶,不需要添加标记。`,
+ 'trials:readingBM:warnning:msg19': `病灶状态为“消失”的新病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg1': `病灶状态为“存在”的淋巴结新靶病灶,请使用长短径测量工具添加标记。`,
+ 'trials:iRecist:warnning:msg2': `病灶状态为“存在”的非淋巴结新靶病灶,请使用直径测量工具添加标记。`,
+ 'trials:iRecist:warnning:msg3': `病灶状态为“消失”的淋巴结新靶病灶,短径应小于10mm,请使用长短径工具添加标记。`,
+ 'trials:iRecist:warnning:msg4': `病灶状态为“消失”的非淋巴结新靶病灶,只能使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg5': `病灶状态为“无法评估”的淋巴结新靶病灶,不需要添加标记。`,
+ 'trials:iRecist:warnning:msg6': `病灶状态为“无法评估”的非淋巴结新靶病灶,不需要添加标记。`,
+ 'trials:iRecist:warnning:msg7': `病灶状态为“存在”的淋巴结新非靶病灶,请使用长短径测量工具或矩形工具添加标记。`,
+ 'trials:iRecist:warnning:msg8': `病灶状态为“存在”的非淋巴结新非靶病灶,请使用直径测量工具或矩形工具添加标记。`,
+ 'trials:iRecist:warnning:msg9': `病灶状态为“增大”的淋巴结新非靶病灶,请使用长短径测量工具或矩形工具添加标记。`,
+ 'trials:iRecist:warnning:msg10': `病灶状态为“增大”的非淋巴结新非靶病灶,请使用直径测量工具或矩形工具添加标记。`,
+ 'trials:iRecist:warnning:msg11': `病灶状态为“无法评估”的淋巴结新非靶病灶,不需要添加标记。`,
+ 'trials:iRecist:warnning:msg12': `病灶状态为“无法评估”的非淋巴结新非靶病灶,不需要添加标记。`,
+ 'trials:iRecist:warnning:msg13': `病灶状态为“消失”的淋巴结新非靶病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg14': `病灶状态为“消失”的非淋巴结新非靶病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg15': `病灶状态为“明确”的其他既往淋巴结新病灶,请使用长短径测量工具或箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg16': `病灶状态为“明确”的其他既往非淋巴结新病灶,请使用直径测量工具或箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg17': `病灶状态为“疑似”的其他既往淋巴结新病灶,请使用长短径测量工具或箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg18': `病灶状态为“疑似”的其他既往非淋巴结新病灶,请使用直径测量工具或箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg19': `病灶状态为“无法评估”的其他既往淋巴结新病灶,不需要添加标记。`,
+ 'trials:iRecist:warnning:msg20': `病灶状态为“无法评估”的其他既往非淋巴结新病灶,不需要添加标记。`,
+ 'trials:iRecist:warnning:msg21': `病灶状态为“消失”的其他既往淋巴结新病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg22': `病灶状态为“消失”的其他既往非淋巴结新病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg23': `病灶状态为“明确”的触发iRecist后的淋巴结新病灶,请使用长短径测量工具或箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg24': `病灶状态为“明确”的触发iRecist后的非淋巴结新病灶,请使用直径测量工具或箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg25': `病灶状态为“疑似”的触发iRecist后的淋巴结新病灶,请使用长短径测量工具或箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg26': `病灶状态为“疑似”的触发iRecist后的非淋巴结新病灶,请使用直径测量工具或箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg27': `病灶状态为“消失”的触发iRecist后的淋巴结新病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg28': `病灶状态为“消失”的触发iRecist后的非淋巴结新病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg29': `病灶状态为“无法评估”的发iRecist后的淋巴结新病灶,不需要添加标记。`,
+ 'trials:iRecist:warnning:msg30': `病灶状态为“无法评估”的发iRecist后的非淋巴结新病灶,不需要添加标记。`,
+ 'trials:iRecist:warnning:msg31': `病灶状态为“存在”的淋巴结新靶病灶,短径应大于15mm,请使用长短径测量工具添加标记。`,
+ 'trials:iRecist:warnning:msg32': `病灶状态为“存在”的非淋巴结新靶病灶,长径应大于10mm且不小于2倍层厚。请使用直径测量工具添加标记。`,
+ 'trials:iRecist:warnning:msg33': `病灶状态为“太小”的淋巴结新靶病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg34': `病灶状态为“太小”的非淋巴结新靶病灶,请使用箭头工具添加标记。`,
+ 'trials:iRecist:warnning:msg35': `请使用长短径测量工具或箭头工具进行淋巴结新靶病灶的标记。`,
+ 'trials:iRecist:warnning:msg36': `请使用直径测量工具或箭头工具进行非淋巴结新靶病灶的标记。`,
+ 'trials:iRecist:warnning:msg37': `请使用长短径测量工具或矩形工具或箭头工具进行淋巴结新非靶病灶的标记。`,
+ 'trials:iRecist:warnning:msg38': `请使用直径测量工具或矩形工具或箭头工具进行非淋巴结新非靶病灶的标记。`,
+ 'trials:iRecist:warnning:msg39': `请使用长短径测量工具或箭头工具进行其它既往淋巴结新病灶的标记。`,
+ 'trials:iRecist:warnning:msg40': `请使用直径测量工具或箭头工具进行其它既往非淋巴结新病灶的标记。`,
+ 'trials:iRecist:warnning:msg41': `请使用长短径测量工具或箭头工具进行触发iRECIST后淋巴结新病灶的标记。`,
+ 'trials:iRecist:warnning:msg42': `请使用直径测量工具或箭头工具进行触发iRECIST后非淋巴结新病灶的标记。`,
+ 'trials:iRecist:warnning:msg44': `提示`,
+ 'trials:iRecist:warnning:msg45': `您确定当前访视的整体评估结果为PD。根据“***评估标准”,该访视进入iRECIST阅片环节。请对新病灶进行重新评估:`,
+ 'trials:iRecist:warnning:msg46': `(1)新病灶可转为:新靶病灶、新非靶病灶、其它既往新病灶。`,
+ 'trials:iRecist:warnning:msg47': `(2)新靶病灶:状态为明确的新病灶才能转换为新靶病灶。新靶病灶的选择规则与RECIST1.1相同;如果当前病灶已有标记,但不符合新靶病灶的要求,请清除标记,重新标注。`,
+ 'trials:iRecist:warnning:msg48': `(3)新非靶病灶:状态为明确的新病灶才能转换为新非靶病灶。新靶病灶的选择规则与RECIST1.1相同。`,
+ 'trials:iRecist:warnning:msg49': `(4)其它既往新病灶:系统会自动将状态为疑似、消失的新病灶,转换为其它既往新病灶,无需修改。`,
+ 'trials:globalReview:title:subject': `受试者:`,
+ 'trials:globalReview:title:result': `全局阅片`,
+ 'trials:globalReview:title:clinicalData': `临床数据`,
+ 'trials:globalReview:button:submit': `提交`,
+ 'trials:globalReview:table:visitName': `访视名称`,
+ 'trials:globalReview:table:evaluationRes': `评估结果`,
+ 'trials:globalReview:table:isAgreeEvaluationRes': `是否同意访视整体评估`,
+ 'trials:globalReview:table:adjustedRes': `调整后结果`,
+ 'trials:globalReview:table:view': `查看详情`,
+ 'trials:globalReview:dagTitle:adjust': `调整`,
+ 'trials:globalReview:title:previousRes': `既往全局阅片结果`,
+ 'trials:globalReview:table:globalReading': `全局阅片`,
+ 'trials:globalReview:table:visitRemark': `访视阅片备注`,
+ 'trials:globalReview:table:globalRemark': `备注`,
+ 'trials:globalReview:table:updateType': `评估更新类型`,
+ 'trials:globalReview:message:msg1': `全局阅片未完成,存在评估结果未确认的访视任务。`,
+ 'trials:globalReview:message:msg2': `当前阅片任务已完成,是否进入下一个阅片任务?`,
+ 'trials:hotkeys:title:hotkey': `热键`,
+ 'trials:hotkeys:message:input': `请输入按键`,
+ 'trials:hotkeys:message:confirmReset': `是否确认重置?`,
+ 'trials:hotkeys:message:resetSuccessfully': `重置成功!`,
+ 'trials:hotkeys:message:tip': `提示`,
+ 'trials:hotkeys:message:tip1': `此快捷键已被xxx绑定`,
+ 'trials:reading:pcwg:msg1': `新病灶已到达最大数,无法添加`,
+ 'trials:reading:pcwg:msg2': `基线病灶需使用矩形工具或箭头工具`,
+ 'trials:reading:pcwg:msg3': `xxx个数最多不能超过yyy个`,
+ 'trials:reading:pcwg:msg4': `基线病灶需使用矩形工具或箭头工具`,
+ 'trials:reading:pcwg:msg5': `请使用箭头工具`,
+ 'trials:reading:pcwg:msg6': `基线病灶初始数量为`,
+ 'trials:reading:pcwg:msg7': `请标记病灶`,
+ 'trials:reading:pcwg:msg8': `当前病灶信息有更新,未保存,是否继续?`,
+ 'trials:adReview:title:subject': `受试者:`,
+ 'trials:adReview:title:result': `评估结果`,
+ 'trials:adReview:title:clinicalData': `临床数据`,
+ 'trials:adReview:table:visitName': `访视名称`,
+ 'trials:adReview:table:view': `查看详情`,
+ 'trials:adReview:table:viewR1': `第一阅片人(R1)`,
+ 'trials:adReview:table:viewR2': `第二阅片人(R2)`,
+ 'trials:adReview:title:adResult': `裁判结果`,
+ 'trials:adReview:title:choseReader': `选择更认同的整体评估`,
+ 'trials:adReview:title:adReason': `选择原因`,
+ 'trials:adReview:title:screenShot': `截图说明`,
+ 'trials:adReview:title:adReview': `裁判阅片`,
+ 'trials:adReview:title:msg1': `本人已完整查看两位独立阅片人的全部相关影像和评估数据,经过综合研判,更认同第一阅片人(R1)对该病例的整体评估,原因是:`,
+ 'trials:adReview:title:msg3': `本人已完整查看两位独立阅片人的全部相关影像和评估数据,经过综合研判,更认同第二阅片人(R2)对该病例的整体评估,原因是:`,
+ 'trials:adReview:title:loading': `加载中`,
+ 'trials:adReview:title:previousRes': `既往裁判阅片结果`,
+ 'trials:adReview:table:adReading': `裁判阅片`,
+ 'trials:adReview:table:adResult': `裁判结果`,
+ 'trials:adReview:table:view': `查看详情`,
+ 'trials:adReview:table:visitInfoview': `访视详情`,
+ 'trials:adReview:table:glInfo': `全局详情`,
+ 'trials:adReview:title:msg2': `当前阅片任务已完成,是否进入下一个阅片任务?`,
+ 'trials:adReview:title:msg4': `必须是xxx格式。`,
+ 'trials:readingReport:title:eicrf': `电子影像病例报告表`,
+ 'trials:readingReport:title:expandDetails': `展开详情`,
+ 'trials:readingReport:title:collapseDetails': `折叠详情`,
+ 'trials:readingReport:button:refresh': `刷新`,
+ 'trials:readingReport:button:jump': `(影像点击跳转)`,
+ 'trials:readingReport:title:sysEvaluationRes': `系统评估结果为:`,
+ 'trials:readingReport:message:msg1': `,与当前调整的结果不一致,请填写调整原因`,
+ 'trials:readingReport:title:unknow': `未知`,
+ 'trials:readingReport:message:msg2': `请将疗效评估信息填写完整。`,
+ 'trials:readingReport:message:msg3': `请填写整体评估调整原因。`,
+ 'trials:readingReport:message:msg4': `当前阅片任务已完成,是否进入下一个阅片任务?`,
+ 'trials:readingReport:message:msg5': `阅片页面影像质量评估未保存,是否需要继续提交?`,
+ 'trials:readingReport:message:msg6': `按照“***评估标准”的相关规则,系统建议整体肿瘤评估为
+
+`,
+ 'trials:readingReport:message:msg7': `,但您已修改为
+
+`,
+ 'trials:readingReport:message:msg8': `,请在备注中说明修改原因。`,
+ 'trials:oncologyReview:title:oncologyReview': `肿瘤学阅片`,
+ 'trials:oncologyReview:title:subject': `受试者:`,
+ 'trials:oncologyReview:title:result': `评估结果`,
+ 'trials:oncologyReview:button:clinicalData': `临床数据`,
+ 'trials:oncologyReview:title:visitName': `访视名称`,
+ 'trials:oncologyReview:title:readingRes': `影像学阅片结果`,
+ 'trials:oncologyReview:title:isGlobalUpdate': `全局是否有更新`,
+ 'trials:oncologyReview:title:view': `查看详情`,
+ 'trials:oncologyReview:title:visitRemark': `访视点注释`,
+ 'trials:oncologyReview:title:oReviewRes': `肿瘤学阅片结果`,
+ 'trials:oncologyReview:title:findings': `结论`,
+ 'trials:oncologyReview:title:reason': `原因`,
+ 'trials:oncologyReview:message:msg1': `保存失败,肿瘤学阅片结论不能为空。`,
+ 'trials:oncologyReview:title:previousRes': `既往肿瘤学阅片结果`,
+ 'trials:oncologyReview:title:msg2': `当前阅片任务已完成,是否进入下一个阅片任务?`,
+ 'trials:clinicaldara:title:currentTask': `当前任务`,
+ 'trials:clinicaldara:title:nodata': `暂无数据`,
+ 'trials:clinicaldara:title:relatedTask': `关联任务`,
+ 'trials:tab:title:readTask': `已阅`,
+ 'trials:readTask:table:isUrgent': `是否加急`,
+ 'trials:readTask:table:siteCode': `中心编号`,
+ 'trials:readTask:table:taskCode': `任务编号`,
+ 'trials:readTask:table:subjectCode': `受试者编号`,
+ 'trials:readTask:table:blindName': `盲态任务标识`,
+ 'trials:readTask:table:TaskName': `任务名称`,
+ 'trials:readTask:table:criterionName': `阅片标准`,
+ 'trials:readTask:table:taskState': `任务状态`,
+ 'trials:readTask:table:readingCategory': `任务类型`,
+ 'trials:readTask:table:allocateTime': `分配时间`,
+ 'trials:readTask:table:signTime': `签名时间`,
+ 'trials:readTask:table:reReadingApplyState': `申请状态`,
+ 'trials:readTask:table:readingTaskState': `阅片状态`,
+ 'trials:readTask:table:optType': `生效后影响`,
+ 'trials:readTask:table:reader': `独立阅片人`,
+ 'trials:readTask:button:view': `查看`,
+ 'trials:readTask:button:apply': `申请重阅`,
+ 'trials:readTask:button:backward': `退回重阅历史`,
+ 'trials:readTask:dagTitle:apply': `申请重阅`,
+ 'trials:readTask:title:applyReason': `申请原因`,
+ 'trials:readTask:option:errorRecords': `阅片记录错误`,
+ 'trials:readTask:option:other': `其他`,
+ 'trials:readTask:title:remark': `备注`,
+ 'trials:readTask:title:copyForm': `是否复制访视阅片表单`,
+ 'trials:readTask:title:influenceList': `影响的任务列表`,
+ 'trials:readTask:message:msg1': `提交重阅申请成功,请知悉。`,
+ 'trials:readTask:button:reread': `重阅`,
+ 'trials:readTask:message:msg2': `是否确认重阅?`,
+ 'trials:readTask:message:msg3': `重阅执行成功!`,
+ 'trials:tab:title:medicalFeedback': `医学反馈`,
+ 'trials:medicalFeedback:table:isUrgent': `是否加急`,
+ 'trials:medicalFeedback:table:subjectCode': `受试者编号`,
+ 'trials:medicalFeedback:table:siteCode': `中心编号`,
+ 'trials:medicalFeedback:table:taskName': `任务名称`,
+ 'trials:medicalFeedback:table:taskBlindName': `盲态任务标识`,
+ 'trials:medicalFeedback:table:taskName': `任务名称`,
+ 'trials:medicalFeedback:table:armEnum': `阅片角色`,
+ 'trials:medicalFeedback:table:reader': `独立阅片人`,
+ 'trials:medicalFeedback:table:criterionName': `阅片标准`,
+ 'trials:medicalFeedback:table:readingCategory': `任务类型`,
+ 'trials:medicalFeedback:table:taskState': `阅片任务状态`,
+ 'trials:medicalFeedback:table:auditState': `审核状态`,
+ 'trials:medicalFeedback:table:signTime': `阅片签名时间`,
+ 'trials:medicalFeedback:table:allocateTime': `审核分配时间`,
+ 'trials:medicalFeedback:table:firstReplyTime': `首次质询时间`,
+ 'trials:medicalFeedback:table:lastReplyTime': `最近回复时间`,
+ 'trials:medicalFeedback:table:isInvalid': `任务状态`,
+ 'trials:medicalFeedback:table:auditSignTime': `审核签名时间`,
+ 'trials:medicalFeedback:table:auditAdvice': `医学审核建议`,
+ 'trials:medicalFeedback:table:doctorUserIdea': `阅片人是否认同`,
+ 'trials:medicalFeedback:table:view': `查看`,
+ 'trials:medicalFeedback:table:reply': `回复`,
+ 'trials:medicalFeedback:title:mfDetail': `医学审核详情`,
+ 'trials:medicalFeedback:title:qaRecord': `质询记录`,
+ 'trials:medicalFeedback:table:visitPointCount': `访视点计数`,
+ 'trials:medicalFeedback:table:unKnow': `未知`,
+ 'trials:medicalFeedback:table:agreeToVisitPointCount': `是否同意访视点计数`,
+ 'trials:medicalFeedback:table:assessmentResults': `评估结果`,
+ 'trials:medicalFeedback:message:msg1': `您好,根据医学审核反馈,该阅片任务的评估有如下问题需要您确认或澄清:`,
+ 'trials:medicalFeedback:message:msg2': `本次医学审核相关截图(如适用)如下:`,
+ 'trials:medicalFeedback:message:msg3': `根据本项目“***评估标准”的相关约定,该类问题医学审核建议为:`,
+ 'trials:medicalFeedback:message:msg4': `为高效解决/处理以上全部医学反馈问题,麻烦您在对该阅片任务的评估准确复核后,明确是否认可医学反馈问题及结论。如不认可医学反馈,请逐条准确完整回复不认可的原因,非常感谢。`,
+ 'trials:medicalFeedback:title:isEndorse': `是否认可医学反馈:`,
+ 'trials:medicalFeedback:title:isRequestReread': `是否申请重阅:`,
+ 'trials:medicalFeedback:message:msg5': `本次医学审核相关截图(如适用)如下:`,
+ 'trials:medicalFeedback:message:loading': `加载中`,
+ 'trials:medicalFeedback:title:feedback': `反馈`,
+ 'trials:medicalFeedback:form:isEndorse': `是否认可医学反馈`,
+ 'trials:medicalFeedback:form:isRequestReread': `是否申请重阅`,
+ 'trials:medicalFeedback:form:applyReason': `申请原因`,
+ 'trials:medicalFeedback:form:errorRecords': `阅片记录错误`,
+ 'trials:medicalFeedback:form:other': `其他`,
+ 'trials:medicalFeedback:form:remark': `备注`,
+ 'trials:medicalFeedback:form:isCopyForm': `是否复制访视阅片表单`,
+ 'trials:medicalFeedback:form:isCopyForm2': `是否复制后续访视表单`,
+ 'trials:medicalFeedback:form:screenShot': `相关截图`,
+ 'trials:medicalFeedback:button:send': `发送`,
+ 'trials:medicalFeedback:message:format': `必须是xxx格式。`,
+ 'trials:medicalFeedback:title:result': `评估结果`,
+ 'trials:medicalFeedback:button:audit': `审核`,
+ 'trials:medicalFeedback:title:conclusion': `结论`,
+ 'trials:medicalFeedback:title:reason': `原因:`,
+ 'trials:medicalFeedback:title:isGlobalChange': `有无更新`,
+ 'trials:medicalFeedback:title:currentReaderType': `当前阅片角色`,
+ 'trials:medicalFeedback:title:currentReader': `当前阅片人`,
+ 'trials:medicalFeedback:title:otherReader': `关联阅片人`,
+ 'trials:medicalFeedback:title:auditQuestions': `审核问题`,
+ 'trials:medicalFeedback:title:conclusions': `结论`,
+ 'trials:medicalFeedback:button:saveAndSend': `保存并发送`,
+ 'trials:medicalFeedback:button:viewQuestions': `查看质询`,
+ 'trials:medicalFeedback:button:reply': `回复`,
+ 'trials:medicalFeedback:button:close': `关闭`,
+ 'trials:medicalFeedback:button:isQuestions': `是否有问题`,
+ 'trials:medicalFeedback:title:qcQuestions': `质询问题`,
+ 'trials:medicalFeedback:title:auditAdviceEnum': `审核建议`,
+ 'trials:medicalFeedback:title:closeQc': `关闭质疑`,
+ 'trials:medicalFeedback:button:auditCompleted': `审核完成`,
+ 'trials:medicalFeedback:button:nextTask': `下一任务`,
+ 'trials:medicalFeedback:message:closeQC': `医学审核未完成,请先关闭医学质询。`,
+ 'trials:medicalFeedback:form:influenceList': `重阅影响任务列表`,
+ 'trials:medicalFeedback:message:confirmTemplate': `请先确认医学审核问题模板配置!`,
+ 'trials:medicalFeedback:label:closeReasonEnum': `关闭原因`,
+ 'trials:medicalFeedback:title:closeReasonEnum': `关闭原因:`,
+ 'trials:medicalFeedback:label:closereasonRemarks': `备注`,
+ 'trials:medicalFeedback:title:closereasonRemarks': `备注:`,
+ 'trials:medicalFeedback:title:relatedGlobalTask': `关联全局任务`,
+ 'trials:medicalFeedback:title:relatedadjudicationTask': `关联裁判任务`,
+ 'trials:medicalFeedback:message:goNextTask01': `当前医学审核任务已完成,是否进入下一个医学审核任务?`,
+ 'trials:medicalFeedback:message:goNextTask02': `是否确认进入下一个医学审核任务?`,
+ 'trials:medicalFeedback:message:goNextTask03': `当前医学审核任务未完成,是否确认进入下一个医学审核任务?`,
+ 'trials:tab:title:rereadTask': `退回历史`,
+ 'trials:rereadTask:table:isUrgent': `是否加急`,
+ 'trials:rereadTask:table:taskCode': `任务编号`,
+ 'trials:rereadTask:table:siteCode': `中心编号`,
+ 'trials:rereadTask:table:subjectCode': `受试者编号`,
+ 'trials:rereadTask:table:taskBlindName': `盲态任务标识`,
+ 'trials:rereadTask:table:taskName': `任务名称`,
+ 'trials:rereadTask:table:criterionName': `阅片标准`,
+ 'trials:rereadTask:table:taskState': `任务状态`,
+ 'trials:rereadTask:table:readingCategory': `任务类型`,
+ 'trials:rereadTask:table:signTime': `完成阅片时间`,
+ 'trials:rereadTask:table:requestReReadingType': `申请类型`,
+ 'trials:rereadTask:table:requestReReadingTime': `申请时间`,
+ 'trials:rereadTask:table:requestReReadingReason': `申请原因`,
+ 'trials:rereadTask:table:requestReReadingResultEnum': `审批结果`,
+ 'trials:rereadTask:table:reReadingNewTaskCode': `新任务编号`,
+ 'trials:tab:reviewAssign': `阅片任务分配`,
+ 'trials:reviewAssign:searchForm:reader': `阅片人`,
+ 'trials:reviewAssign:button:assignRules': `分配规则`,
+ 'trials:reviewAssign:button:manualAllocation': `手动分配`,
+ 'trials:reviewAssign:button:visitReadingTasks': `访视/全局/肿瘤学阅片任务`,
+ 'trials:reviewAssign:button:adReadingTasks': `裁判阅片任务`,
+ 'trials:reviewAssign:table:siteCode': `中心编号`,
+ 'trials:reviewAssign:table:subjectCode': `受试者编号`,
+ 'trials:reviewAssign:table:visit': `访视`,
+ 'trials:reviewAssign:table:global': `全局`,
+ 'trials:reviewAssign:table:ad': `裁判`,
+ 'trials:reviewAssign:table:oncology': `肿瘤学阅片`,
+ 'trials:reviewAssign:table:r1': `阅片人1(R1)`,
+ 'trials:reviewAssign:table:r2': `阅片人1(R2)`,
+ 'trials:reviewAssign:table:ad': `裁判(AD)`,
+ 'trials:reviewAssign:table:o1': `肿瘤阅片人(O1)`,
+ 'trials:reviewAssign:tableAction:manualAssignment': `手动分配`,
+ 'trials:reviewAssign:tableAction:clearReaders': `清除阅片人`,
+ 'trials:reviewAssign:tableAction:viewHistory': `查看取消历史`,
+ 'trials:trials-panel:taskAllocation': `访视任务分配`,
+ 'trials:trials-panel:reading': `阅片`,
+ 'trials:trials-panel:refereeAllocation': `裁判任务分配`,
+ 'trials:reviewAssign:dialog:allocationRules': `分配规则`,
+ 'trials:reviewAssign:allocationRules:title:readersList': `阅片人列表`,
+ 'trials:reviewAssign:allocationRules:table:reader': `阅片人`,
+ 'trials:reviewAssign:allocationRules:table:plannedCount': `计划受试者数量`,
+ 'trials:reviewAssign:allocationRules:table:readingType': `阅片类型`,
+ 'trials:reviewAssign:allocationRules:table:status': `状态`,
+ 'trials:reviewAssign:allocationRules:table:remark': `备注`,
+ 'trials:reviewAssign:allocationRules:title:subsequentAllocationRules': `后续分配规则`,
+ 'trials:reviewAssign:allocationRules:message1': `同一病例随访阅片任务自动分配(在拟分配的阅片人未标记为退出项目状态时)默认状态`,
+ 'trials:reviewAssign:allocationRules:message2': `同一病例随访阅片任务自动分配(在拟分配的阅片人未标记为退出项目状态时)默认状态`,
+ 'trials:reviewAssign:allocationRules:message3': `同一病例全局任务自动分配(在拟分配的阅片人未标记为退出项目状态时 默认状态)`,
+ 'trials:reviewAssign:allocationRules:message4': `同一病例第二次裁判任务自动分配(在拟分配的阅片人未标记为退出项目状态时)默认状态`,
+ 'trials:reviewAssign:allocationRules:edit': `编辑`,
+ 'trials:reviewAssign:allocationRules:add': `新增`,
+ 'trials:reviewAssign:dialog:assignReader': `分配阅片人`,
+ 'trials:reviewAssign:assignReader:title:readingModel': `当前项目阅片模式为:`,
+ 'trials:reviewAssign:assignReader:title:r1': `阅片人1(R1):`,
+ 'trials:reviewAssign:assignReader:title:r2': `阅片人2(R2):`,
+ 'trials:reviewAssign:assignReader:title:ad': `裁判(AD):`,
+ 'trials:reviewAssign:assignReader:title:o1': `肿瘤阅片人(O1):`,
+ 'trials:reviewAssign:assignReader:table:reader': `阅片人`,
+ 'trials:reviewAssign:assignReader:table:plannedSubjectCount': `计划受试者数量`,
+ 'trials:reviewAssign:assignReader:table:assignedSubjectCount': `已分配受试者数量`,
+ 'trials:reviewAssign:assignReader:table:readingType': `阅片类型`,
+ 'trials:reviewAssign:assignReader:table:pengdingTaskCount': `待处理任务量(全平台)`,
+ 'trials:reviewAssign:assignReader:table:pengdingTrialsTaskCount': `待处理任务量(项目)`,
+ 'trials:reviewAssign:assignReader:table:averageReadingTime': `访视平均阅片时间(去除离群值后的)`,
+ 'trials:reviewAssign:assignReader:table:status': `状态`,
+ 'trials:reviewAssign:assignReader:table:remark': `备注`,
+ 'trials:reviewAssign:dialog:clearReader': `清除阅片人`,
+ 'trials:reviewAssign:clearReader:title:clearAll': `清空全部未读阅片人`,
+ 'trials:reviewAssign:clearReader:title:r1': `阅片人1(R1):`,
+ 'trials:reviewAssign:clearReader:title:r2': `阅片人2(R2):`,
+ 'trials:reviewAssign:clearReader:title:ad': `裁判(AD):`,
+ 'trials:reviewAssign:clearReader:title:O1': `肿瘤阅片人(O1):`,
+ 'trials:reviewAssign:clearReader:title:msg1': `如果分配的阅片人已开始读片则不能清空`,
+ 'trials:reviewAssign:clearReader:title:reason': `原因`,
+ 'trials:reviewAssign:clearReader:title:cancelReader': `取消阅片人`,
+ 'trials:reviewAssign:clearReader:title:msg2': `已全部清空,请点击保存应用`,
+ 'trials:reviewAssign:clearReader:title:msg3': `没有可清空的阅片人`,
+ 'trials:reviewAssign:dialog:cancelHistory': `取消历史`,
+ 'trials:reviewAssign:cancelHistory:table:cancelTime': `取消时间`,
+ 'trials:reviewAssign:cancelHistory:table:cancelReason': `原因`,
+ 'trials:reviewAssign:message:message01': `是否确定分配?`,
+ 'trials:reviewAssign:message:message02': `是否确定取消分配?`,
+ 'trials:reviewAssign:message:message03': `生效成功!`,
+ 'trials:reviewAssign:message:message04': `该项目没有有效阅片人!`,
+ 'trials:reviewAssign:message:message05': `确定执行自动分配?`,
+ 'trials:reviewAssign:message:message06': `自动分配成功!`,
+ 'trials:reviewAssign:message:message07': `请选择阅片人`,
+ 'trials:reviewAssign:message:message08': `当前阅片模式为xxx,请选择正确阅片人数量`,
+ 'trials:reviewAssign:message:message09': `分配成功!`,
+ 'trials:reviewAssign:message:message10': `请勾选要分配的受试者!`,
+ 'trials:reviewAssign:message:message11': `确定要删除xxx的任务分配规则?`,
+ 'trials:reviewAssign:readingTask:table:isUrgent': `是否加急`,
+ 'trials:reviewAssign:readingTask:table:taskCode': `任务编号`,
+ 'trials:reviewAssign:readingTask:table:siteCode': `中心编号`,
+ 'trials:reviewAssign:readingTask:table:subjectCode': `受试者编号`,
+ 'trials:reviewAssign:readingTask:table:visitName': `访视/阅片期名称`,
+ 'trials:reviewAssign:readingTask:table:blindName': `盲态任务标识`,
+ 'trials:reviewAssign:readingTask:table:createTime': `任务创建时间`,
+ 'trials:reviewAssign:readingTask:table:taskStatus': `任务状态`,
+ 'trials:reviewAssign:readingTask:table:taskType': `任务类型`,
+ 'trials:reviewAssign:readingTask:table:assignStatus': `分配状态`,
+ 'trials:reviewAssign:readingTask:table:role': `角色`,
+ 'trials:reviewAssign:readingTask:table:reader': `阅片人`,
+ 'trials:reviewAssign:readingTask:table:criterionName': `阅片标准`,
+ 'trials:reviewAssign:readingTask:table:assignTime': `分配时间`,
+ 'trials:reviewAssign:readingTask:table:adReader': `裁判阅片人`,
+ 'trials:reviewAssign:readingTask:table:historyReader': `历史阅片人`,
+ 'trials:tab:reviewTrack': `阅片跟踪`,
+ 'trials:reviewTrack:table:isUrgent': `是否加急`,
+ 'trials:reviewTrack:table:taskCode': `任务编号`,
+ 'trials:reviewTrack:table:siteCode': `中心编号`,
+ 'trials:reviewTrack:table:subjectCode': `受试者编号`,
+ 'trials:reviewTrack:table:taskName': `任务名称`,
+ 'trials:reviewTrack:table:blindName': `盲态任务标识`,
+ 'trials:reviewTrack:table:completeClinicalDataEnum': `临床数据是否完备`,
+ 'trials:reviewTrack:table:createTime': `任务创建时间`,
+ 'trials:reviewTrack:table:taskStatus': `任务状态`,
+ 'trials:reviewTrack:table:taskType': `任务类型`,
+ 'trials:reviewTrack:table:role': `角色`,
+ 'trials:reviewTrack:table:reader': `阅片人`,
+ 'trials:reviewTrack:table:criterionName': `阅片标准`,
+ 'trials:reviewTrack:table:assignTime': `分配时间`,
+ 'trials:reviewTrack:table:suggesteFinishedTime': `建议完成时间`,
+ 'trials:reviewTrack:table:readingStatus': `阅片状态`,
+ 'trials:reviewTrack:table:signTime': `阅片完成时间`,
+ 'trials:reviewTrack:table:applyStatus': `申请状态`,
+ 'trials:reviewTrack:table:auditStatus': `审核结果`,
+ 'trials:reviewTrack:action:viewResults': `查看阅片结果`,
+ 'trials:reviewTrack:action:applyReread': `申请重阅`,
+ 'trials:reviewTrack:action:backToRereadHistory': `退回重阅历史`,
+ 'trials:reviewTrack:action:back': `退回`,
+ 'trials:reviewTrack:action:backToTaskList': `退回已影响任务列表`,
+ 'trials:reviewTrack:dialog:applyReread': `申请重阅`,
+ 'trials:reviewTrack:applyReread:title:applyReason': `申请原因`,
+ 'trials:reviewTrack:applyReread:title:ImageRetransfer': `图像重传`,
+ 'trials:reviewTrack:applyReread:title:other': `其他`,
+ 'trials:reviewTrack:applyReread:title:remark': `备注`,
+ 'trials:reviewTrack:applyReread:title:influencesList': `影响的任务列表`,
+ 'trials:reviewTrack:applyReread:title:postEffectiveImpacts': `生效后影响`,
+ 'trials:reviewTrack:applyReread:title:msg1': ` 注意!列表中存在IR已申请重阅的任务!`,
+ 'trials:reviewTrack:dialog:backImpactList': `退回影响任务列表`,
+ 'trials:reviewTrack:dialog:impactList': `已影响任务列表`,
+ 'trials:reviewTrack:impactList:save': `确定`,
+ 'trials:reviewTrack:message:returnedSuccessfully': `退回成功`,
+ 'trials:reviewTrack:message:ImageRetransfer': `图像重传`,
+ 'trials:reviewTrack:message:applyedSuccessfully': `申请重阅成功`,
+ 'trials:reviewTrack:message:urgentReason': `加急原因`,
+ 'trials:reviewTrack:message:urgentReasonNote': `备注`,
+ 'trials:reviewTrack:button:export': `导出`,
+ 'trials:reviewTrack:title:fileName': `文件名称`,
+ 'trials:reviewTrack:title:download': `下载`,
+ 'trials:tab:rereadTrack': `重阅跟踪`,
+ 'trials:rereadTrack:table:isUrgent': `是否加急`,
+ 'trials:rereadTrack:table:taskCode': `任务编号`,
+ 'trials:rereadTrack:table:siteCode': `中心编号`,
+ 'trials:rereadTrack:table:subjectCode': `受试者编号`,
+ 'trials:rereadTrack:table:taskName': `任务名称`,
+ 'trials:rereadTrack:table:blindName': `盲态任务标识`,
+ 'trials:rereadTrack:table:createTime': `任务创建时间`,
+ 'trials:rereadTrack:table:taskStatus': `任务状态`,
+ 'trials:rereadTrack:table:taskType': `任务类型`,
+ 'trials:rereadTrack:table:role': `角色`,
+ 'trials:rereadTrack:table:reader': `阅片人`,
+ 'trials:rereadTrack:table:criterionName': `阅片标准`,
+ 'trials:rereadTrack:table:signTime': `阅片完成时间`,
+ 'trials:rereadTrack:table:applyType': `申请类型`,
+ 'trials:rereadTrack:table:applyTime': `申请时间`,
+ 'trials:rereadTrack:table:applyReason': `申请原因`,
+ 'trials:rereadTrack:table:approvalResult': `审批结果`,
+ 'trials:rereadTrack:table:newTaskCode': `新任务编号`,
+ 'trials:rereadTrack:table:agree': `同意`,
+ 'trials:rereadTrack:table:reject': `拒绝`,
+ 'trials:rereadTrack:table:influenceTaskList': `已影响任务列表`,
+ 'trials:rereadTrack:table:ReReadingApplyState': `申请状态`,
+ 'trials:rereadTrack:dialog:reject': `驳回`,
+ 'trials:rereadTrack:reject:title:reason': `驳回原因`,
+ 'trials:rereadTrack:message:msg1': `确定要申请重阅?`,
+ 'trials:rereadTrack:message:msg2': `申请重阅成功!`,
+ 'trials:rereadTrack:message:msg3': `同意申请成功!`,
+ 'trials:rereadTrack:message:msg4': `拒绝申请成功!`,
+ 'trials:tab:pmMedicalReview': `医学审核`,
+ 'trials:pmMedicalReview:table:isUrgent': `是否加急`,
+ 'trials:pmMedicalReview:table:taskCode': `任务编号`,
+ 'trials:pmMedicalReview:table:siteCode': `中心编号`,
+ 'trials:pmMedicalReview:table:subjectCode': `受试者编号`,
+ 'trials:pmMedicalReview:table:taskName': `任务名称`,
+ 'trials:pmMedicalReview:table:blindName': `盲态任务标识`,
+ 'trials:pmMedicalReview:table:taskType': `任务类型`,
+ 'trials:pmMedicalReview:table:taskState': `阅片任务状态`,
+ 'trials:pmMedicalReview:table:role': `角色`,
+ 'trials:pmMedicalReview:table:reader': `阅片人`,
+ 'trials:pmMedicalReview:table:criterionName': `阅片标准`,
+ 'trials:pmMedicalReview:table:signTime': `阅片完成时间`,
+ 'trials:pmMedicalReview:table:mim': `医学经理`,
+ 'trials:pmMedicalReview:table:allocateTime': `审核分配时间`,
+ 'trials:pmMedicalReview:table:isInvalid': `任务状态`,
+ 'trials:pmMedicalReview:table:auditState': `审核状态`,
+ 'trials:pmMedicalReview:table:auditAdvice': `审核建议`,
+ 'trials:pmMedicalReview:table:whetherAgree': `阅片人是否认同`,
+ 'trials:pmMedicalReview:table:auditSignTime': `审核签名时间`,
+ 'trials:pmMedicalReview:action:view': `查看`,
+ 'trials:pmMedicalReview:action:failure': `设置为失效`,
+ 'trials:pmMedicalReview:action:assign': `分配`,
+ 'trials:pmMedicalReview:action:cancelAssign': `取消分配`,
+ 'trials:pmMedicalReview:button:select': `筛选`,
+ 'trials:pmMedicalReview:select:isUrgent': `是否加急`,
+ 'trials:pmMedicalReview:select:taskCode': `任务编号`,
+ 'trials:pmMedicalReview:select:siteCode': `中心编号`,
+ 'trials:pmMedicalReview:select:subjectCode': `受试者编号`,
+ 'trials:pmMedicalReview:select:subjectSecondCode': `第二编号`,
+ 'trials:pmMedicalReview:select:taskName': `任务名称`,
+ 'trials:pmMedicalReview:select:taskBlindName': `盲态任务标识`,
+ 'trials:pmMedicalReview:select:taskType': `任务类型`,
+ 'trials:pmMedicalReview:select:role': `角色`,
+ 'trials:pmMedicalReview:select:reader': `阅片人`,
+ 'trials:pmMedicalReview:select:criterionName': `阅片标准`,
+ 'trials:pmMedicalReview:select:signTime': `阅片完成时间`,
+ 'trials:pmMedicalReview:select:readingDurationTime': `阅片时长`,
+ 'trials:pmMedicalReview:select:isGeneratedJudge': `是否产生裁判`,
+ 'trials:pmMedicalReview:select:globalReadingChanged': `全局阅片是否有校正`,
+ 'trials:pmMedicalReview:select:auditCount': `审核次数`,
+ 'trials:pmMedicalReview:select:allocation': `分配`,
+ 'trials:pmMedicalReview:select:batchAllocation': `批量分配`,
+ 'trials:pmMedicalReview:allocation:aliocationMIM': `分配医学经理`,
+ 'trials:pmMedicalReview:allocation:MIM': `医学经理`,
+ 'trials:pmMedicalReview:allocation:msg1': `请先选择需要分配的医学审核任务!`,
+ 'trials:pmMedicalReview:dialog:medicalReview': `医学审核详情`,
+ 'trials:pmMedicalReview:button:setInvalid': `设置为失效`,
+ 'trials:pmMedicalReview:message:msg01': `请先勾选医学审核任务!`,
+ 'trials:pmMedicalReview:message:msg02': `确定将该医学审核任务设置为失效吗?`,
+ 'trials:pmMedicalReview:message:msg03': `设置成功!`,
+ 'trials:pmMedicalReview:message:msg04': `请先选择需要分配的医学审核任务!`,
+ 'trials:pmMedicalReview:message:msg05': `确定要取消分配吗?`,
+ 'trials:pmMedicalReview:message:msg06': `取消分配成功!`,
+ 'trials:tab:consistencyAnalysis': `一致性分析`,
+ 'trials:consistencyAnalysis:table:isUrgent': `是否加急`,
+ 'trials:consistencyAnalysis:table:taskCode': `任务编号`,
+ 'trials:consistencyAnalysis:table:siteCode': `中心编号`,
+ 'trials:consistencyAnalysis:table:subjectCode': `受试者编号`,
+ 'trials:consistencyAnalysis:table:impact': `影响`,
+ 'trials:consistencyAnalysis:table:taskName': `任务名称`,
+ 'trials:consistencyAnalysis:table:taskBlindName': `盲态任务标识`,
+ 'trials:consistencyAnalysis:table:taskType': `任务类型`,
+ 'trials:consistencyAnalysis:table:category': `一致性分析类别`,
+ 'trials:consistencyAnalysis:table:role': `角色`,
+ 'trials:consistencyAnalysis:table:reader': `阅片人`,
+ 'trials:consistencyAnalysis:table:criterionName': `阅片标准`,
+ 'trials:consistencyAnalysis:table:taskStatus': `任务状态`,
+ 'trials:consistencyAnalysis:table:auditTime': `分配时间`,
+ 'trials:consistencyAnalysis:table:suggesteFinishedTime': `建议完成时间`,
+ 'trials:consistencyAnalysis:table:reviewStatus': `阅片状态`,
+ 'trials:consistencyAnalysis:table:signTime': `阅片完成时间`,
+ 'trials:consistencyAnalysis:table:applyStatus': `申请状态`,
+ 'trials:consistencyAnalysis:table:impactInfluence': `是否受到退回影响`,
+ 'trials:consistencyAnalysis:action:view': `查看阅片结果`,
+ 'trials:consistencyAnalysis:action:setInvalid': `设置为失效`,
+ 'trials:consistencyAnalysis:button:self': `自身一致性分析`,
+ 'trials:consistencyAnalysis:button:group': `组间一致性分析`,
+ 'trials:consistencyAnalysis:title:impactInfluence': `受到退回影响`,
+ 'trials:consistencyAnalysis:message:selectCriterion': `请先选择阅片标准!`,
+ 'trials:selftConsistencyAnalysis:button:config': `配置自身一致性分析规则`,
+ 'trials:selftConsistencyAnalysis:table:reader': `阅片人`,
+ 'trials:selftConsistencyAnalysis:table:visitNum': `访视数`,
+ 'trials:selftConsistencyAnalysis:table:intervalPeriod': `间隔周期(周)`,
+ 'trials:selftConsistencyAnalysis:table:isReadingPeriod': `所选访视是否有阅片期`,
+ 'trials:selftConsistencyAnalysis:table:isGenerateGlobalTask': `是否生成全局阅片任务`,
+ 'trials:selftConsistencyAnalysis:table:plannedSubjectNum': `计划受试者数`,
+ 'trials:selftConsistencyAnalysis:table:createdSubjectNum': `已生成受试者数`,
+ 'trials:selftConsistencyAnalysis:button:select': `选择`,
+ 'trials:consistencyAnalysis:button:exportSelf': `导出自身一致性分析`,
+ 'trials:grouptConsistencyAnalysis:button:config': `配置组间一致性分析规则`,
+ 'trials:grouptConsistencyAnalysis:table:siteCode': `中心编号`,
+ 'trials:grouptConsistencyAnalysis:table:subjectCode': `受试者编号`,
+ 'trials:grouptConsistencyAnalysis:table:validVisitCount': `符合规则访视数`,
+ 'trials:grouptConsistencyAnalysis:button:create': `生成`,
+ 'trials:grouptConsistencyAnalysis:table:backImpact': `是否受到退回影响`,
+ 'trials:grouptConsistencyAnalysis:message:msg1': `请选择要生成的受试者!`,
+ 'trials:consistencyAnalysis:button:exportGroup': `导出组间一致性分析`,
+ 'trials:consistencyAnalysisRule:table:visitNum': `访视数`,
+ 'trials:consistencyAnalysisRule:table:isReadingPeriod': `所选访视是否有阅片期`,
+ 'trials:consistencyAnalysisRule:table:intervalPeriod': `间隔周期(周)`,
+ 'trials:consistencyAnalysisRule:table:plannedNum': `计划病例数`,
+ 'trials:consistencyAnalysisRule:table:siteCode': `虚拟中心编号`,
+ 'trials:consistencyAnalysisRule:table:subjectNum': `虚拟受试者位数`,
+ 'trials:consistencyAnalysisRule:table:isGenerateGlobalTask': `是否生成全局阅片任务`,
+ 'trials:consistencyAnalysis:dialog:selectSubject': `选择受试者`,
+ 'trials:consistencyAnalysis:dialog:applyReread': `申请重阅`,
+ 'trials:consistencyAnalysis:applyReread:reason': `申请原因`,
+ 'trials:consistencyAnalysis:applyReread:imageReload': `图像重传`,
+ 'trials:consistencyAnalysis:applyReread:other': `其他`,
+ 'trials:consistencyAnalysis:applyReread:remark': `备注`,
+ 'trials:consistencyAnalysis:applyReread:msg1': `确定要将该一致性任务设置成失效吗?`,
+ 'trials:consistencyAnalysis:applyReread:msg2': `设置成功!`,
+ 'trials:consistencyAnalysis:applyReread:msg3': `申请重阅成功!`,
+ 'trials:trials-panel:reading:hotkeys': `阅片工具配置`,
+ 'trials:dicom-show:nowStudy': `当前检查`,
+ 'trials:dicom-show:relevanceStudy': `关联检查`,
+ 'trials:dicom-show:nowSeries': `当前序列`,
+ 'trials:dicom-show:transform': `图像变换`,
+ 'trials:dicom-show:lens': `透镜`,
+ 'trials:dicom-show:measurementLabeling': `测量标注`,
+ 'trials:dicom-show:Probe': `探针`,
+ 'trials:dicom-show:Length': `直径测量`,
+ 'trials:dicom-show:Angle': `角度测量`,
+ 'trials:dicom-show:CobbAngle': `Cobb测量`,
+ 'trials:dicom-show:EllipticalRoi': `椭圆测量`,
+ 'trials:dicom-show:RectangleRoi': `矩形测量`,
+ 'trials:dicom-show:FreehandRoi': `多边形标记`,
+ 'trials:dicom-show:Bidirectional': `长短径测量`,
+ 'trials:dicom-show:ArrowAnnotate': `文字标注`,
+ 'trials:dicom-show:Eraser': `清除测量和标记`,
+ 'trials:dicom-show:image': `截屏`,
+ 'trials:dicom-show:play': `播放`,
+ 'trials:dicom-show:firstframe': `第一帧`,
+ 'trials:dicom-show:previousframe': `上一帧`,
+ 'trials:dicom-show:nextframe': `下一帧`,
+ 'trials:dicom-show:lastframe': `最后一帧`,
+ 'trials:dicom-show:default': `默认值`,
+ 'trials:dicom-show:dicomCanvasWwwc': `窗宽/窗位`,
+ 'trials:dicom-show:custom': `自定义`,
+ 'trials:dicom-show:pseudocolor': `伪彩色`,
+ 'trials:dicom-show:color': `颜色`,
+ 'trials:trials-panel:attachments:spm-enrollment': `阅片人筛选`,
+ 'trials:none-dicom-show:fileList': `文件列表`,
+ 'trials:trials-panel:taskAllocation': `访视任务分配`,
+ 'trials:trials-panel:reading': `阅片`,
+ 'trials:trials-panel:refereeAllocation': `裁判任务分配`,
+ 'trials:trials-panel:readingTracking': `阅片跟踪`,
+ 'trials:trials-panel:reReadingTracking': `重阅跟踪`,
+ 'trials:trials-panel:tab:pmMedicalFeedback': `医学审核`,
+ 'trials:trials-panel:reading:consistency-analysis': `一致性分析`,
+ 'trials:trials-panel:attachments:reReadingTracking': `重阅审批`,
+ 'trials:trials-panel:tab:pendingReview': `审核跟踪`,
+ 'trials:pendingReview:title:urgentReason': `加急原因:`,
+ 'trials:pendingReview:title:urgentNote': `备注:`,
+ 'trials:pendingReview:table:auditResult': `审核结果`,
+ 'trials:pendingReview:button:audit': `审核`,
+ 'trials:pendingReview:button:enrollmentConfirm': `入组确认`,
+ 'trials:pendingReview:button:pdConfirm': `PD确认`,
+ 'trials:pendingReview:button:auditRecords': `审核记录`,
+ 'trials:pendingReview:title:notAgreeReason': `不认可原因`,
+ 'trials:pendingReview:title:note': `备注`,
+ 'trials:pendingReview:title:screenshots': `相关截图`,
+ 'trials:pendingReview:button:modify': `修改`,
+ 'trials:pendingReview:button:confirm': `确认`,
+ 'trials:trials-panel:tab:reviewed': `已审核`,
+ 'trials:trials-panel:title:audit': `审核`,
+ 'trials:trials-panel:tab:audit-record': `PI审核`,
+ 'trials:auditRecord:table:creator': `创建人`,
+ 'trials:auditRecord:table:createTime': `创建时间`,
+ 'trials:auditRecord:table:isEnrollment': `是否入组`,
+ 'trials:auditRecord:table:isPDConfirm': `是否PD`,
+ 'trials:auditRecord:table:latestReplyUserName': `最新回复人`,
+ 'trials:auditRecord:table:latestReplyTime': `最新回复时间`,
+ 'trials:auditRecord:table:readingResult': `阅片结果`,
+ 'trials:auditRecord:table:auditRecords': `审核记录`,
+ 'trials:auditRecord:table:auditResult': `审核结果`,
+ 'trials:auditRecord:title:auditResult': `审核结果:`,
+ 'trials:auditRecord:title:notAgreeReason': `不认可原因:`,
+ 'trials:auditRecord:title:note': `备注:`,
+ 'trials:auditRecord:title:screenshot': `相关截图如下:`,
+ 'trials:trials-panel:tab:confirmation': `入组/PD确认`,
+ 'trials:trials-config:clinicalDataQuestionCfg:button:apply': `应用`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:qsName': `问题名称`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:qsNameEn': `问题名称(EN)`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:groupName': `分组`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:groupNameEn': `分组(EN)`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:type': `题型`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:options': `选项`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:isDisplay': `是否显示`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:isRequired': `是否必填`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:decimalPlaces': `小数位数`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:unit': `单位`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:cutOffDate': `截止日期`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:isDependence': `显示依赖父问题`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:displayTriggerVal': `显示触发值`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:isStudyDate': `是否为检查日期`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:maxLength': `最大长度`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:maxRowCount': `最大行数`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:maxUploadCount': `最大上传个数`,
+ 'trials:trials-config:clinicalDataQuestionCfg:table:orderNum': `序号`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:optionsValidate': `选项不允许存在相同值`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:birthDay': `生日`,
+ 'trials:trials-config:clinicalDataQuestionCfg:button:view': `查看`,
+ 'trials:trials-config:clinicalDataQuestionCfg:button:tblQuestion': `表格问题`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:preview': `eCRF预览`,
+ 'trials:trials-config:clinicalDataQuestionCfg:msg:applySuccesssfully': `应用成功!`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:add': `添加`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:view': `查看`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:edit': `编辑`,
+ 'trials:trials-config:clinicalDataQuestionCfg:msg:delSuccessfully': `删除成功!`,
+ 'trials:trials-config:clinicalDataQuestionCfg:title:tblQs': `表格问题`,
+ 'trials:trials-config:clinicalDataQuestionCfg:msg:options': `选项请用‘|’分割多个选项`,
+ 'trials:trials-config:clinicalDataQuestionCfg:msg:questionOfHomonyms': `存在同名问题,是否继续提交?`,
+ 'trials:trials-config:processConfig:title:clinicalDataQSCfg': `问题配置`,
+ 'trials:components:clinicalDataQS:msg:signSuccessfully': `签名成功!`,
+ 'trials:components:clinicalDataQS:msg:birthDay': `生日不能大于截止日期`,
+ 'trials:components:clinicalDataQS:msg:submitSuccessfully': `提交成功!`,
+ 'trials:components:clinicalDataQS:title:tableQs': `表格问题`,
+ 'CustomWwwcForm:form:label:ww': `窗宽`,
+ 'CustomWwwcForm:form:label:wl': `窗位`,
+}
\ No newline at end of file
diff --git a/src/layout/components/AppMain.vue b/src/layout/components/AppMain.vue
new file mode 100644
index 0000000..73976b1
--- /dev/null
+++ b/src/layout/components/AppMain.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Navbar.vue b/src/layout/components/Navbar.vue
new file mode 100644
index 0000000..88bcd75
--- /dev/null
+++ b/src/layout/components/Navbar.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/FixiOSBug.js b/src/layout/components/Sidebar/FixiOSBug.js
new file mode 100644
index 0000000..c41f7ea
--- /dev/null
+++ b/src/layout/components/Sidebar/FixiOSBug.js
@@ -0,0 +1,24 @@
+export default {
+ computed: {
+ device() {
+ return this.$store.state.app.device
+ }
+ },
+ mounted() {
+ this.fixBugIniOS()
+ },
+ methods: {
+ fixBugIniOS() {
+ const $subMenu = this.$refs.subMenu
+ if ($subMenu) {
+ const handleMouseleave = $subMenu.handleMouseleave
+ $subMenu.handleMouseleave = (e) => {
+ if (this.device === 'mobile') {
+ return
+ }
+ handleMouseleave(e)
+ }
+ }
+ }
+ }
+}
diff --git a/src/layout/components/Sidebar/Item.vue b/src/layout/components/Sidebar/Item.vue
new file mode 100644
index 0000000..b515f61
--- /dev/null
+++ b/src/layout/components/Sidebar/Item.vue
@@ -0,0 +1,29 @@
+
diff --git a/src/layout/components/Sidebar/Link.vue b/src/layout/components/Sidebar/Link.vue
new file mode 100644
index 0000000..eb4dd10
--- /dev/null
+++ b/src/layout/components/Sidebar/Link.vue
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/Logo.vue b/src/layout/components/Sidebar/Logo.vue
new file mode 100644
index 0000000..040fab6
--- /dev/null
+++ b/src/layout/components/Sidebar/Logo.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/SidebarItem.vue b/src/layout/components/Sidebar/SidebarItem.vue
new file mode 100644
index 0000000..ea30dbe
--- /dev/null
+++ b/src/layout/components/Sidebar/SidebarItem.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue
new file mode 100644
index 0000000..d6a049c
--- /dev/null
+++ b/src/layout/components/Sidebar/index.vue
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/ScrollPane.vue b/src/layout/components/TagsView/ScrollPane.vue
new file mode 100644
index 0000000..0ec76e7
--- /dev/null
+++ b/src/layout/components/TagsView/ScrollPane.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/TagsView/index.vue b/src/layout/components/TagsView/index.vue
new file mode 100644
index 0000000..72fc764
--- /dev/null
+++ b/src/layout/components/TagsView/index.vue
@@ -0,0 +1,301 @@
+
+
+
+
+ {{ tag.title }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/layout/components/index.js b/src/layout/components/index.js
new file mode 100644
index 0000000..9fc98d6
--- /dev/null
+++ b/src/layout/components/index.js
@@ -0,0 +1,4 @@
+export { default as Navbar } from './Navbar'
+export { default as Sidebar } from './Sidebar'
+export { default as AppMain } from './AppMain'
+export { default as TagsView } from './TagsView'
diff --git a/src/layout/index.vue b/src/layout/index.vue
new file mode 100644
index 0000000..79e5ade
--- /dev/null
+++ b/src/layout/index.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
diff --git a/src/layout/mixin/ResizeHandler.js b/src/layout/mixin/ResizeHandler.js
new file mode 100644
index 0000000..e8d0df8
--- /dev/null
+++ b/src/layout/mixin/ResizeHandler.js
@@ -0,0 +1,45 @@
+import store from '@/store'
+
+const { body } = document
+const WIDTH = 992 // refer to Bootstrap's responsive design
+
+export default {
+ watch: {
+ $route(route) {
+ if (this.device === 'mobile' && this.sidebar.opened) {
+ store.dispatch('app/closeSideBar', { withoutAnimation: false })
+ }
+ }
+ },
+ beforeMount() {
+ window.addEventListener('resize', this.$_resizeHandler)
+ },
+ beforeDestroy() {
+ window.removeEventListener('resize', this.$_resizeHandler)
+ },
+ mounted() {
+ const isMobile = this.$_isMobile()
+ if (isMobile) {
+ store.dispatch('app/toggleDevice', 'mobile')
+ store.dispatch('app/closeSideBar', { withoutAnimation: true })
+ }
+ },
+ methods: {
+ // use $_ for mixins properties
+ // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
+ $_isMobile() {
+ const rect = body.getBoundingClientRect()
+ return rect.width - 1 < WIDTH
+ },
+ $_resizeHandler() {
+ if (!document.hidden) {
+ const isMobile = this.$_isMobile()
+ store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop')
+
+ if (isMobile) {
+ store.dispatch('app/closeSideBar', { withoutAnimation: true })
+ }
+ }
+ }
+ }
+}
diff --git a/src/main.js b/src/main.js
new file mode 100644
index 0000000..bfa4c0f
--- /dev/null
+++ b/src/main.js
@@ -0,0 +1,467 @@
+
+import Vue from 'vue'
+import 'normalize.css/normalize.css' // A modern alternative to CSS resets
+
+import ElementUI, { MessageBox } from 'element-ui'
+import { getBasicDataAllSelect, getFrontInternationalizationList } from '@/api/dictionary/dictionary'
+// import 'element-ui/lib/theme-chalk/index.css'
+import './assets/css/theme-blue/index.css' // 浅绿色主题
+import './assets/css/iconfont/index.css' // 阿里巴巴图标库
+// import locale from 'element-ui/lib/locale/lang/en' // lang i18n
+import i18n from './lang'
+import '@/styles/index.scss' // global css
+
+import vcrontab from "vcrontab";
+Vue.use(vcrontab); //使用方式:
+
+import App from './App'
+import store from './store'
+import router from './router'
+
+import '@/icons' // icon
+import '@/permission' // permission control
+import md5 from 'js-md5'
+import VueClipboard from 'vue-clipboard2'
+Vue.use(VueClipboard)
+// import htmlToPdf from './utils/htmlToPdf'
+// Vue.use(htmlToPdf)
+import permission from './utils/permission'
+import { OSSclient } from './utils/oss'
+Vue.use(permission)
+
+import Viewer from 'v-viewer'
+import './assets/css/viewer.css'
+
+
+Vue.use(Viewer)
+
+Viewer.setDefaults({
+ Options: {
+ 'inline': true,
+ 'button': true,
+ 'navbar': true,
+ 'title': true,
+ 'toolbar': true,
+ 'tooltip': true,
+ 'movable': true,
+ 'zoomable': true,
+ 'rotatable': true,
+ 'scalable': true,
+ 'transition': true,
+ 'fullscreen': true,
+ 'keyboard': true,
+ 'url': 'data-source'
+ }
+})
+
+import hasPermi from './directive/permission'
+Vue.use(hasPermi)
+
+// set ElementUI lang to EN
+// Vue.use(ElementUI, { locale, size: 'medium' })
+// 如果想要中文版 element-ui,按如下方式声明
+// Vue.use(ElementUI)
+Vue.use(ElementUI, {
+ i18n: (key, value) => i18n.t(key, value),
+ size: 'medium'
+})
+import upload from '@/components/element-ui/upload'
+Vue.use(upload)
+
+import adaptive from '@/directive/adaptive/index'
+// 表格自适应指令
+Vue.use(adaptive)
+import dialogDrag from '@/directive/dialogDrag'
+// 窗口拖拽
+Vue.use(dialogDrag)
+if(!String.prototype.replaceAll){
+ String.prototype.replaceAll = function(str, newStr){
+ // 正则表达式
+ if (Object.prototype.toString.call(str).toLowerCase() === '[object regexp]') {
+ return this.replace(str, newStr)
+ }
+ // 字符串
+ return this.replace(new RegExp(str, 'g'), newStr)
+ }
+}
+import { parseTime, resetForm, selectDictLabel, selectDictLabels, handleTree, params } from '@/utils/ruoyi'
+import { xfHasPermi } from '@/utils/hasPermi'
+// 字典数据组件
+import DictTag from '@/components/DictTag'
+import DictData from '@/components/DictData'
+import { getBasicDataSelect } from '@/api/dictionary/dictionary'
+import { checkConfig } from '@/const/check/index'
+// 全局方法挂载
+var $q = params
+Vue.prototype.checkConfig = checkConfig
+Vue.prototype.$q = $q()
+Vue.prototype.hasPermi = xfHasPermi
+Vue.prototype.getDicts = getBasicDataSelect
+Vue.prototype.selectDictLabel = selectDictLabel
+Vue.prototype.selectDictLabels = selectDictLabels
+Vue.component('DictTag', DictTag)
+// 全局方法挂载
+Vue.prototype.parseTime = parseTime
+Vue.prototype.resetForm = resetForm
+Vue.prototype.selectDictLabel = selectDictLabel
+// Vue.prototype.download = download
+Vue.prototype.handleTree = handleTree
+
+Vue.prototype.$getObjectName = (url) => {
+ console.log(url)
+ var value = url
+ var str = value.split("//"); //https://进行分割,
+ var index = str[1].indexOf("/")+1; //indexOf 获取第一个斜杠的索引,
+ console.log(str[1].substring(index)); //substring 截取,
+ return '/' + str[1].substring(index)
+}
+Vue.prototype.getGuid = (text) => {
+ text = md5(text)
+ let t1, t2, t3, t4, t5, t6, t7, t8, t9, t10
+ t1 = text.substr(0, 2)
+ t2 = text.substr(2, 2)
+ t3 = text.substr(4, 2)
+ t4 = text.substr(6, 2)
+ t5 = text.substr(8, 2)
+ t6 = text.substr(10, 2)
+ t7 = text.substr(12, 2)
+ t8 = text.substr(14, 2)
+ t9 = text.substr(16, 4)
+ t10 = text.substr(20, 12)
+ console.log(`${t4+t3+t2+t1}-${t6+t5}-${t8+t7}-${t9}-${t10}`)
+ return `${t4+t3+t2+t1}-${t6+t5}-${t8+t7}-${t9}-${t10}`
+}
+///50350000-3e2c-0016-eb4c-08db926b69d6/Image/84410000-3e10-0016-d156-08da242403fe/50350000-3e2c-0016-414e-08db926d9135/50350000-3e2c-0016-fd9d-08db926d9137/1.2.156.110002.21.2019.1.9.84822154.1/1.3.12.2.1107.5.1.4.73793.30000019010509500386600308609/1.3.12.2.1107.5.1.4.73793.30000019010509500386600308616/7fba7d7e-b3b3-d989-fa54-82e41f87a6ed
+Vue.prototype.getGuid('1.2.156.110002.21.2019.1.9.84822154.11.3.12.2.1107.5.1.4.73793.300000190105095003866003086091.3.12.2.1107.5.1.4.73793.3000001901050950038660030861650350000-3e2c-0016-eb4c-08db926b69d6')
+//7fba7d7e-b3b3-d989-fa54-82e41f87a6ed
+Vue.prototype.$validatePassword = (rule, value, callback) => {
+ var lang = zzSessionStorage.getItem('lang')?zzSessionStorage.getItem('lang'):'zh'
+ /* eslint-disable */
+ var reg1 = eval(process.env.VUE_APP_PASSWORD_FOR_PERMISSION) ? new RegExp(`${process.env.VUE_APP_PASSWORD_FOR_REGULAR}`) : /.*/g; //密码必须是8位以上、必须含有字母、数字、特殊符号
+ if (!reg1.test(value)) {
+ callback(lang==='zh' ? new Error("密码必须包含:1)8 – 32 个字符;2)至少1个数字;3) 至少1个大写字母;4)至少1个小写字母;5)至少1个特殊字符 (~!-@#$%^&*_+?)") : new Error('Passwords must have: 1) 8 - 32 characters; 2) At least 1 number; 3) At least 1 uppercase letter; 4) At least 1 lowercase letter; 5) At least 1 special character (~!-@#$%^&*_+?) '))
+ } else {
+ callback();
+ }
+}
+
+DictData.install()
+
+import global_ from './components/Global'
+Vue.prototype.GLOBAL = global_
+Vue.config.productionTip = false
+Vue.prototype.$upload = () => {
+ _vm.$forceUpdate()
+}
+Vue.prototype.fileToBlob = (file) => {
+ // 创建 FileReader 对象
+ const reader = new FileReader()
+ return new Promise(resolve => {
+ // FileReader 添加 load 事件
+ reader.addEventListener('load', (e) => {
+ let blob
+ if (typeof e.target.result === 'object') {
+ blob = new Blob([e.target.result])
+ } else {
+ blob = e.target.result
+ }
+ resolve(blob)
+ })
+ // FileReader 以 ArrayBuffer 格式 读取 File 对象中数据
+ reader.readAsArrayBuffer(file)
+ })
+}
+
+var _vm
+async function VueInit () {
+ var params
+ if (~window.location.href.indexOf('/readingDicoms') || ~window.location.href.indexOf('/noneDicomReading') || ~window.location.href.indexOf('/criterionquestions')) {
+ params = $q('TrialReadingCriterionId')
+ }
+ var res = await getBasicDataAllSelect(params)
+ var Internationalization = await getFrontInternationalizationList()
+ Vue.prototype.$tl = Internationalization.Result
+ let zhMessages = {}, enMessages = {}
+ Vue.prototype.$tl.forEach(v => {
+ // zhMessages[v.Description + '_' + v.Code] = v.ValueCN
+ // enMessages[v.Description + '_' + v.Code] = v.Value
+ zhMessages[v.Code] = v.ValueCN
+ enMessages[v.Code] = v.Value
+ })
+ i18n.mergeLocaleMessage('zh', zhMessages)
+ i18n.mergeLocaleMessage('en', enMessages)
+ let d = function (code) {
+ var dictInfo = res.Result
+ var lang = zzSessionStorage.getItem('lang')?zzSessionStorage.getItem('lang'):'zh'
+ try {
+ for (var code in dictInfo) {
+ var dictList = (dictInfo[code] && dictInfo[code].length > 0) ? dictInfo[code].map(dict => {
+ return {
+ id: dict.Id,
+ label: lang==='zh' ? dict.ValueCN : dict.Value,
+ value: dict.DataTypeEnum === 3 ? eval(dict.Code) : dict.IsEnumInt ? parseInt(dict.Code): dict.Code,
+ raw: Object.assign({}, dict),
+ IsBaseLineUse: false,
+ IsFollowVisitUse: false
+ }
+ }) : []
+ dictInfo[code] = dictList
+ }
+ } catch (e){
+ console.error(e)
+ }
+ return dictInfo
+ }()
+ Vue.prototype.$d = d
+ Vue.prototype.$fd = function (code, v, type) {
+ try {
+ // code === 'YesOrNo' ? console.log(d) : ''
+ type = type || 'value'
+ return d[code].find(i => {
+ return i[type] === v
+ }) ? d[code].find(i => {
+ return i[type] === v
+ }).label : ''
+ } catch (e) {
+ console.log(e)
+ }
+ }
+ Vue.prototype.$updateDictionary = function() {
+ Vue.prototype.$d = function (code) {
+ var dictInfo = res.Result
+ var lang = zzSessionStorage.getItem('lang')?zzSessionStorage.getItem('lang'):'zh'
+ try {
+ for (var code in dictInfo) {
+ var dictList = (dictInfo[code] && dictInfo[code].length > 0) ? dictInfo[code].map(dict => {
+ return {
+ id: dict.raw.Id,
+ label: lang==='zh' ? dict.raw.ValueCN : dict.raw.Value,
+ value: dict.raw.DataTypeEnum === 3 ? eval(dict.raw.Code) : dict.raw.IsEnumInt ? parseInt(dict.raw.Code): dict.raw.Code,
+ raw: Object.assign({}, dict.raw),
+ IsBaseLineUse: false,
+ IsFollowVisitUse: false
+ }
+ }) : []
+ _vm.$set(dictInfo, code, dictList)
+ }
+ } catch (e){
+ console.error(e)
+ }
+ return dictInfo
+ }()
+ _vm.$forceUpdate()
+ }
+ Vue.prototype.$path = []
+ var t = function (key) {
+ // if (![Vue.prototype.toPath + '_' + key].includes(Vue.prototype.$path)) {
+ if (!~Vue.prototype.$path.indexOf(key)) {
+ // Vue.prototype.$path.push(Vue.prototype.toPath + '_' + key)
+ Vue.prototype.$path.push(key)
+ }
+ // return i18n.t(Vue.prototype.toPath + '_' + key)
+ return i18n.t(key)
+ }
+ Vue.prototype.$t = t
+ _vm = new Vue({
+ el: '#app',
+ router,
+ store,
+ i18n,
+ data: {
+ unlock: {
+ my_username: null,
+ my_password: null
+ }
+ },
+ render: h => h(App)
+ }).$mount('#app')
+ var isLock = zzSessionStorage.getItem('isLock')
+ var isOpen = false
+ let count = 0;
+ if (eval(process.env.VUE_APP_LOGIN_FOR_PERMISSION)) {
+ setInterval(() => {
+ var lang = zzSessionStorage.getItem('lang')?zzSessionStorage.getItem('lang'):'zh'
+ if ( _vm.$route.path === '/ReviewersResearchForm' || _vm.$route.path === '/ReviewersResearch' || _vm.$route.path === '/login' || _vm.$route.path === '/researchForm' || _vm.$route.path === '/researchLogin' || _vm.$route.path === '/email-recompose' || _vm.$route.path === '/recompose' || _vm.$route.path === '/resetpassword' || _vm.$route.path === '/error') {
+ return
+ }
+ if (_vm.$store.state.user.userId !== zzSessionStorage.getItem('userId')) {
+ window.location.href = `/login`
+ zzSessionStorage.removeItem('lastWorkbench')
+ _vm.$alert(lang === 'en'? 'The same browser only allows one user account to be logged in at a time.' : '同一浏览器只允许同时登陆一个账户', {
+ type: 'warning',
+ })
+ }
+ }, 3000)
+ }
+ const waitOperate = (callback, second, callback2, second2) => {
+ let x;
+ let y;
+ let timer;
+ //监听键盘
+ function countTime() {
+ count++
+ localStorage.setItem('count', count)
+ if (count == parseInt(second2) || isLock === 'true') {
+ callback2();
+ }
+ if (count >= second) {
+ callback();
+ count = 0;
+ localStorage.removeItem('count')
+ // clearInterval(timer);
+ }
+ }
+ var blob = new Blob([document.querySelector('#worker').textContent]);
+ var url = window.URL.createObjectURL(blob);
+ var worker = new Worker(url);
+ worker.onmessage = function (e, msg) {
+ if (localStorage.getItem('count') === '0') {
+ count = 0
+ localStorage.removeItem('count')
+ }
+ countTime()
+ }
+ //监听鼠标
+ document.onmousemove = function (event) {
+ const x1 = event.clientX;
+ const y1 = event.clientY;
+ if (x != x1 || y != y1) {
+ count = 0;
+ localStorage.setItem('count', '0')
+ }
+ x = x1;
+ y = y1;
+ };
+ document.onkeyup = function () {
+ count = 0;
+ localStorage.setItem('count', '0')
+ };
+ }
+ const h = _vm.$createElement
+ /* eslint-disable */
+ waitOperate(eval(process.env.VUE_APP_LOGOUT_FOR_PERMISSION) ? () => {
+ var lang = zzSessionStorage.getItem('lang')?zzSessionStorage.getItem('lang'):'zh'
+ if (_vm.$route.path === '/ReviewersResearchForm' || _vm.$route.path === '/ReviewersResearch' || _vm.$route.path === '/login' || _vm.$route.path === '/email-recompose' || _vm.$route.path === '/recompose' || _vm.$route.path === '/resetpassword' || _vm.$route.path === '/error') {
+ count = 0;
+ localStorage.setItem('count', '0')
+ return
+ }
+ _vm.$store.dispatch('user/logout').then(res => {
+ window.location.href = `/login`
+ })
+
+ _vm.$alert(lang === 'zh' ? '由于您长时间未操作,为保护您的数据安全已强制将您下线,如果需要继续操作请重新登陆!' : 'No operation for a long time non-operation, you have been forced logout to protect data security. If continue to operate, please login again!', {
+ type: 'warning',
+ })
+ } : () => {}, process.env.VUE_APP_LOGOUT_FOR_TIME,
+ eval(process.env.VUE_APP_LOCK_FOR_PERMISSION) ? () => {
+ var lang = zzSessionStorage.getItem('lang')?zzSessionStorage.getItem('lang'):'zh'
+ if (_vm.$route.path === '/ReviewersResearchForm' || _vm.$route.path === '/ReviewersResearch' || _vm.$route.path === '/login' || _vm.$route.path === '/email-recompose' || _vm.$route.path === '/recompose' || _vm.$route.path === '/resetpassword' || _vm.$route.path === '/error') {
+ count = 0;
+ localStorage.setItem('count', '0')
+ if (_vm.$route.path === '/login') {
+ zzSessionStorage.removeItem('lastWorkbench')
+ zzSessionStorage.removeItem('isLock')
+ isLock = null
+ }
+ return
+ }
+ if (isOpen) {
+ return
+ }
+ isOpen = true
+ zzSessionStorage.setItem('isLock', 'true')
+ _vm.$msgbox({
+ title: lang === 'zh' ? '已锁定' : 'Locked',
+ confirmButtonText: lang === 'zh' ? '解锁' : 'Unlock',
+ showClose: false,
+ beforeClose: (action, instance, done) => {
+ if (action === 'confirm') {
+ if (!_vm.unlock.my_username) {
+ _vm.$alert(lang === 'zh' ? '请输入您的用户名解锁' : 'Please enter your user name to unlock.')
+ return
+ }
+ if (!_vm.unlock.my_password) {
+ _vm.$alert(lang === 'zh' ? '请输入您的密码解锁' : 'Please enter the correct password to unlock.')
+ return
+ }
+ var my_username = zzSessionStorage.getItem('my_username')
+ var my_password = zzSessionStorage.getItem('my_password')
+ if (md5(_vm.unlock.my_password) === my_password && my_username === _vm.unlock.my_username) {
+ _vm.$message.success(lang === 'zh' ? '解锁成功,请继续操作' : 'Unlocked successfully. Please continue operation.')
+ _vm.unlock = {
+ my_username: null,
+ my_password: null
+ }
+ isOpen = false
+ count = 0;
+ isLock = null
+ zzSessionStorage.removeItem('isLock')
+ localStorage.setItem('count', '0')
+ document.querySelector('#my_username').value = null
+ document.querySelector('#my_password').value = null
+ setTimeout(() => {
+ done()
+ }, 500)
+ } else {
+ _vm.$message.error(lang === 'zh' ? '请输入正确用户名密码' : 'Please enter the correct password.')
+ }
+ }
+ },
+ message: h('div', {} , [
+ h('el-form', {
+ props: { labelWidth: "80px" }
+ }, [
+ h('el-form-item', {
+ props: {label: lang === 'zh' ? '用户名' : 'User ID'},
+ }, [
+ h('input',{
+ props: {
+ value: _vm.unlock.my_username
+ },
+ attrs: {
+ id: 'my_username',
+ class: 'el-input__inner',
+ autocomplete: 'new-password'
+ },
+ on: {
+ change: (event) => {
+ _vm.unlock.my_username = event.target.value
+ },
+ input: (event) => {
+ _vm.unlock.my_username = event.target.value
+ }
+ }
+ })
+ ]),
+ h('el-form-item', {
+ props: {label: lang === 'zh' ? '密码' : 'Password'},
+ }, [
+ h('input', {
+ props: {
+ value: _vm.unlock.my_password
+ },
+ attrs: {
+ id: 'my_password',
+ class: 'el-input__inner',
+ type: 'password',
+ autocomplete: 'new-password'
+ },
+ on: {
+ change: (event) => {
+ _vm.unlock.my_password = event.target.value
+ },
+ input: (event) => {
+ _vm.unlock.my_password = event.target.value
+ }
+ }
+ })
+ ])
+ ])
+ ])
+ })
+ } : () => {}, process.env.VUE_APP_LOCK_FOR_TIME)
+}
+VueInit()
+
+
diff --git a/src/mixins/form.js b/src/mixins/form.js
new file mode 100644
index 0000000..e69de29
diff --git a/src/mixins/table.js b/src/mixins/table.js
new file mode 100644
index 0000000..fd35e75
--- /dev/null
+++ b/src/mixins/table.js
@@ -0,0 +1,23 @@
+/*
+ * 为table处理的mixins
+ * 列表页面中使用到多次复用的mixins
+ */
+const tableMixins = {
+ methods: {
+ handleSearch() {
+ this.searchData.PageIndex = 1
+ this.getList()
+ },
+ sortByColumn(column) {
+ if (column.order === 'ascending') {
+ this.searchData.Asc = true
+ } else {
+ this.searchData.Asc = false
+ }
+ this.searchData.SortField = column.prop
+ this.searchData.PageIndex = 1
+ this.getList()
+ }
+ }
+}
+export default tableMixins
diff --git a/src/permission.js b/src/permission.js
new file mode 100644
index 0000000..15327eb
--- /dev/null
+++ b/src/permission.js
@@ -0,0 +1,72 @@
+import router from './router'
+import store from './store'
+// import { Message } from 'element-ui'
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import { getToken } from '@/utils/auth'
+import getPageTitle from '@/utils/get-page-title'
+import { OSSclient } from './utils/oss'
+import Vue from 'vue'
+
+NProgress.configure({ showSpinner: false })
+
+const whiteList = ['/ReviewersResearch', '/login', '/error', '/resetpassword', '/recompose', '/email-recompose', '/trialStats', '/showdicom', '/imagesShare', '/audit', '/preview', '/researchLogin', '/blindResumeInfo', '/trialsResume', '/joinVerify', '/showNoneDicoms', '/noneDicomReading', '/clinicalData', '/readingDicoms', '/readingPage', '/visitDicomReview', '/visitNondicomReview', '/globalReview', '/adReview', '/oncologyReview', '/nonedicoms']
+
+router.beforeEach(async(to, from, next) => {
+ NProgress.start()
+ // 设置页面标题
+ // document.title = getPageTitle(to.meta.title)
+
+ // 确定用户是否已登录
+ const hasToken = getToken()
+ if (hasToken) {
+ if (to.path === '/login' || to.path === '/recompose' || to.path === '/email-recompose' || to.path === '/error' || to.path === '/ReviewersResearchForm' || to.path === '/ReviewersResearch') {
+ next()
+ NProgress.done()
+ } else {
+ if (!Vue.prototype.OSSclient) {
+ OSSclient()
+ }
+ const hasGetUserInfo = store.getters.name
+ if (hasGetUserInfo) {
+ next()
+ } else {
+ try {
+ // 获取用户信息
+ // OSSclient()
+ await store.dispatch('user/getInfo')
+ const accessRoutes = await store.dispatch('permission/generateRoutes')
+ router.addRoutes(accessRoutes)
+ next({ ...to, replace: true })
+ } catch (error) {
+ // 删除token并进入登录页面以重新登录
+ await store.dispatch('user/resetToken')
+ next(`/login?redirect=${to.path}`)
+ NProgress.done()
+ }
+ }
+ }
+ } else {
+ /* has no token*/
+ if (whiteList.indexOf(to.path) !== -1) {
+ // 在免登录whiteList中,直接进入
+ next()
+ } else {
+ if (to.path === '/researchForm') {
+ next(`/researchLogin?`)
+ NProgress.done()
+ } else if (to.path === '/ReviewersResearchForm') {
+ next(`/ReviewersResearch?`)
+ NProgress.done()
+ } else {
+ // 其他无权访问的页面将重定向到登录页面。
+ next(`/login?`)
+ NProgress.done()
+ }
+ }
+ }
+})
+
+router.afterEach(() => {
+ NProgress.done()
+})
diff --git a/src/router/index.js b/src/router/index.js
new file mode 100644
index 0000000..9ec8cf5
--- /dev/null
+++ b/src/router/index.js
@@ -0,0 +1,273 @@
+import Vue from 'vue'
+import Router from 'vue-router'
+
+Vue.use(Router)
+
+/* Layout */
+import Layout from '@/layout'
+
+/* Router Modules */
+/**
+ * Note: 子菜单仅在路由children.length> = 1时出现
+ *
+ * hidden: true 如果设置为true,则项目不会显示在左侧菜单栏中(默认为false)
+ * alwaysShow: true 如果设置为true,将始终显示根菜单
+ * 如果未设置alwaysShow,则当项具有多个子路由时,它将变为嵌套模式,否则不显示根菜单
+ * redirect: noRedirect 如果设置noRedirect,则不会在面包屑中重定向
+ * name:'router-name' 该名称由使用
+ * meta : {
+ title: 'title' 名称显示在侧边栏和面包屑中
+ icon: 'svg-name' 侧栏中的图标显示
+ breadcrumb: false 如果设置为false,则该项将隐藏在面包屑中(默认为true)
+ activeMenu: '/example/list' 如果设置了路径,则侧边栏将高亮显示此路径
+ }
+ */
+
+/**
+ * constantRoutes
+ * 没有权限要求的页面
+ * 所有角色都可访问
+ */
+export const constantRoutes = [
+ {
+ path: '/',
+ redirect: '/login',
+ hidden: true
+ },
+ {
+ path: '/redirect',
+ component: Layout,
+ hidden: true,
+ children: [
+ {
+ path: '/redirect/:path*',
+ component: () => import('@/views/redirect')
+ }
+ ]
+ },
+ {
+ path: '/login',
+ component: () => import('@/views/login/index'),
+ hidden: true
+ },
+ {
+ path: '/resetpassword',
+ component: () => import('@/views/forgetpassword/index'),
+ name: 'Resetpassword',
+ hidden: true
+ },
+ {
+ path: '/recompose',
+ component: () => import('@/views/recompose/index'),
+ name: 'Recompose',
+ hidden: true
+ },
+ {
+ path: '/email-recompose',
+ component: () => import('@/views/email-recompose/index'),
+ name: 'emailRecompose',
+ hidden: true
+ },
+ {
+ path: '/joinVerify',
+ component: () => import('@/views/joinVerify/index'),
+ name: 'joinVerify',
+ hidden: true
+ },
+ {
+ path: '/trialStats',
+ component: () => import('@/views/reviewers/trialStats'),
+ name: 'trialStats',
+ hidden: true
+ },
+ {
+ path: '/showdicom',
+ name: 'showdicoms',
+ hidden: true,
+ component: () => import('@/views/dicom-show/dicom-study')
+ },
+
+ // {
+ // path: '/showvisitdicoms',
+ // name: 'showvisitdicoms',
+ // hidden: true,
+ // component: () => import('@/views/dicom-show/dicom-visit')
+ // },
+ // {
+ // path: '/showseriesdicoms',
+ // name: 'showseriesdicoms',
+ // hidden: true,
+ // component: () => import('@/views/dicom-show/dicom-series')
+ // },
+ // {
+ // path: '/preview',
+ // name: 'previewDicoms',
+ // component: () => import('@/views/dicom-show/server-dicom-temporary'),
+ // hidden: true
+ // },
+
+ {
+ path: '/showNoneDicoms',
+ hidden: true,
+ component: () => import('@/views/none-dicom-show/index')
+ },
+ {
+ path: '/noneDicomReading',
+ name: 'noneDicomReading',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/reading/none-dicoms/index')
+ },
+ {
+ path: '/readingDicoms',
+ component: () => import('@/views/trials/trials-panel/reading/dicoms/index'),
+ hidden: true
+ },
+ {
+ path: '/nonedicoms',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/reading/dicoms/none-dicoms')
+ },
+ {
+ path: '/readingPage',
+ name: 'readingPage',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/reading/reading-page/index')
+ },
+
+ {
+ path: '/visitDicomReview',
+ name: 'visitDicomReview',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/reading/dicoms/index')
+ },
+ {
+ path: '/visitNondicomReview',
+ name: 'visitNondicomReview',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/reading/none-dicoms/index')
+ },
+ {
+ path: '/globalReview',
+ name: 'globalReview',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/reading/global-review/index')
+ },
+ {
+ path: '/adReview',
+ name: 'adReview',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/reading/ad-review/index')
+ },
+ {
+ path: '/oncologyReview',
+ name: 'oncologyReview',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/reading/oncology-review/index')
+ },
+
+ {
+ path: '/imagesShare',
+ name: 'imagesShare',
+ component: () => import('@/views/share/images'),
+ hidden: true
+ },
+ {
+ path: '/clinicalData',
+ name: 'clinicalData',
+ component: () => import('@/views/trials/trials-panel/clinical-data/index'),
+ hidden: true
+ },
+ {
+ path: '/researchLogin',
+ name: 'researchLogin',
+ component: () => import('@/views/research/login'),
+ hidden: true
+ },
+ {
+ path: '/researchForm',
+ name: 'researchForm',
+ component: () => import('@/views/research/form'),
+ hidden: true
+ },
+ {
+ path: '/trialsResume',
+ component: () => import('@/views/trials/trials-panel/enrolled-reviewers/resume/index'),
+ hidden: true
+ },
+ {
+ path: '/ReviewersResearch',
+ component: () => import('@/views/reviewers/ReviewersResearch'),
+ hidden: true
+ },
+ {
+ path: '/ReviewersResearchForm',
+ component: () => import('@/views/reviewers/ReviewersResearchForm'),
+ hidden: true
+ },
+ {
+ path: '/blindResumeInfo',
+ component: () => import('@/views/blindResumeInfo/index'),
+ hidden: true
+ },
+ {
+ path: '/showvisitdicoms',
+ name: 'showvisitdicoms',
+ hidden: true,
+ component: () => import('@/views/dicom-show/dicom-visit')
+ },
+ {
+ path: '/criterionquestions',
+ name: 'criterionquestions',
+ hidden: true,
+ component: () => import('@/views/trials/trials-panel/setting/reading-unit/preview')
+ },
+ // {
+ // path: '/audit',
+ // name: 'audit',
+ // component: () => import('@/views/trials/audit'),
+ // hidden: true
+ // },
+ {
+ path: '/error',
+ component: () => import('@/views/error'),
+ hidden: true
+ },
+ {
+ path: '/404',
+ component: () => import('@/views/404'),
+ hidden: true
+ },
+ {
+ path: '/editUser',
+ component: Layout,
+ redirect: '/editUser/baiscInfo',
+ hidden: true,
+ children: [{
+ path: 'baiscInfo',
+ name: 'BaiscInfo',
+ component: () => import('@/views/user/editInfo')
+ },
+ {
+ path: 'account',
+ name: 'Account',
+ component: () => import('@/views/user/account')
+ }
+ ]
+ }
+]
+
+const createRouter = () => new Router({
+ mode: 'history',
+ base: '/',
+ scrollBehavior: () => ({ y: 0 }),
+ routes: constantRoutes
+})
+
+const router = createRouter()
+
+export function resetRouter() {
+ const newRouter = createRouter()
+ router.matcher = newRouter.matcher // reset router
+}
+
+export default router
diff --git a/src/settings.js b/src/settings.js
new file mode 100644
index 0000000..63027ab
--- /dev/null
+++ b/src/settings.js
@@ -0,0 +1,23 @@
+// eslint-disable-next-line no-undef
+module.exports = {
+
+ title: 'IRCIS',
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否需要标签查看
+ */
+ tagsView: false,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否固定Header
+ */
+ fixedHeader: true,
+
+ /**
+ * @type {boolean} true | false
+ * @description 是否在侧边栏中显示Logo
+ */
+ sidebarLogo: false
+}
diff --git a/src/store/getters.js b/src/store/getters.js
new file mode 100644
index 0000000..817ebfa
--- /dev/null
+++ b/src/store/getters.js
@@ -0,0 +1,48 @@
+const getters = {
+ sidebar: state => state.app.sidebar,
+ device: state => state.app.device,
+ token: state => state.user.token,
+ name: state => state.user.name,
+ permissions: state => state.user.permissions,
+ tree: state => state.user.tree,
+ userName: state => state.user.userName,
+ userId: state => state.user.userId,
+ routes: state => state.permission.routes,
+ asyncRoutes: state => state.permission.addRoutes,
+ visitedViews: state => state.tagsView.visitedViews,
+ cachedViews: state => state.tagsView.cachedViews,
+ dictionaryList: state => state.global.dictionaryList,
+ hospitalList: state => state.global.hospitalList,
+ sponsorList: state => state.global.sponsorList,
+ croList: state => state.global.croList,
+ siteList: state => state.global.siteList,
+ noticeList: state => state.global.noticeList,
+ reviewersQuery: state => state.reviewer.reviewersQuery,
+ isEnglish: state => state.reviewer.isEnglish,
+ trialDetailActiveName: state => state.trials.trialDetailActiveName,
+ trialQuery: state => state.trials.trialQuery,
+ subjectQuery: state => state.trials.subjectQuery,
+ visitPlanQuery: state => state.trials.visitPlanQuery,
+ visitPointQuery: state => state.trials.visitPointQuery,
+ studyListQuery: state => state.trials.studyListQuery,
+ reviewerList: state => state.financials.reviewerList,
+ rankList: state => state.financials.rankList,
+ financialsActiveName: state => state.financials.financialsActiveName,
+ paymentQuery: state => state.financials.paymentQuery,
+ paymentHistoryQuery: state => state.financials.paymentHistoryQuery,
+ revenusQuery: state => state.financials.revenusQuery,
+ visitTaskList: state => state.reading.visitTaskList,
+ organList: state => state.reading.organList,
+ seriesStack: state => state.reading.seriesStack,
+ activeHangingAgreement: state => state.reading.activeHangingAgreement,
+ currentTaskId: state => state.reading.currentTaskId,
+ currentReadingTaskState: state => state.reading.currentReadingTaskState,
+ activeSeries: state => state.reading.activeSeries,
+ lastCanvasTaskId: state => state.reading.lastCanvasTaskId,
+ imageQuality: state => state.reading.imageQuality,
+ language: state => state.lang.language,
+ TotalNeedSignSystemDocCount: state => state.user.TotalNeedSignSystemDocCount,
+ TotalNeedSignTrialDocCount: state => state.user.TotalNeedSignTrialDocCount,
+ TrialStatusStr: state => state.user.TrialStatusStr
+}
+export default getters
diff --git a/src/store/index.js b/src/store/index.js
new file mode 100644
index 0000000..c0e0436
--- /dev/null
+++ b/src/store/index.js
@@ -0,0 +1,35 @@
+import Vue from 'vue'
+import Vuex from 'vuex'
+import getters from './getters'
+import app from './modules/app'
+import settings from './modules/settings'
+import user from './modules/user'
+import permission from './modules/permission'
+import tagsView from './modules/tagsView'
+import reviewer from './modules/reviewer'
+import global from './modules/global'
+import trials from './modules/trials'
+import financials from './modules/financials'
+import reading from './modules/reading'
+import lang from './modules/lang'
+
+Vue.use(Vuex)
+
+const store = new Vuex.Store({
+ modules: {
+ app,
+ settings,
+ user,
+ permission,
+ tagsView,
+ global,
+ reviewer,
+ trials,
+ financials,
+ reading,
+ lang
+ },
+ getters
+})
+
+export default store
diff --git a/src/store/modules/app.js b/src/store/modules/app.js
new file mode 100644
index 0000000..0807e2c
--- /dev/null
+++ b/src/store/modules/app.js
@@ -0,0 +1,46 @@
+const state = {
+ sidebar: {
+ opened: zzSessionStorage.getItem('sidebarStatus') ? !!+zzSessionStorage.getItem('sidebarStatus') : true,
+ withoutAnimation: false
+ },
+ device: 'desktop'
+}
+
+const mutations = {
+ TOGGLE_SIDEBAR: state => {
+ state.sidebar.opened = !state.sidebar.opened
+ state.sidebar.withoutAnimation = false
+ if (state.sidebar.opened) {
+ zzSessionStorage.setItem('sidebarStatus', 1)
+ } else {
+ zzSessionStorage.setItem('sidebarStatus', 0)
+ }
+ },
+ CLOSE_SIDEBAR: (state, withoutAnimation) => {
+ zzSessionStorage.setItem('sidebarStatus', 0)
+ state.sidebar.opened = false
+ state.sidebar.withoutAnimation = withoutAnimation
+ },
+ TOGGLE_DEVICE: (state, device) => {
+ state.device = device
+ }
+}
+
+const actions = {
+ toggleSideBar({ commit }) {
+ commit('TOGGLE_SIDEBAR')
+ },
+ closeSideBar({ commit }, { withoutAnimation }) {
+ commit('CLOSE_SIDEBAR', withoutAnimation)
+ },
+ toggleDevice({ commit }, device) {
+ commit('TOGGLE_DEVICE', device)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
diff --git a/src/store/modules/financials.js b/src/store/modules/financials.js
new file mode 100644
index 0000000..66dd4c4
--- /dev/null
+++ b/src/store/modules/financials.js
@@ -0,0 +1,81 @@
+import { getReviewerSelectList, getRankDic } from '@/api/financials'
+const getDefaultState = () => {
+ return {
+ reviewerList: {},
+ rankList: {},
+ financialsActiveName: 'MonthlyPayment',
+ paymentQuery: null,
+ paymentHistoryQuery: null,
+ revenusQuery: null
+ }
+}
+const state = getDefaultState()
+const mutations = {
+ RESET_FINANCIALS: (state) => {
+ Object.assign(state, getDefaultState())
+ },
+ SET_REVIEWER: (state, reviewerList) => {
+ state.reviewerList = reviewerList
+ },
+ SET_RANK: (state, rankList) => {
+ state.rankList = rankList
+ },
+ SET_ACTIVENAME: (state, activeName) => {
+ state.financialsActiveName = activeName
+ },
+ SET_PAYMENTQUERYPARAM: (state, query) => {
+ state.paymentQuery = query
+ },
+ SET_PAYMENTHISTORYQUERYPARAM: (state, query) => {
+ state.paymentHistoryQuery = query
+ },
+ SET_REVENUSQUERYPARAM: (state, query) => {
+ state.revenusQuery = query
+ }
+}
+const actions = {
+ getReviewer({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getReviewerSelectList().then(response => {
+ if (response.IsSuccess) {
+ response.Result.forEach(element => {
+ element.info = `${element.FullName} (${element.Code})`
+ })
+ commit('SET_REVIEWER', response.Result)
+ resolve()
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ },
+ getRank({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getRankDic().then(response => {
+ if (response.IsSuccess) {
+ commit('SET_RANK', response.Result)
+ resolve()
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ },
+ setActiveName({ commit }, activeName) {
+ commit('SET_ACTIVENAME', activeName)
+ },
+ resetState({ commit }) {
+ commit('RESET_FINANCIALS')
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
diff --git a/src/store/modules/global.js b/src/store/modules/global.js
new file mode 100644
index 0000000..3c4ac99
--- /dev/null
+++ b/src/store/modules/global.js
@@ -0,0 +1,151 @@
+import { getAllDictionary, getHospitalList, getAllSponsorList, getAllCROList, getAllSiteList, getUserNoticeList } from '@/api/global'
+const getDefaultState = () => {
+ return {
+ dictionaryList: {},
+ hospitalList: {},
+ sponsorList: {},
+ croList: {},
+ siteList: {},
+ noticeList: JSON.parse(zzSessionStorage.getItem('noticeList'))
+ }
+}
+const state = getDefaultState()
+const mutations = {
+ RESET_GLOBAL: (state) => {
+ Object.assign(state, getDefaultState())
+ },
+ SET_DICTIONARY: (state, dictionaryList) => {
+ state.dictionaryList = dictionaryList
+ },
+ SET_HOSPITAL: (state, hospitalList) => {
+ state.hospitalList = hospitalList
+ },
+ SET_SPONSOR: (state, sponsorList) => {
+ state.sponsorList = sponsorList
+ },
+ SET_CRO: (state, croList) => {
+ state.croList = croList
+ },
+ SET_SITE: (state, siteList) => {
+ state.siteList = siteList
+ },
+ SET_NOTICE: (state, noticeList = []) => {
+ zzSessionStorage.setItem('noticeList', JSON.stringify(noticeList))
+ state.noticeList = noticeList
+ }
+}
+const actions = {
+ getDictionary({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getAllDictionary().then(response => {
+ if (response.IsSuccess) {
+ commit('SET_DICTIONARY', response.Result.DicList)
+ resolve(response.Result.DicList)
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ },
+ setDictionary({ commit }, dictionary) {
+ commit('SET_DICTIONARY', dictionary)
+ },
+
+ getHospital({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getHospitalList().then(response => {
+ if (response.IsSuccess) {
+ commit('SET_HOSPITAL', response.Result)
+ resolve(response.Result)
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ },
+ setHospital({ commit }, hospital) {
+ commit('SET_HOSPITAL', hospital)
+ },
+
+ getSponsorList({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getAllSponsorList().then(response => {
+ if (response.IsSuccess) {
+ commit('SET_SPONSOR', response.Result)
+ resolve(response.Result)
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ },
+ setSponsor({ commit }, sponsor) {
+ commit('SET_SPONSOR', sponsor)
+ },
+ getCROList({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getAllCROList().then(response => {
+ if (response.IsSuccess) {
+ commit('SET_CRO', response.Result)
+ resolve(response.Result)
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ },
+ setCRO({ commit }, cro) {
+ commit('SET_CRO', cro)
+ },
+ getSiteList({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getAllSiteList().then(response => {
+ if (response.IsSuccess) {
+ commit('SET_SITE', response.Result)
+ resolve(response.Result)
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ },
+ setSite({ commit }, site) {
+ commit('SET_SITE', site)
+ },
+ getNoticeList({ commit, state }) {
+ return new Promise((resolve, reject) => {
+ getUserNoticeList().then(response => {
+ if (response.IsSuccess) {
+ var noticeList = []
+ response.Result.forEach(el => {
+ noticeList.push({ Id: el.Id, Content: el.NoticeContent, NoticeTypeEnum: el.NoticeTypeEnum })
+ })
+
+ commit('SET_NOTICE', noticeList)
+ resolve(noticeList)
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
diff --git a/src/store/modules/lang.js b/src/store/modules/lang.js
new file mode 100644
index 0000000..12529d3
--- /dev/null
+++ b/src/store/modules/lang.js
@@ -0,0 +1,34 @@
+const getStorage = function(key) {
+ const str = zzSessionStorage.getItem(key)
+ // const str = localStorage.getItem(key)
+ if (!str) {
+ var lang = 'zh'
+ // localStorage.setItem(key, lang)
+ zzSessionStorage.setItem('lang', lang)
+ return lang
+ }
+ return str
+}
+const setLang = function(language) {
+ // const json = JSON.stringify(obj)
+ zzSessionStorage.setItem('lang', language)
+ // localStorage.setItem('lang', language)
+}
+const state = {
+ language: getStorage('lang')
+}
+
+const mutations = {
+
+ setLanguage: (state, language) => {
+ state.language = language
+ setLang(language)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations
+}
+
diff --git a/src/store/modules/permission.js b/src/store/modules/permission.js
new file mode 100644
index 0000000..aef32a5
--- /dev/null
+++ b/src/store/modules/permission.js
@@ -0,0 +1,132 @@
+import { constantRoutes } from '@/router'
+import Layout from '@/layout'
+import TrialsLayout from '@/views/trials/trials-layout'
+// 遍历后台传来的路由字符串,转换为组件对象
+function filterAsyncRouter(asyncRouterMap = [], lastRouter = false, type = false) {
+ return asyncRouterMap.filter(route => {
+ delete route.ParentId
+ delete route.MenuId
+ delete route.ApiPath
+ if (route.Redirect) {
+ route.redirect = route.Redirect
+ delete route.Redirect
+ }
+ if (route.IsInTabDisplay) {
+ route.tabHiddn = route.IsInTabDisplay
+ delete route.IsInTabDisplay
+ }
+ if (route.MenuName) {
+ route.name = route.MenuName
+ delete route.MenuName
+ }
+ if (route.IsDisplay) {
+ route.hidden = route.IsDisplay
+ delete route.IsDisplay
+ }
+ if (route.Path) {
+ route.path = route.Path
+ if (route.IsExternalLink && ~route.Path.indexOf('http')) {
+ route.path = route.Path
+ } else if (route.IsExternalLink) {
+ route.path = `${window.location.protocol}//${window.location.host}${route.Path}`
+ } else {
+ route.path = route.Path
+ }
+ delete route.Path
+ }
+ route.meta = { icon: route.MenuIcon }
+ if (route.Meta) {
+ // eslint-disable-next-line
+ route.meta = eval('(' + route.Meta + ')')
+ route.meta.icon = route.MenuIcon
+ delete route.Meta
+ }
+ delete route.MenuIcon
+ if (type && route.Children) {
+ route.children = filterChildren(route.Children)
+ }
+ // Layout ParentView 组件特殊处理
+ if (route.Component === '') {
+ if (route.name === 'Trials') {
+ route.component = TrialsLayout
+ } else {
+ route.component = Layout
+ }
+ } else {
+ route.component = loadView(route.Component)
+ }
+ delete route.Component
+ if (route.Children != null && route.Children && route.Children.length) {
+ route.children = filterAsyncRouter(route.Children, route, type)
+ delete route['Children']
+ } else {
+ delete route['Children']
+ delete route['redirect']
+ }
+ return true
+ })
+}
+
+function filterChildren(childrenMap, lastRouter = false) {
+ var children = []
+ childrenMap.forEach((el, index) => {
+ if (el.children && el.children.length) {
+ if (el.component === 'ParentView' && !lastRouter) {
+ el.children.forEach(c => {
+ c.path = el.path + '/' + c.path
+ if (c.children && c.children.length) {
+ children = children.concat(filterChildren(c.children, c))
+ return
+ }
+ children.push(c)
+ })
+ return
+ }
+ }
+ if (lastRouter) {
+ el.path = lastRouter.path + '/' + el.path
+ }
+ children = children.concat(el)
+ })
+ return children
+}
+
+export const loadView = (view) => {
+ // if (process.env.NODE_ENV === 'development') {
+ return (resolve) => require([`@/${view}.vue`], resolve)
+ // } else {
+ // // 使用 import 实现生产环境的路由懒加载
+ // return () => import(`@/${view}`)
+ // }
+}
+
+const state = {
+ routes: [],
+ addRoutes: []
+}
+
+const mutations = {
+ SET_ROUTES: (state, routes) => {
+ state.addRoutes = routes
+ state.routes = constantRoutes.concat(routes)
+ // zzSessionStorage.setItem('Menus', JSON.stringify(state.routes))
+ }
+}
+
+const actions = {
+ generateRoutes({ commit }) {
+ return new Promise(resolve => {
+ var newTree = JSON.parse(zzSessionStorage.getItem('newTree'))
+ const sidebarRoutes = filterAsyncRouter(newTree || [])
+ commit('SET_ROUTES', sidebarRoutes)
+ resolve(sidebarRoutes)
+ })
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
diff --git a/src/store/modules/reading.js b/src/store/modules/reading.js
new file mode 100644
index 0000000..00610ce
--- /dev/null
+++ b/src/store/modules/reading.js
@@ -0,0 +1,821 @@
+import {
+ getRelatedVisitTask,
+ getTableAnswerRowInfoList,
+ getDicomReadingQuestionAnswer,
+ getReadingQuestionAndAnswer,
+ getReadingOrganList,
+ deleteCustomTag
+}
+ from '@/api/trials'
+import Vue from 'vue'
+import requestPoolManager from '@/utils/request-pool'
+import { getReadingVisitStudyList } from '@/api/trials'
+import { getCustomTag } from '@/api/reading'
+const hangingAgreement = [
+ { name: 'A', row: 1, col: 1 },
+ { name: 'A|A', row: 1, col: 2 },
+ { name: 'A|B', row: 1, col: 2 },
+ { name: 'A|A|A|A', row: 2, col: 2 }
+]
+const getDefaultState = () => {
+ return {
+ // visitTaskList: [],
+ visitTaskList: sessionStorage.getItem('visitTaskList') ? JSON.parse(sessionStorage.getItem('visitTaskList')) : [],
+ organList: [],
+ seriesStack: [],
+ activeHangingAgreement: hangingAgreement[0],
+ currentTaskId: '',
+ currentReadingTaskState: 2,
+ activeSeries: {},
+ lastCanvasTaskId: '',
+ imageQuality: null
+ }
+}
+function getQuestions(questions) {
+ questions.forEach(item => {
+ if (item.Type === 'table' && item.TableQuestions && item.TableQuestions.Answers.length > 0) {
+ item.TableQuestions.Answers.forEach(answerObj => {
+ answerObj.lesionPart = getQuestionAnswer(item.TableQuestions.Questions, 8, answerObj)
+ answerObj.loctation = getQuestionAnswer(item.TableQuestions.Questions, 6, answerObj)
+ answerObj.lesionLength = getQuestionAnswer(item.TableQuestions.Questions, 0, answerObj)
+ answerObj.lesionShort = getQuestionAnswer(item.TableQuestions.Questions, 1, answerObj)
+ answerObj.isDicomReading = answerObj.IsDicomReading === 'True'
+ var isLymphLesion = getQuestionAnswer(item.TableQuestions.Questions, 2, answerObj)
+ isLymphLesion = isLymphLesion ? parseInt(isLymphLesion) : null
+ answerObj.isLymphLesion = isLymphLesion
+ answerObj.lesionState = getQuestionAnswer(item.TableQuestions.Questions, 7, answerObj)
+ var lesionNum = getQuestionAnswer(item.TableQuestions.Questions, 11, answerObj)
+ answerObj.lesionNum = lesionNum
+ if (answerObj.RowId) {
+ var idx = item.TableQuestions.Questions.findIndex(i => i.QuestionMark === 11)
+ if (idx > -1) {
+ // pcwg
+ answerObj.saveTypeEnum = isNaN(parseInt(answerObj.lesionNum)) ? 1 : 2
+ } else {
+ answerObj.saveTypeEnum = isNaN(parseInt(answerObj.lesionState)) ? 1 : 2
+ }
+ } else {
+ answerObj.saveTypeEnum = 0
+ }
+ })
+ }
+ if (item.Childrens.length > 0) {
+ getQuestions(item.Childrens)
+ }
+ })
+ return questions
+}
+function findQuestionAndRemoveLesion(questions, obj) {
+ for (var i = 0; i < questions.length; i++) {
+ if (questions[i].Type === 'table' && questions[i].TableQuestions && (questions[i].LesionType === obj.lesionType) && questions[i].TableQuestions.Answers.length > 0) {
+ var idx = questions[i].TableQuestions.Answers.findIndex(i => String(i.RowIndex) === String(obj.rowIndex))
+ if (idx > -1) {
+ questions[i].TableQuestions.Answers.splice(idx, 1)
+ break
+ }
+ }
+ if (questions[i].Childrens.length > 0) {
+ findQuestionAndRemoveLesion(questions[i].Childrens, obj)
+ }
+ }
+ return questions
+}
+function findQuestionAndUpdateLesion(questions, obj) {
+ for (var i = 0; i < questions.length; i++) {
+ var item = questions[i]
+ if (item.Type === 'table' && item.Id === obj.questionId) {
+ var idx = item.TableQuestions.Answers.findIndex(i => i.RowIndex === obj.rowIndex)
+ item.TableQuestions.Answers[idx].isLymphLesion = obj.isLymphLesion
+ item.TableQuestions.Answers[idx].loctation = obj.lesionOrgan
+ item.TableQuestions.Answers[idx].lesionPart = obj.lesionPart
+ item.TableQuestions.Answers[idx].lesionLength = obj.lesionLength
+ item.TableQuestions.Answers[idx].lesionShort = obj.lesionShort
+ item.TableQuestions.Answers[idx].lesionNum = obj.lesionNum
+ item.TableQuestions.Answers[idx].saveTypeEnum = obj.saveTypeEnum
+ item.TableQuestions.Answers[idx].lesionState = obj.lesionState
+ for (const i in obj.anwsers) {
+ if (i === 'MeasureData' && obj.anwsers[i]) {
+ item.TableQuestions.Answers[idx].InstanceId = obj.anwsers[i].instanceId
+ item.TableQuestions.Answers[idx].SeriesId = obj.anwsers[i].seriesId
+ item.TableQuestions.Answers[idx][i] = JSON.stringify(obj.anwsers[i])
+ } else {
+ item.TableQuestions.Answers[idx][i] = String(obj.anwsers[i])
+ }
+ }
+ break
+ }
+ if (item.Childrens.length > 0) {
+ this.findQuestionAndUpdateLesion(item.Childrens, obj)
+ }
+ }
+ return questions
+}
+function findQuestionAndAddLesion(questions, obj) {
+ for (var i = 0; i < questions.length; i++) {
+ if (questions[i].Type === 'table' && questions[i].TableQuestions && (questions[i].LesionType === obj.lesionType)) {
+ var sourceObj = {}
+ questions[i].TableQuestions.Questions.forEach(item => {
+ sourceObj[item.Id] = ''
+ })
+ var targetObj = Object.assign(sourceObj, obj.lesionObj)
+ targetObj.IsCurrentTaskAdd = 'True'
+ questions[i].TableQuestions.Answers.push(targetObj)
+ break
+ }
+ if (questions[i].Childrens.length > 0) {
+ findQuestionAndAddLesion(questions[i].Childrens, obj)
+ }
+ }
+ return questions
+}
+function getQuestionAnswer(questions, questionMark, answers) {
+ var idx = questions.findIndex(i => i.QuestionMark === questionMark)
+ if (idx > -1) {
+ var questionId = questions[idx].Id
+ return answers[questionId]
+ } else {
+ return ''
+ }
+}
+
+const state = getDefaultState
+
+const mutations = {
+}
+
+const actions = {
+ getOrganInfo({ state }, visitTaskId) {
+ return new Promise(resolve => {
+ getReadingOrganList({ visitTaskId: visitTaskId }).then(res => {
+ state.organList = res.Result
+ sessionStorage.setItem('organList', state.organList.length > 0 ? JSON.stringify(state.organList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ })
+ },
+ getVisitTasks({ state }, visitTaskId) {
+ return new Promise(resolve => {
+ getRelatedVisitTask({ visitTaskId: visitTaskId }).then(res => {
+ res.Result.forEach(item => {
+ item.questionsInit = false
+ item.readingQuestionsInit = false
+ item.measureDataInit = false
+ item.IsInit = false
+ })
+ state.visitTaskList = res.Result
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ const currentTaskIdx = res.Result.findIndex(item => item.IsCurrentTask)
+ if (currentTaskIdx > -1) {
+ state.currentTaskId = res.Result[currentTaskIdx].VisitTaskId
+ state.currentReadingTaskState = res.Result[currentTaskIdx].ReadingTaskState
+ }
+ resolve()
+ }).catch(() => { resolve() })
+ })
+ },
+ resetVisitTasks({ state }) {
+ return new Promise(resolve => {
+ sessionStorage.setItem('visitTaskList', '')
+ state.visitTaskList = []
+ state.currentTaskId = ''
+ state.activeSeries = {}
+ state.lastCanvasTaskId = ''
+ state.imageQuality = null
+ resolve()
+ })
+ },
+ getMasterSeries({ state }, obj) {
+ return new Promise(resolve => {
+ var seriesInfo = {}
+ var i = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ getReadingVisitStudyList(obj.trialId, obj.visitId, obj.visitTaskId).then(res => {
+ var studyList = state.visitTaskList[i].StudyList
+ var idx = res.Result.findIndex(study => study.IsCriticalSequence)
+ if (idx > -1) {
+ var study = res.Result[idx]
+ seriesInfo.StudyId = study.StudyId
+ seriesInfo.StudyCode = study.StudyCode
+ seriesInfo.Modalities = study.Modalities
+ seriesInfo.SeriesCount = study.SeriesCount
+ seriesInfo.InstanceCount = study.InstanceCount
+ seriesInfo.InstanceCount = study.InstanceCount
+ seriesInfo.IsDicom = study.IsDicom
+ seriesInfo.PreviewImageCount = 0
+ seriesInfo.IsCriticalSequence = study.IsCriticalSequence
+ var seriesList = []
+ study.SeriesList.forEach((series, index) => {
+ const imageIds = []
+
+ series.InstancePathList.forEach((path) => {
+ imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${path}`)
+ })
+ seriesList.push({
+ isDicom: study.IsDicom,
+ imageIds: imageIds,
+ instanceList: series.InstanceList,
+ seriesId: series.Id,
+ imageIdIndex: 0,
+ seriesUid: series.SeriesInstanceUid,
+ seriesNumber: series.SeriesNumber,
+ sliceThickness: series.SliceThickness,
+ modality: series.Modality,
+ description: series.Description,
+ previewImageUrl: study.IsDicom ? series.ImageResizePath ? Vue.prototype.OSSclientConfig.basePath + series.ImageResizePath : `/api/series/preview/${series.Id}` : Vue.prototype.OSSclientConfig.basePath + `${series.NoneDicomFileFirstFile}`,
+ instanceCount: series.InstanceCount,
+ prefetchInstanceCount: series.InstanceCount,
+ loadStatus: true,
+ imageloadedArr: series.InstanceList,
+ studyId: study.StudyId,
+ studyIndex: 0,
+ seriesIndex: index,
+ taskBlindName: state.visitTaskList[i].TaskBlindName,
+ taskName: state.visitTaskList[i].TaskName,
+ visitTaskId: obj.visitTaskId,
+ readingTaskState: state.visitTaskList[i].ReadingTaskState,
+ isBaseLineTask: state.visitTaskList[i].IsBaseLineTask,
+ isCurrentTask: state.visitTaskList[i].IsCurrentTask,
+ isLoading: false,
+ isBeMark: series.IsBeMark
+ })
+ })
+ seriesInfo.SeriesList = seriesList
+
+ studyList.unshift(seriesInfo)
+ studyList.forEach((study, sIdx) => {
+ study.SeriesList.forEach(series => {
+ series.studyIndex = sIdx
+ })
+ })
+ }
+
+ state.visitTaskList[i].StudyList = studyList
+ resolve(seriesInfo)
+ }).catch(() => { resolve() })
+ })
+ },
+ getNextVisitTask({ state }, obj) {
+ return new Promise(resolve => {
+ getRelatedVisitTask({ visitTaskId: obj.visitTaskId }).then(res => {
+ state.visitTaskList.forEach(item => {
+ item.ReadingTaskState = 2
+ item.IsCurrentTask = false
+ })
+ var idx = res.Result.findIndex(item => item.IsCurrentTask === true)
+ if (idx > -1) {
+ var obj = res.Result[idx]
+ obj.questionsInit = false
+ obj.readingQuestionsInit = false
+ obj.measureDataInit = false
+ obj.studyListInit = false
+ obj.IsInit = false
+ obj.MeasureData = []
+ obj.Questions = []
+ obj.ReadingQuestions = []
+ obj.StudyList = []
+ var i = state.visitTaskList.findIndex(i => i.VisitId === res.Result[idx].VisitId)
+ if (i > -1) {
+ state.visitTaskList.splice(i, 1)
+ requestPoolManager.resetCachedTask()
+ }
+ state.visitTaskList.push(obj)
+ }
+
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ })
+ },
+ setVisitTaskReadingTaskState({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (index > -1) {
+ state.visitTaskList[index].ReadingTaskState = obj.readingTaskState
+ state.visitTaskList[index].StudyList.forEach(study => {
+ study.SeriesList.forEach(series => {
+ series.readingTaskState = obj.readingTaskState
+ })
+ })
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+
+ getDicomReadingQuestionAnswer({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (state.visitTaskList[index].questionsInit) {
+ resolve()
+ } else {
+ var params = {
+ trialId: obj.trialId,
+ visitTaskId: obj.visitTaskId
+ }
+ getDicomReadingQuestionAnswer(params).then(res => {
+ state.visitTaskList[index].Questions = res.Result
+ state.visitTaskList[index].questionsInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ }
+ })
+ },
+ refreshDicomReadingQuestionAnswer({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+
+ var params = {
+ trialId: obj.trialId,
+ visitTaskId: obj.visitTaskId
+ }
+ getDicomReadingQuestionAnswer(params).then(res => {
+ state.visitTaskList[index].Questions = res.Result
+ state.visitTaskList[index].questionsInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ })
+ },
+ getReadingQuestionAndAnswer({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (state.visitTaskList[index].readingQuestionsInit) {
+ resolve()
+ } else {
+ var params = {
+ trialId: obj.trialId,
+ visitTaskId: obj.visitTaskId
+ }
+ getReadingQuestionAndAnswer(params).then(res => {
+ var list = getQuestions(res.Result.SinglePage)
+ state.visitTaskList[index].ReadingQuestions = list
+ state.visitTaskList[index].readingQuestionsInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ }
+ })
+ },
+ refreshReadingQuestionAndAnswer({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ var params = {
+ trialId: obj.trialId,
+ visitTaskId: obj.visitTaskId
+ }
+ getReadingQuestionAndAnswer(params).then(res => {
+ var list = getQuestions(res.Result.SinglePage)
+ state.visitTaskList[index].ReadingQuestions = list
+ state.visitTaskList[index].readingQuestionsInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ })
+ },
+ setReadingQuestionAndAnswer({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (index > -1) {
+ state.visitTaskList[index].ReadingQuestions = obj.questions
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+ addReadingQuestionAndAnswer({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (index > -1) {
+ var questions = state.visitTaskList[index].ReadingQuestions
+ questions = findQuestionAndAddLesion(questions, obj)
+ state.visitTaskList[index].ReadingQuestions = questions
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+ updateReadingQuesstionAndAnswer({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (index > -1) {
+ var questions = state.visitTaskList[index].ReadingQuestions
+ questions = findQuestionAndUpdateLesion(questions, obj)
+ state.visitTaskList[index].ReadingQuestions = questions
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+ removeReadingQuestionAndAnswer({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (index > -1) {
+ var questions = state.visitTaskList[index].ReadingQuestions
+ questions = findQuestionAndRemoveLesion(questions, obj)
+ state.visitTaskList[index].ReadingQuestions = questions
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+
+ getMeasuredData({ state }, visitTaskId) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId)
+ if (state.visitTaskList[index].measureDataInit) {
+ resolve()
+ } else {
+ getTableAnswerRowInfoList(visitTaskId).then(res => {
+ var arr = []
+ res.Result.forEach(el => {
+ if (el.MeasureData) {
+ el.MeasureData = JSON.parse(el.MeasureData)
+
+ el.MeasureData.data.remark = el.OrderMarkName
+ }
+ arr.push(el)
+ })
+ state.visitTaskList[index].MeasureData = arr
+ state.visitTaskList[index].measureDataInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ }
+ })
+ },
+ refreshMeasuredData({ state }, visitTaskId) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId)
+
+ getTableAnswerRowInfoList(visitTaskId).then(res => {
+ var arr = []
+ res.Result.forEach(el => {
+ if (el.MeasureData) {
+ el.MeasureData = JSON.parse(el.MeasureData)
+
+ el.MeasureData.data.remark = el.OrderMarkName
+ }
+ arr.push(el)
+ })
+ state.visitTaskList[index].MeasureData = arr
+ state.visitTaskList[index].measureDataInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ })
+ },
+ getNoneDicomMeasuredData({ state }, visitTaskId) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId)
+ var measureData = state.visitTaskList[index].MeasureData
+ var noneDicomMeasureData = measureData.filter(item => !item.IsDicomReading)
+ resolve(noneDicomMeasureData)
+ })
+ },
+ getCustomizeMeasuredData({ state }, visitTaskId) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId)
+ if (state.visitTaskList[index].measureDataInit) {
+ resolve()
+ } else {
+ getCustomTag({ visitTaskId: visitTaskId }).then(res => {
+ var arr = []
+ console.log(res.Result)
+ res.Result.forEach(el => {
+ if (el.MeasureData) {
+ el.MeasureData = JSON.parse(el.MeasureData)
+ }
+ arr.push(el)
+ })
+ state.visitTaskList[index].MeasureData = arr
+ state.visitTaskList[index].measureDataInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ }
+ })
+ },
+ removeCustomizeMeasuredData({ state }, obj) {
+ return new Promise(async resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ var measureData = state.visitTaskList[index].MeasureData
+
+ // var uuid = obj.measureData.data.uuid
+ // var idx = measureData.findIndex(item => item.MeasureData && item.MeasureData.data && item.MeasureData.data.uuid === uuid)
+ console.log(obj, measureData)
+ var idx = measureData.findIndex(item => item.Id === obj.questionInfo.Id)
+ console.log('idx', idx)
+ if (idx > -1) {
+ if (measureData[idx].FristAddTaskId) {
+ measureData[idx].MeasureData = ''
+ console.log('清除标记成功', idx)
+ } else {
+ measureData.splice(idx, 1)
+ console.log('移除标记成功', idx)
+ }
+ await deleteCustomTag(obj.questionInfo.Id)
+ state.visitTaskList[index].MeasureData = measureData
+ } else if (obj.orderMarkName) {
+ const i = measureData.findIndex(item => item.QuestionId === obj.questionId && item.OrderMarkName === obj.orderMarkName)
+ if (i > -1) {
+ if (measureData[i].FristAddTaskId) {
+ measureData[i].MeasureData = ''
+ console.log('清除标记成功', i)
+ } else {
+ measureData.splice(i, 1)
+ console.log('移除标记成功', i)
+ }
+ }
+ await deleteCustomTag(obj.questionInfo.Id)
+ state.visitTaskList[index].MeasureData = measureData
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+ refreshCustomizeMeasuredData({ state }, visitTaskId) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === visitTaskId)
+ getCustomTag({ visitTaskId: visitTaskId }).then(res => {
+ var arr = []
+ console.log(res.Result)
+ res.Result.forEach(el => {
+ if (el.MeasureData) {
+ el.MeasureData = JSON.parse(el.MeasureData)
+ }
+ arr.push(el)
+ })
+ state.visitTaskList[index].MeasureData = arr
+ state.visitTaskList[index].measureDataInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ })
+ },
+ addCustomizeMeasuredData({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ var measureData = state.visitTaskList[index].MeasureData
+ console.log(measureData, obj)
+ // var idx = measureData.findIndex(item => item.MeasureData.uuid === obj.data.MeasureData.data.uuid)
+ if (!obj.questionInfo) {
+ state.visitTaskList[index].MeasureData.push({
+ MeasureData: obj,
+ SeriesId: obj.seriesId,
+ StudyId: obj.studyId,
+ InstanceId: obj.instanceId,
+ Id: obj.Id
+ })
+ console.log('新增标记成功')
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }
+ var idx = measureData.findIndex(item => item.Id === obj.questionInfo.Id)
+ if (idx > -1) {
+ for (const k in state.visitTaskList[index].MeasureData[idx]) {
+ if (k !== 'Id' && obj.MeasureData.data[k]) {
+ state.visitTaskList[index].MeasureData[idx][k] = obj.MeasureData.data[k]
+ }
+ }
+ // state.visitTaskList[index].MeasureData[idx].MeasureData = obj.data.MeasureData
+ console.log('更新标记成功', idx)
+ } else {
+ state.visitTaskList[index].MeasureData.push(obj.MeasureData.data)
+ console.log('新增标记成功')
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+ addMeasuredData({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ var measureData = state.visitTaskList[index].MeasureData
+ // var idx = measureData.findIndex(item => item.MeasureData.uuid === obj.data.MeasureData.data.uuid)
+ var idx = measureData.findIndex(item => item.QuestionId === obj.data.QuestionId && item.RowIndex === obj.data.RowIndex)
+ if (idx > -1) {
+ for (const k in state.visitTaskList[index].MeasureData[idx]) {
+ if (k !== 'Id' && obj.data[k]) {
+ state.visitTaskList[index].MeasureData[idx][k] = obj.data[k]
+ }
+ }
+
+ // state.visitTaskList[index].MeasureData[idx].MeasureData = obj.data.MeasureData
+ console.log('更新标记成功', idx)
+ } else {
+ state.visitTaskList[index].MeasureData.push(obj.data)
+ console.log('新增标记成功')
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+ removeMeasuredData({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ var measureData = state.visitTaskList[index].MeasureData
+
+ // var uuid = obj.measureData.data.uuid
+ // var idx = measureData.findIndex(item => item.MeasureData && item.MeasureData.data && item.MeasureData.data.uuid === uuid)
+ var idx = measureData.findIndex(item => item.QuestionId === obj.questionId && item.RowIndex === obj.rowIndex)
+ if (idx > -1) {
+ if (measureData[idx].FristAddTaskId) {
+ measureData[idx].MeasureData = ''
+ console.log('清除标记成功', idx)
+ } else {
+ measureData.splice(idx, 1)
+ console.log('移除标记成功', idx)
+ }
+ state.visitTaskList[index].MeasureData = measureData
+ } else if (obj.orderMarkName) {
+ const i = measureData.findIndex(item => item.QuestionId === obj.questionId && item.OrderMarkName === obj.orderMarkName)
+ if (i > -1) {
+ if (measureData[i].FristAddTaskId) {
+ measureData[i].MeasureData = ''
+ console.log('清除标记成功', i)
+ } else {
+ measureData.splice(i, 1)
+ console.log('移除标记成功', i)
+ }
+ }
+ state.visitTaskList[index].MeasureData = measureData
+ }
+ // if (idx > -1) {
+ // measureData.splice(idx, 1)
+
+ // state.visitTaskList[index].MeasureData = measureData
+ // console.log('移除标记成功', idx)
+ // } else if (obj.orderMarkName) {
+ // const i = measureData.findIndex(item => item.QuestionId === obj.questionId && item.OrderMarkName === obj.orderMarkName)
+ // measureData.splice(i, 1)
+
+ // state.visitTaskList[index].MeasureData = measureData
+ // }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+ updateMeasureDataStatus({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ var measureData = state.visitTaskList[index].MeasureData
+ var idx = measureData.findIndex(item => item.QuestionId === obj.questionId && item.RowIndex === obj.rowIndex)
+ if (idx > -1 && measureData[idx].MeasureData) {
+ measureData[idx].MeasureData.data.status = obj.status
+ state.visitTaskList[index].MeasureData = measureData
+ }
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ })
+ },
+ getStudyInfo({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (state.visitTaskList[index].studyListInit) {
+ resolve()
+ } else {
+ var studyList = []
+ // getVisitStudyList
+ // getReadingVisitStudyList
+ getReadingVisitStudyList(obj.trialId, obj.subjectVisitId, obj.visitTaskId).then(res => {
+ res.Result.forEach((study, studyIndex) => {
+ const data = {}
+ data.StudyId = study.StudyId
+ data.StudyCode = study.StudyCode
+ data.Modalities = study.Modalities
+ data.SeriesCount = study.SeriesCount
+ data.InstanceCount = study.InstanceCount
+ data.InstanceCount = study.InstanceCount
+ data.IsDicom = study.IsDicom
+ data.PreviewImageCount = 0
+ data.IsCriticalSequence = study.IsCriticalSequence
+ var seriesList = []
+ study.SeriesList.forEach((series, seriesIndex) => {
+ const imageIds = []
+ try {
+ // if (~window.location.href.indexOf('3c210000-3e2c-0016-4247-08dabf28e96b')) {
+ series.InstancePathList.forEach((path) => {
+ // var path = id.split('/')[id.split('/').length - 1]
+ imageIds.push(`wadouri:${localStorage.getItem('location') !== 'USA' ? Vue.prototype.OSSclientConfig.basePath : Vue.prototype.OSSclientConfig.basePath}${path}`)
+ })
+ // } else {
+ // series.InstanceList.forEach((id) => {
+ // imageIds.push(`wadouri:${process.env.VUE_APP_DICOM_PATH}/instance/content/${id}`)
+ // })
+ // }
+ } catch (e) {
+ console.log(e)
+ }
+ seriesList.push({
+ isDicom: study.IsDicom,
+ imageIds: imageIds,
+ instanceList: series.InstanceList,
+ seriesId: series.Id,
+ imageIdIndex: 0,
+ seriesUid: series.SeriesInstanceUid,
+ seriesNumber: series.SeriesNumber,
+ sliceThickness: series.SliceThickness,
+ modality: series.Modality,
+ description: series.Description,
+ previewImageUrl: study.IsDicom ? series.ImageResizePath ? Vue.prototype.OSSclientConfig.basePath + series.ImageResizePath : `/api/series/preview/${series.Id}` : Vue.prototype.OSSclientConfig.basePath + `${series.NoneDicomFileFirstFile}`,
+ instanceCount: series.InstanceCount,
+ prefetchInstanceCount: 0,
+ loadStatus: false,
+ imageloadedArr: [],
+ studyId: study.StudyId,
+ studyIndex: studyIndex,
+ seriesIndex: seriesIndex,
+ taskBlindName: state.visitTaskList[index].TaskBlindName,
+ taskName: state.visitTaskList[index].TaskName,
+ visitTaskId: obj.visitTaskId,
+ readingTaskState: state.visitTaskList[index].ReadingTaskState,
+ isBaseLineTask: state.visitTaskList[index].IsBaseLineTask,
+ isCurrentTask: state.visitTaskList[index].IsCurrentTask,
+ isLoading: false,
+ isBeMark: series.IsBeMark,
+ ww: series.WindowWidth,
+ wc: series.WindowCenter
+ })
+ })
+ data.SeriesList = seriesList
+ studyList.push(data)
+ })
+ state.visitTaskList[index].StudyList = studyList
+ state.visitTaskList[index].studyListInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ resolve()
+ }).catch(() => { resolve() })
+ }
+ })
+ },
+
+ updateStudyList({ state }, obj) {
+ return new Promise(resolve => {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ if (index > -1) {
+ var studyList = state.visitTaskList[index].StudyList || []
+ if (studyList) {
+ for (var i = 0; i < studyList.length; i++) {
+ for (var j = 0; j < studyList[i].SeriesList.length; j++) {
+ if (studyList[i].SeriesList[j].seriesUid === obj.seriesUid || !studyList[i].SeriesList[j].seriesUid) {
+ var idx = studyList[i].SeriesList[j].imageIds.findIndex(image => image === obj.imageId)
+ if (idx > -1 && studyList[i].SeriesList[j].imageloadedArr.indexOf(obj.imageId) < 0) {
+ ++studyList[i].SeriesList[j].prefetchInstanceCount
+ studyList[i].SeriesList[j].imageloadedArr.push(obj.imageId)
+ // studyList[i].SeriesList[j].isLoading = true
+ if (studyList[i].SeriesList[j].prefetchInstanceCount >= studyList[i].SeriesList[j].instanceCount) {
+ studyList[i].SeriesList[j].prefetchInstanceCount = studyList[i].SeriesList[j].instanceCount
+ // 设置当前序列状态为已下载完成
+ studyList[i].SeriesList[j].loadStatus = true
+ }
+ }
+ }
+ }
+ }
+ }
+ state.visitTaskList[index].StudyList = studyList
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ } else {
+ // console.log(obj)
+ }
+ resolve()
+ })
+ },
+ setStatus({ state }, obj) {
+ var index = state.visitTaskList.findIndex(i => i.VisitTaskId === obj.visitTaskId)
+ state.visitTaskList[index].IsInit = true
+ sessionStorage.setItem('visitTaskList', state.visitTaskList.length > 0 ? JSON.stringify(state.visitTaskList) : '')
+ },
+ setActiveSeries({ state }, series) {
+ return new Promise(resolve => {
+ state.activeSeries = series
+ resolve()
+ })
+ },
+ setLastCanvasTaskId({ state }, taskId) {
+ return new Promise(resolve => {
+ state.lastCanvasTaskId = taskId
+ resolve()
+ })
+ },
+ setCurrentReadingTaskState({ state }, readingTaskState) {
+ return new Promise(resolve => {
+ state.currentReadingTaskState = readingTaskState
+ resolve()
+ })
+ },
+ setSeriesStack({ state }, seriesStack) {
+ state.seriesStack = seriesStack
+ },
+ setImageQuality({ state }, imageQuality) {
+ state.imageQuality = isNaN(parseInt(imageQuality)) ? null : parseInt(imageQuality)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/src/store/modules/reviewer.js b/src/store/modules/reviewer.js
new file mode 100644
index 0000000..e61aff8
--- /dev/null
+++ b/src/store/modules/reviewer.js
@@ -0,0 +1,33 @@
+const getDefaultState = () => {
+ return {
+ reviewersQuery: null,
+ isEnglish: true
+ }
+}
+const state = getDefaultState
+
+const mutations = {
+ RESET_STATE: (state) => {
+ Object.assign(state, getDefaultState())
+ },
+ SET_QUERYPARAM: (state, query) => {
+ state.reviewersQuery = query
+ },
+ SET_ISENGLISH: (state, isEnglish) => {
+ state.isEnglish = isEnglish
+ }
+}
+
+const actions = {
+ resetState({ commit }) {
+ commit('RESET_STATE')
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/src/store/modules/settings.js b/src/store/modules/settings.js
new file mode 100644
index 0000000..9fdd82a
--- /dev/null
+++ b/src/store/modules/settings.js
@@ -0,0 +1,32 @@
+import defaultSettings from '@/settings'
+
+const { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings
+
+const state = {
+ showSettings: showSettings,
+ tagsView: tagsView,
+ fixedHeader: fixedHeader,
+ sidebarLogo: sidebarLogo
+}
+
+const mutations = {
+ CHANGE_SETTING: (state, { key, value }) => {
+ if (state.hasOwnProperty(key)) {
+ state[key] = value
+ }
+ }
+}
+
+const actions = {
+ changeSetting({ commit }, data) {
+ commit('CHANGE_SETTING', data)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/src/store/modules/tagsView.js b/src/store/modules/tagsView.js
new file mode 100644
index 0000000..57e7242
--- /dev/null
+++ b/src/store/modules/tagsView.js
@@ -0,0 +1,160 @@
+const state = {
+ visitedViews: [],
+ cachedViews: []
+}
+
+const mutations = {
+ ADD_VISITED_VIEW: (state, view) => {
+ if (state.visitedViews.some(v => v.path === view.path)) return
+ state.visitedViews.push(
+ Object.assign({}, view, {
+ title: view.meta.title || 'no-name'
+ })
+ )
+ },
+ ADD_CACHED_VIEW: (state, view) => {
+ if (state.cachedViews.includes(view.name)) return
+ if (!view.meta.noCache) {
+ state.cachedViews.push(view.name)
+ }
+ },
+
+ DEL_VISITED_VIEW: (state, view) => {
+ for (const [i, v] of state.visitedViews.entries()) {
+ if (v.path === view.path) {
+ state.visitedViews.splice(i, 1)
+ break
+ }
+ }
+ },
+ DEL_CACHED_VIEW: (state, view) => {
+ const index = state.cachedViews.indexOf(view.name)
+ index > -1 && state.cachedViews.splice(index, 1)
+ },
+
+ DEL_OTHERS_VISITED_VIEWS: (state, view) => {
+ state.visitedViews = state.visitedViews.filter(v => {
+ return v.meta.affix || v.path === view.path
+ })
+ },
+ DEL_OTHERS_CACHED_VIEWS: (state, view) => {
+ const index = state.cachedViews.indexOf(view.name)
+ if (index > -1) {
+ state.cachedViews = state.cachedViews.slice(index, index + 1)
+ } else {
+ // if index = -1, there is no cached tags
+ state.cachedViews = []
+ }
+ },
+
+ DEL_ALL_VISITED_VIEWS: state => {
+ // keep affix tags
+ const affixTags = state.visitedViews.filter(tag => tag.meta.affix)
+ state.visitedViews = affixTags
+ },
+ DEL_ALL_CACHED_VIEWS: state => {
+ state.cachedViews = []
+ },
+
+ UPDATE_VISITED_VIEW: (state, view) => {
+ for (let v of state.visitedViews) {
+ if (v.path === view.path) {
+ v = Object.assign(v, view)
+ break
+ }
+ }
+ }
+}
+
+const actions = {
+ addView({ dispatch }, view) {
+ dispatch('addVisitedView', view)
+ dispatch('addCachedView', view)
+ },
+ addVisitedView({ commit }, view) {
+ commit('ADD_VISITED_VIEW', view)
+ },
+ addCachedView({ commit }, view) {
+ commit('ADD_CACHED_VIEW', view)
+ },
+
+ delView({ dispatch, state }, view) {
+ return new Promise(resolve => {
+ dispatch('delVisitedView', view)
+ dispatch('delCachedView', view)
+ resolve({
+ visitedViews: [...state.visitedViews],
+ cachedViews: [...state.cachedViews]
+ })
+ })
+ },
+ delVisitedView({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_VISITED_VIEW', view)
+ resolve([...state.visitedViews])
+ })
+ },
+ delCachedView({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_CACHED_VIEW', view)
+ resolve([...state.cachedViews])
+ })
+ },
+
+ delOthersViews({ dispatch, state }, view) {
+ return new Promise(resolve => {
+ dispatch('delOthersVisitedViews', view)
+ dispatch('delOthersCachedViews', view)
+ resolve({
+ visitedViews: [...state.visitedViews],
+ cachedViews: [...state.cachedViews]
+ })
+ })
+ },
+ delOthersVisitedViews({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_OTHERS_VISITED_VIEWS', view)
+ resolve([...state.visitedViews])
+ })
+ },
+ delOthersCachedViews({ commit, state }, view) {
+ return new Promise(resolve => {
+ commit('DEL_OTHERS_CACHED_VIEWS', view)
+ resolve([...state.cachedViews])
+ })
+ },
+
+ delAllViews({ dispatch, state }, view) {
+ return new Promise(resolve => {
+ dispatch('delAllVisitedViews', view)
+ dispatch('delAllCachedViews', view)
+ resolve({
+ visitedViews: [...state.visitedViews],
+ cachedViews: [...state.cachedViews]
+ })
+ })
+ },
+ delAllVisitedViews({ commit, state }) {
+ return new Promise(resolve => {
+ commit('DEL_ALL_VISITED_VIEWS')
+ resolve([...state.visitedViews])
+ })
+ },
+ delAllCachedViews({ commit, state }) {
+ return new Promise(resolve => {
+ commit('DEL_ALL_CACHED_VIEWS')
+ resolve([...state.cachedViews])
+ })
+ },
+
+ updateVisitedView({ commit }, view) {
+ commit('UPDATE_VISITED_VIEW', view)
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
diff --git a/src/store/modules/trials.js b/src/store/modules/trials.js
new file mode 100644
index 0000000..5fd2c20
--- /dev/null
+++ b/src/store/modules/trials.js
@@ -0,0 +1,68 @@
+import { getSignText } from '@/api/trials'
+const getDefaultState = () => {
+ return {
+ trialDetailActiveName: '',
+ trialQuery: null,
+ subjectQuery: null,
+ visitPlanQuery: null,
+ visitPointQuery: null,
+ studyListQuery: null
+ }
+}
+
+const state = getDefaultState
+
+const mutations = {
+ RESET_TRIALS: (state) => {
+ Object.assign(state, getDefaultState())
+ },
+ SET_ACTIVENAME: (state, activeName) => {
+ state.trialDetailActiveName = activeName
+ },
+ SET_QUERYPARAM: (state, trialQuery) => {
+ state.trialQuery = trialQuery
+ },
+ SET_SUBJECTPARAM: (state, subjectQuery) => {
+ state.subjectQuery = subjectQuery
+ },
+ SET_VISITPLANPARAM: (state, visitPlanQuery) => {
+ state.visitPlanQuery = visitPlanQuery
+ },
+ SET_VISITPOINTPARAM: (state, visitPointQuery) => {
+ state.visitPointQuery = visitPointQuery
+ },
+ SET_STUDYLISTPARAM: (state, studyListQuery) => {
+ state.studyListQuery = studyListQuery
+ }
+}
+
+const actions = {
+ setActiveName({ commit }, activeName) {
+ commit('SET_ACTIVENAME', activeName)
+ },
+ resetState({ commit }) {
+ commit('RESET_TRIALS')
+ },
+ getSignInfo({ commit }, signInfo) {
+ const { signCode } = signInfo
+ return new Promise((resolve, reject) => {
+ getSignText(signCode).then(response => {
+ if (response.IsSuccess) {
+ resolve(response.Result)
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
new file mode 100644
index 0000000..6f3d378
--- /dev/null
+++ b/src/store/modules/user.js
@@ -0,0 +1,206 @@
+import { getToken, setToken, removeToken, setName, removeName } from '@/utils/auth'
+import { login, getUserMenuTree, getUserPermissions } from '@/api/user'
+
+import { resetRouter } from '@/router'
+import md5 from 'js-md5'
+const getDefaultState = () => {
+ return {
+ token: getToken(),
+ name: '',
+ userName: '',
+ userId: '',
+ avatar: '',
+ permissions: [],
+ tree: [],
+ /* eslint-disable */
+ TotalNeedSignSystemDocCount: eval(process.env.VUE_APP_WORD_FOR_PERMISSION) ? null : 0,
+ TotalNeedSignTrialDocCount: eval(process.env.VUE_APP_WORD_FOR_PERMISSION) ? null : 0,
+ TrialStatusStr: null,
+ isTestUser: false
+ }
+}
+
+const state = getDefaultState()
+
+const mutations = {
+ RESET_STATE: (state) => {
+ Object.assign(state, getDefaultState())
+ },
+ SET_TOKEN: (state, token) => {
+ zzSessionStorage.setItem('TokenKey', token)
+ // document.cookie = 'access_token=' + token + ';path=/'
+ state.token = token
+ },
+ SET_NAME: (state, name) => {
+ state.name = name
+ },
+ SET_USERNAME: (state, name) => {
+ state.userName = name
+ },
+ SET_TREE: (state, tree) => {
+ state.tree = tree
+ },
+ SET_PERMISSIONS: (state, permissions) => {
+ state.permissions = permissions
+ },
+ SET_AVATAR: (state, avatar) => {
+ state.avatar = avatar
+ },
+ SET_USERID: (state, id) => {
+ state.userId = id
+ },
+ SET_ISTESTUSER: (state, isTestUser) => {
+ state.isTestUser = eval(isTestUser)
+ },
+ SET_NEED_SIGN_SYSTEM_DOC_COUNT: (state, TotalNeedSignSystemDocCount) => {
+ /* eslint-disable */
+ if (eval(process.env.VUE_APP_WORD_FOR_PERMISSION) && !state.isTestUser) {
+ zzSessionStorage.setItem('TotalNeedSignSystemDocCount', TotalNeedSignSystemDocCount)
+ state.TotalNeedSignSystemDocCount = TotalNeedSignSystemDocCount
+ } else {
+ zzSessionStorage.setItem('TotalNeedSignSystemDocCount', 0)
+ state.TotalNeedSignSystemDocCount = 0
+ }
+ },
+ SET_NEED_SIGN_TRIALS_DOC_COUNT: (state, TotalNeedSignTrialDocCount) => {
+ if (eval(process.env.VUE_APP_WORD_FOR_PERMISSION) && !state.isTestUser) {
+ zzSessionStorage.setItem('TotalNeedSignTrialDocCount', TotalNeedSignTrialDocCount)
+ state.TotalNeedSignTrialDocCount = TotalNeedSignTrialDocCount
+ } else {
+ zzSessionStorage.setItem('TotalNeedSignTrialDocCount', 0)
+ state.TotalNeedSignTrialDocCount = 0
+ }
+ },
+ SET_TRIAL_STATUS_STR: (state, TrialStatusStr) => {
+ zzSessionStorage.setItem('TrialStatusStr', TrialStatusStr)
+ state.TrialStatusStr = TrialStatusStr
+ }
+}
+
+const actions = {
+ // user login
+ login({ commit }, userInfo) {
+ const { username, password } = userInfo
+ return new Promise((resolve, reject) => {
+ login({ UserName: username.trim(), Password: md5(password) }).then(async response => {
+ if (response.IsSuccess) {
+ zzSessionStorage.removeItem('lastWorkbench')
+ zzSessionStorage.setItem('my_username', username.trim())
+ zzSessionStorage.setItem('my_password', md5(password))
+ const data = response.Result
+ if (data.BasicInfo.IsFirstAdd) {
+ try {
+ zzSessionStorage.setItem('userId', data.BasicInfo.Id)
+ commit('SET_TOKEN', data.JWTStr)
+ setToken(data.JWTStr)
+ resolve(false)
+ } catch (e) {
+ console.log(e)
+ }
+ } else {
+ try {
+ zzSessionStorage.setItem('IsAdmin', data.BasicInfo.IsAdmin)
+ zzSessionStorage.setItem('IsReviewer', data.BasicInfo.IsReviewer)
+ zzSessionStorage.setItem('userName', data.BasicInfo.UserName)
+ commit('SET_TOKEN', data.JWTStr)
+ commit('SET_NAME', data.BasicInfo.RealName)
+ zzSessionStorage.setItem('isTestUser', data.BasicInfo.IsTestUser)
+ commit('SET_ISTESTUSER', data.BasicInfo.IsTestUser)
+ commit('SET_USERNAME', data.BasicInfo.UserName)
+ commit('SET_USERID', data.BasicInfo.Id)
+ setToken(data.JWTStr)
+ setName(data.BasicInfo.RealName)
+ const userString = decodeURIComponent(escape(window.atob(data.JWTStr.split('.')[1].replace(/-/g, '+').replace(/_/g, '/'))))
+ const user = JSON.parse(userString)
+ zzSessionStorage.setItem('userTypeShortName', user.userTypeShortName)
+ zzSessionStorage.setItem('userId', user.id)
+ zzSessionStorage.setItem('userTypeEnumInt', user.userTypeEnumInt)
+ var permissions = await getUserPermissions()
+ var menuTree = await getUserMenuTree()
+ commit('SET_TREE', menuTree.Result)
+ commit('SET_PERMISSIONS', permissions.Result)
+ zzSessionStorage.setItem('newTree', JSON.stringify(menuTree.Result))
+ zzSessionStorage.setItem('permissions', JSON.stringify(permissions.Result))
+ } catch (e) {
+ console.log(e)
+ }
+ resolve(response.Result)
+ }
+ } else {
+ reject(response.ErrorMessage)
+ }
+ }).catch(() => {
+ reject()
+ })
+ })
+ },
+ setTree({ commit }, tree) {
+ commit('SET_TREE', tree)
+ },
+ setPermissions({ commit }, permissions) {
+ commit('SET_PERMISSIONS', permissions)
+ },
+ setTotalNeedSignSystemDocCount({ commit }, TotalNeedSignSystemDocCount) {
+ commit('SET_NEED_SIGN_SYSTEM_DOC_COUNT', TotalNeedSignSystemDocCount)
+ },
+ setTotalNeedSignTrialDocCount({ commit }, TotalNeedSignTrialDocCount) {
+ commit('SET_NEED_SIGN_TRIALS_DOC_COUNT', TotalNeedSignTrialDocCount)
+ },
+ setTrialStatusStr({ commit }, TrialStatusStr) {
+ commit('SET_TRIAL_STATUS_STR', TrialStatusStr)
+ },
+ // get user info
+ getInfo({ commit, state }) {
+ const token = state.token
+ // 解析jwt
+ const userString = decodeURIComponent(escape(window.atob(token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/'))))
+ commit('SET_TREE', JSON.parse(zzSessionStorage.getItem('newTree')))
+ commit('SET_PERMISSIONS', JSON.parse(zzSessionStorage.getItem('permissions')))
+ commit('SET_ISTESTUSER', zzSessionStorage.getItem('isTestUser'))
+ const user = JSON.parse(userString)
+ commit('SET_NAME', user.realName)
+ commit('SET_USERID', user.id)
+ commit('SET_USERNAME', zzSessionStorage.getItem('userName'))
+ commit('SET_NEED_SIGN_SYSTEM_DOC_COUNT', parseInt(zzSessionStorage.getItem('TotalNeedSignSystemDocCount')))
+ commit('SET_NEED_SIGN_TRIALS_DOC_COUNT', parseInt(zzSessionStorage.getItem('TotalNeedSignTrialDocCount')))
+ console.log( zzSessionStorage.getItem('TotalNeedSignSystemDocCount'))
+ console.log( zzSessionStorage.getItem('TotalNeedSignTrialDocCount'))
+ zzSessionStorage.setItem('userName', user.name)
+ zzSessionStorage.setItem('userId', user.id)
+ zzSessionStorage.setItem('userTypeShortName', user.userTypeShortName)
+ zzSessionStorage.setItem('userTypeEnumInt', user.userTypeEnumInt)
+ return user
+ },
+ updateInfo({ commit, state }) {
+ commit('SET_NAME', zzSessionStorage.getItem('realName'))
+ },
+ // user logout
+ logout({ commit, state }) {
+ removeToken() // must remove token first
+ resetRouter()
+ removeName()
+ zzSessionStorage.clear()
+ commit('RESET_STATE')
+ },
+ setToken({ commit }, token) {
+ commit('SET_TOKEN', token)
+ },
+
+ // remove token
+ resetToken({ commit }) {
+ return new Promise(resolve => {
+ document.cookie = ''
+ removeToken() // must remove token first
+ commit('RESET_STATE')
+ resolve()
+ })
+ }
+}
+
+export default {
+ namespaced: true,
+ state,
+ mutations,
+ actions
+}
+
diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss
new file mode 100644
index 0000000..0062411
--- /dev/null
+++ b/src/styles/element-ui.scss
@@ -0,0 +1,49 @@
+// cover some element-ui styles
+
+.el-breadcrumb__inner,
+.el-breadcrumb__inner a {
+ font-weight: 400 !important;
+}
+
+.el-upload {
+ input[type="file"] {
+ display: none !important;
+ }
+}
+
+.el-upload__input {
+ display: none;
+}
+
+
+// to fixed https://github.com/ElemeFE/element/issues/2461
+.el-dialog {
+ transform: none;
+ left: 0;
+ position: relative;
+ margin: 0 auto;
+}
+
+// refine element ui upload
+.upload-container {
+ .el-upload {
+ width: 100%;
+
+ .el-upload-dragger {
+ width: 100%;
+ height: 200px;
+ }
+ }
+}
+
+// dropdown
+.el-dropdown-menu {
+ a {
+ display: block
+ }
+}
+
+// to fix el-date-picker css style
+.el-range-separator {
+ box-sizing: content-box;
+}
diff --git a/src/styles/index.scss b/src/styles/index.scss
new file mode 100644
index 0000000..2bb4686
--- /dev/null
+++ b/src/styles/index.scss
@@ -0,0 +1,280 @@
+@import "./variables.scss";
+@import "./mixin.scss";
+@import "./transition.scss";
+@import "./element-ui.scss";
+@import "./sidebar.scss";
+
+body {
+ height: 100%;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-font-smoothing: antialiased;
+ text-rendering: optimizeLegibility;
+ font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;
+ // font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;
+ // font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC",
+ // "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial,
+ // sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+ // font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif;
+}
+
+label {
+ font-weight: 500;
+}
+
+html {
+ height: 100%;
+ box-sizing: border-box;
+}
+
+#app {
+ height: 100%;
+}
+
+*,
+*:before,
+*:after {
+ box-sizing: inherit;
+}
+
+a:focus,
+a:active {
+ outline: none;
+}
+
+a,
+a:focus,
+a:hover {
+ cursor: pointer;
+ color: inherit;
+ text-decoration: none;
+}
+
+div:focus {
+ outline: none;
+}
+body .el-table th.gutter {
+ display: table-cell !important;
+}
+
+.clearfix {
+ &:after {
+ visibility: hidden;
+ display: block;
+ font-size: 0;
+ content: " ";
+ clear: both;
+ height: 0;
+ }
+}
+.el-loading-mask {
+ background-color: rgba(255, 255, 255, 0.5);
+}
+
+// main-container global css
+.app-container {
+ padding: 10px;
+ position: relative;
+ height: 100%;
+ overflow-y: auto;
+
+ .table-container {
+ height: calc(100% - 100px);
+ }
+ // .pagination-container{
+ // text-align: right;
+ // }
+ .form-container {
+ .title-wrapper {
+ position: relative;
+ height: 40px;
+ line-height: 40px;
+ background: #e4ebf1;
+ border-left: 3px solid #0fc8e0;
+ font-size: 13px;
+ margin-bottom: 10px;
+ p {
+ margin: 0;
+ padding-left: 5px;
+ }
+ .add {
+ position: absolute;
+ right: 10px;
+ top: 50%;
+ height: 30px;
+ margin-top: -15px;
+ }
+ }
+ .el-dialog__body {
+ padding: 0 10px;
+ }
+ .el-date-editor.el-input,
+ .el-date-editor.el-input__inner,
+ .el-select {
+ width: 100%;
+ }
+ }
+}
+.data-list {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ .toolbar {
+ display: flex;
+ }
+ .data-table {
+ flex: 1;
+ padding: 5px 0px;
+ }
+ .pagination {
+ height: 32px;
+ text-align: right;
+ }
+}
+
+.is-fullscreen{
+ .el-dialog__headerbtn{
+ top:10px;
+ font-size: 30px;
+ }
+ .el-dialog__body{
+ height: calc(100% - 70px);
+ padding: 0 20px;
+ .base-modal-body{
+ padding: 10px 20px;
+ height: 100%;
+ overflow-y: auto;
+ }
+ }
+ .el-dialog__footer{
+ padding: 10px;
+ }
+ .link-breadcrumb{
+ cursor: pointer;
+ color: #428bca;
+ }
+}
+
+.base-dialog-wrapper{
+ .el-dialog__header{
+ padding: 15px;
+ }
+ .base-dialog-body{
+ border: 1px solid #e0e0e0;
+ padding:10px;
+ max-height:600px;
+ overflow-y: auto;
+ }
+ .base-dialog-footer{
+ text-align:right;
+ margin-top:10px;
+ }
+ .el-dialog__body{
+ padding:10px;
+ }
+ .el-dialog__footer{
+ padding: 10px;
+ }
+}
+.el-descriptions{
+ box-sizing:border-box;
+ font-size:14px;
+ color:#303133
+}
+.el-descriptions__header{
+ display:flex;
+ justify-content:space-between;
+ align-items:center;
+ margin-bottom:20px
+}
+.el-descriptions__title{
+ font-size:16px;
+ font-weight:700
+}
+.el-descriptions__body{
+ color:#606266;
+ background-color:#fff
+}
+.el-descriptions__body .el-descriptions__table{
+ border-collapse:collapse;
+ width:100%;
+ table-layout:fixed
+}
+.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell{
+ box-sizing:border-box;
+ text-align:left;
+ font-weight:400;
+ line-height:1.5
+}
+.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-left{
+ text-align:left
+}
+.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-center{
+ text-align:center
+}
+.el-descriptions__body .el-descriptions__table .el-descriptions-item__cell.is-right{
+ text-align:right
+}
+.el-descriptions .is-bordered{
+ table-layout:auto
+}
+.el-descriptions .is-bordered .el-descriptions-item__cell{
+ border:1px solid #ebeef5;
+ padding:12px 10px
+}
+.el-descriptions :not(.is-bordered) .el-descriptions-item__cell{
+ padding-bottom:12px
+}
+.el-descriptions--medium.is-bordered .el-descriptions-item__cell{
+ padding:10px
+}
+.el-descriptions--medium:not(.is-bordered) .el-descriptions-item__cell{
+ padding-bottom:10px
+}
+.el-descriptions--small{
+ font-size:12px
+}
+.el-descriptions--small.is-bordered .el-descriptions-item__cell{
+ padding:8px 10px
+}
+.el-descriptions--small:not(.is-bordered) .el-descriptions-item__cell{
+ padding-bottom:8px
+}
+.el-descriptions--mini{
+ font-size:12px
+}
+.el-descriptions--mini.is-bordered .el-descriptions-item__cell{
+ padding:6px 10px
+}
+.el-descriptions--mini:not(.is-bordered) .el-descriptions-item__cell{
+ padding-bottom:6px
+}
+.el-descriptions-item{
+ vertical-align:top
+}
+.el-descriptions-item__container{
+ display:flex
+}
+.el-descriptions-item__container .el-descriptions-item__content,.el-descriptions-item__container .el-descriptions-item__label{
+ display:inline-flex;
+ align-items:baseline
+}
+.el-descriptions-item__container .el-descriptions-item__content{
+ flex:1
+}
+.el-descriptions-item__label.has-colon:after{
+ content:":";
+ position:relative;
+ top:-.5px
+}
+.el-descriptions-item__label.is-bordered-label{
+ font-weight:700;
+ color:#909399;
+ background:#fafafa
+}
+.el-descriptions-item__label:not(.is-bordered-label){
+ margin-right:10px
+}
+.el-descriptions-item__content{
+ word-break:break-word;
+ overflow-wrap:break-word
+}
diff --git a/src/styles/mixin.scss b/src/styles/mixin.scss
new file mode 100644
index 0000000..36b74bb
--- /dev/null
+++ b/src/styles/mixin.scss
@@ -0,0 +1,28 @@
+@mixin clearfix {
+ &:after {
+ content: "";
+ display: table;
+ clear: both;
+ }
+}
+
+@mixin scrollBar {
+ &::-webkit-scrollbar-track-piece {
+ background: #d3dce6;
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #99a9bf;
+ border-radius: 20px;
+ }
+}
+
+@mixin relative {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss
new file mode 100644
index 0000000..587dda0
--- /dev/null
+++ b/src/styles/sidebar.scss
@@ -0,0 +1,219 @@
+$menuText:#909399;
+$menuActiveText:#606266;
+$subMenuActiveText:#5a5c5f;
+
+$menuBg:#ebebeb;
+$menuHover:#dfdede;
+
+$subMenuBg:#e4e4e4;
+$subMenuHover:#dfdede;
+$sideBarWidth: 200px;
+#app {
+
+ .main-container {
+ min-height: 100%;
+ transition: margin-left .28s;
+ margin-left: $sideBarWidth;
+ position: relative;
+ }
+
+ .sidebar-container {
+ transition: width 0.28s;
+ width: $sideBarWidth !important;
+ background-color: $menuBg;
+ height: 100%;
+ position: fixed;
+ font-size: 0px;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 1001;
+ overflow: hidden;
+
+ // reset element-ui css
+ .horizontal-collapse-transition {
+ transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out;
+ }
+
+ .scrollbar-wrapper {
+ overflow-x: hidden !important;
+ }
+
+ .el-scrollbar__bar.is-vertical {
+ right: 0px;
+ }
+
+ .el-scrollbar {
+ height: 100%;
+ }
+
+ &.has-logo {
+ .el-scrollbar {
+ height: calc(100% - 50px);
+ }
+ }
+
+ .is-horizontal {
+ display: none;
+ }
+
+ a {
+ display: inline-block;
+ width: 100%;
+ overflow: hidden;
+ }
+
+ .svg-icon {
+ margin-right: 16px;
+ }
+
+ .el-menu {
+ border: none;
+ height: 100%;
+ width: 100% !important;
+ }
+
+ // menu hover
+ .submenu-title-noDropdown,
+ .el-submenu__title {
+ &:hover {
+ background-color: $menuHover !important;
+ }
+ }
+
+ .is-active>.el-submenu__title {
+ color: $subMenuActiveText !important;
+ }
+
+ & .nest-menu .el-submenu>.el-submenu__title,
+ & .el-submenu .el-menu-item {
+ min-width: $sideBarWidth !important;
+ background-color: $subMenuBg !important;
+
+ &:hover {
+ background-color: $subMenuHover !important;
+ }
+ }
+ }
+
+ .hideSidebar {
+ .sidebar-container {
+ width: 54px !important;
+ }
+
+ .main-container {
+ margin-left: 54px;
+ }
+
+ .submenu-title-noDropdown {
+ padding: 0 !important;
+ position: relative;
+
+ .el-tooltip {
+ padding: 0 !important;
+
+ .svg-icon {
+ margin-left: 20px;
+ }
+ }
+ }
+
+ .el-submenu {
+ overflow: hidden;
+
+ &>.el-submenu__title {
+ padding: 0 !important;
+
+ .svg-icon {
+ margin-left: 20px;
+ }
+
+ .el-submenu__icon-arrow {
+ display: none;
+ }
+ }
+ }
+
+ .el-menu--collapse {
+ .el-submenu {
+ &>.el-submenu__title {
+ &>span {
+ height: 0;
+ width: 0;
+ overflow: hidden;
+ visibility: hidden;
+ display: inline-block;
+ }
+ }
+ }
+ }
+ }
+
+ .el-menu--collapse .el-menu .el-submenu {
+ min-width: $sideBarWidth !important;
+ }
+
+ // mobile responsive
+ .mobile {
+ .main-container {
+ margin-left: 0px;
+ }
+
+ .sidebar-container {
+ transition: transform .28s;
+ width: $sideBarWidth !important;
+ }
+
+ &.hideSidebar {
+ .sidebar-container {
+ pointer-events: none;
+ transition-duration: 0.3s;
+ transform: translate3d(-$sideBarWidth, 0, 0);
+ }
+ }
+ }
+
+ .withoutAnimation {
+
+ .main-container,
+ .sidebar-container {
+ transition: none;
+ }
+ }
+}
+
+// when menu collapsed
+.el-menu--vertical {
+ &>.el-menu {
+ .svg-icon {
+ margin-right: 16px;
+ }
+ }
+
+ .nest-menu .el-submenu>.el-submenu__title,
+ .el-menu-item {
+ &:hover {
+ // you can use $subMenuHover
+ background-color: $menuHover !important;
+ }
+ }
+
+ // the scroll bar appears when the subMenu is too long
+ >.el-menu--popup {
+ max-height: 100vh;
+ overflow-y: auto;
+
+ &::-webkit-scrollbar-track-piece {
+ background: #d3dce6;
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ }
+
+ &::-webkit-scrollbar-thumb {
+ background: #99a9bf;
+ border-radius: 20px;
+ }
+ }
+}
diff --git a/src/styles/transition.scss b/src/styles/transition.scss
new file mode 100644
index 0000000..4cb27cc
--- /dev/null
+++ b/src/styles/transition.scss
@@ -0,0 +1,48 @@
+// global transition css
+
+/* fade */
+.fade-enter-active,
+.fade-leave-active {
+ transition: opacity 0.28s;
+}
+
+.fade-enter,
+.fade-leave-active {
+ opacity: 0;
+}
+
+/* fade-transform */
+.fade-transform-leave-active,
+.fade-transform-enter-active {
+ transition: all .5s;
+}
+
+.fade-transform-enter {
+ opacity: 0;
+ transform: translateX(-30px);
+}
+
+.fade-transform-leave-to {
+ opacity: 0;
+ transform: translateX(30px);
+}
+
+/* breadcrumb transition */
+.breadcrumb-enter-active,
+.breadcrumb-leave-active {
+ transition: all .5s;
+}
+
+.breadcrumb-enter,
+.breadcrumb-leave-active {
+ opacity: 0;
+ transform: translateX(20px);
+}
+
+.breadcrumb-move {
+ transition: all .5s;
+}
+
+.breadcrumb-leave-active {
+ position: absolute;
+}
diff --git a/src/styles/variables.scss b/src/styles/variables.scss
new file mode 100644
index 0000000..7cc8562
--- /dev/null
+++ b/src/styles/variables.scss
@@ -0,0 +1,34 @@
+// sidebar 灰白色
+$menuText:#909399;
+$menuActiveText:#606266;
+$subMenuActiveText:#5a5c5f;
+
+$menuBg:#ebebeb;
+$menuHover:#dfdede;
+
+$subMenuBg:#e4e4e4;
+$subMenuHover:#dfdede;
+
+// sidebar 墨绿色
+// $menuText:rgb(206, 203, 203);
+// $menuActiveText:#fff;
+// $subMenuActiveText:#fff;
+
+// $menuBg:#607D8B;
+// $menuHover:#698b9b;
+
+// $subMenuBg:#607D8B;
+// $subMenuHover:#698b9b;
+
+$sideBarWidth: 200px;
+
+:export {
+ menuText: $menuText;
+ menuActiveText: $menuActiveText;
+ subMenuActiveText: $subMenuActiveText;
+ menuBg: $menuBg;
+ menuHover: $menuHover;
+ subMenuBg: $subMenuBg;
+ subMenuHover: $subMenuHover;
+ sideBarWidth: $sideBarWidth;
+}
diff --git a/src/utils/auth.js b/src/utils/auth.js
new file mode 100644
index 0000000..d77acd1
--- /dev/null
+++ b/src/utils/auth.js
@@ -0,0 +1,45 @@
+
+
+export function getToken() {
+
+ return zzSessionStorage.getItem('TokenKey')
+}
+
+export function setToken(token) {
+
+ return zzSessionStorage.setItem('TokenKey', token)
+}
+
+export function removeToken() {
+
+ return zzSessionStorage.removeItem('TokenKey')
+}
+
+export function getName() {
+ return zzSessionStorage.getItem('Name')
+
+}
+
+export function setName(name) {
+ return zzSessionStorage.setItem('Name', name)
+
+}
+
+export function removeName() {
+ return zzSessionStorage.removeItem('Name')
+
+}
+
+export function getUserName() {
+ return zzSessionStorage.getItem('UserName')
+
+}
+export function setUserName(name) {
+ return zzSessionStorage.setItem('UserName', name)
+
+}
+
+export function removeUserName() {
+ return zzSessionStorage.removeItem('UserName')
+
+}
diff --git a/src/utils/dcmUpload/anonymization.js b/src/utils/dcmUpload/anonymization.js
new file mode 100644
index 0000000..6f9d30c
--- /dev/null
+++ b/src/utils/dcmUpload/anonymization.js
@@ -0,0 +1,68 @@
+import dicomParser from "dicom-parser";
+import dcmjs from './dcmjs'
+import {encoder} from "./encoder";
+
+export const anonymization = function (file, config) {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const reader = new FileReader()
+ let AnonymizeFixedList = config.AnonymizeFixedList
+ let AnonymizeNotFixedList = config.AnonymizeNotFixedList
+ let DicomStoreInfo = config.DicomStoreInfo
+ reader.onload = async (event) => {
+ let buffer = event.target.result
+ let data = dicomParser.parseDicom(new Uint8Array(buffer))
+ let pixelDataElement = data.elements.x7fe00010
+ let dataset = dcmjs.data.DicomMessage.readFile(buffer)
+ for (var i = 0; i < AnonymizeFixedList.length; i++) {
+ let AnonymizeFixed = AnonymizeFixedList[i]
+ if (dataset.dict[AnonymizeFixed.Group + AnonymizeFixed.Element]) {
+ dataset.dict[AnonymizeFixed.Group + AnonymizeFixed.Element].Value[0] = AnonymizeFixed.ReplaceValue
+ } else {
+ dataset.dict[AnonymizeFixed.Group + AnonymizeFixed.Element] = {
+ vr: AnonymizeFixed.ValueRepresentation,
+ Value: [
+ AnonymizeFixed.ReplaceValue
+ ]
+ }
+ }
+ }
+ for (var i = 0; i < AnonymizeNotFixedList.length; i++) {
+ let AnonymizeNotFixed = AnonymizeNotFixedList[i]
+ if (AnonymizeNotFixed.Group + AnonymizeNotFixed.Element === '00100020') {
+ console.log(`${DicomStoreInfo.TrialCode}_${DicomStoreInfo.SubjectCode}`)
+ if (dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element]) {
+ dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element].Value[0] = `${DicomStoreInfo.TrialCode}-${DicomStoreInfo.SubjectCode}`
+ } else {
+ dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element] = {
+ vr: AnonymizeNotFixed.ValueRepresentation,
+ Value: [
+ `${DicomStoreInfo.TrialCode}_${DicomStoreInfo.SubjectCode}`
+ ]
+ }
+ }
+ } else {
+ if (dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element]) {
+ dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element].Value[0] = DicomStoreInfo[AnonymizeNotFixed.ReplaceValue] ? DicomStoreInfo[AnonymizeNotFixed.ReplaceValue].toString() : ''
+ } else {
+ dataset.dict[AnonymizeNotFixed.Group + AnonymizeNotFixed.Element] = {
+ vr: AnonymizeNotFixed.ValueRepresentation,
+ Value: [
+ DicomStoreInfo[AnonymizeNotFixed.ReplaceValue]
+ ]
+ }
+ }
+ }
+ }
+ let newDicomFile = dataset.write()
+ const bufferArray = new Uint8Array(newDicomFile)
+ const blob = new Blob([bufferArray], { type: 'application/octet-stream' })
+ resolve({blob, pixelDataElement})
+ };
+ reader.readAsArrayBuffer(file);
+ } catch (e) {
+ console.log(e)
+ reject(e)
+ }
+ })
+}
diff --git a/src/utils/dcmUpload/dcmUpload.js b/src/utils/dcmUpload/dcmUpload.js
new file mode 100644
index 0000000..e217c4f
--- /dev/null
+++ b/src/utils/dcmUpload/dcmUpload.js
@@ -0,0 +1,43 @@
+import Vue from 'vue'
+import { encoder } from './encoder'
+import { anonymization } from './anonymization'
+export const dcmUpload = async function(name, file, config){
+ return new Promise(async resolve => {
+ try {
+ // let blob = await encoder(file)
+ // let blob = await fileToBlob(file)
+ let blob = await anonymization(file, config)
+ let res = await Vue.prototype.OSSclient.put(name, blob.blob)
+ resolve({
+ ...res,
+ image: blob.data
+ })
+ // let OSSclientA = await OSSclient
+ // let blob = await encoder(file)
+ // let res = await OSSclient.put(name, blob.blob)
+
+
+ } catch (e) {
+ resolve(false)
+ console.log(e)
+ }
+ })
+}
+function fileToBlob(file) {
+ // 创建 FileReader 对象
+ let reader = new FileReader();
+ return new Promise(resolve => {
+ // FileReader 添加 load 事件
+ reader.addEventListener('load', (e) => {
+ let blob;
+ if (typeof e.target.result === 'object') {
+ blob = new Blob([e.target.result])
+ } else {
+ blob = e.target.result
+ }
+ resolve(blob)
+ })
+ // FileReader 以 ArrayBuffer 格式 读取 File 对象中数据
+ reader.readAsArrayBuffer(file)
+ })
+}
diff --git a/src/utils/dcmUpload/dcmjs.js b/src/utils/dcmUpload/dcmjs.js
new file mode 100644
index 0000000..adb99a3
--- /dev/null
+++ b/src/utils/dcmUpload/dcmjs.js
@@ -0,0 +1,25001 @@
+(function (global, factory) {
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.dcmjs = {}));
+})(this, (function (exports) { 'use strict';
+
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
+
+ function getDefaultExportFromCjs (x) {
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
+ }
+
+ var lib = {exports: {}};
+
+ /*
+ Copyright © 2018 Andrew Powell
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of this Source Code Form.
+ */
+
+ const noop = () => {};
+ const levels = Symbol('log-levels');
+ const instance = Symbol('log-instance');
+
+ var MethodFactory_1 = class MethodFactory {
+ constructor(logger) {
+ this[instance] = logger;
+ this[levels] = {
+ TRACE: 0,
+ DEBUG: 1,
+ INFO: 2,
+ WARN: 3,
+ ERROR: 4,
+ SILENT: 5
+ };
+ }
+
+ get levels() {
+ return this[levels];
+ }
+
+ get logger() {
+ return this[instance];
+ }
+
+ set logger(logger) {
+ this[instance] = logger;
+ }
+
+ get methods() {
+ return Object.keys(this.levels)
+ .map((key) => key.toLowerCase())
+ .filter((key) => key !== 'silent');
+ }
+
+ // eslint-disable-next-line class-methods-use-this
+ bindMethod(obj, methodName) {
+ const method = obj[methodName];
+ if (typeof method.bind === 'function') {
+ return method.bind(obj);
+ }
+
+ try {
+ return Function.prototype.bind.call(method, obj);
+ } catch (e) {
+ // Missing bind shim or IE8 + Modernizr, fallback to wrapping
+ return function result() {
+ // eslint-disable-next-line prefer-rest-params
+ return Function.prototype.apply.apply(method, [obj, arguments]);
+ };
+ }
+ }
+
+ distillLevel(level) {
+ let result = level;
+
+ if (typeof result === 'string' && typeof this.levels[result.toUpperCase()] !== 'undefined') {
+ result = this.levels[result.toUpperCase()];
+ }
+
+ if (this.levelValid(result)) {
+ return result;
+ }
+
+ return false;
+ }
+
+ levelValid(level) {
+ if (typeof level === 'number' && level >= 0 && level <= this.levels.SILENT) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /**
+ * Build the best logging method possible for this env
+ * Wherever possible we want to bind, not wrap, to preserve stack traces.
+ * Since we're targeting modern browsers, there's no need to wait for the
+ * console to become available.
+ */
+ // eslint-disable-next-line class-methods-use-this
+ make(methodName) {
+ if (methodName === 'debug') {
+ // eslint-disable-next-line no-param-reassign
+ methodName = 'log';
+ }
+
+ /* eslint-disable no-console */
+ if (typeof console[methodName] !== 'undefined') {
+ return this.bindMethod(console, methodName);
+ } else if (typeof console.log !== 'undefined') {
+ return this.bindMethod(console, 'log');
+ }
+
+ /* eslint-enable no-console */
+ return noop;
+ }
+
+ replaceMethods(logLevel) {
+ const level = this.distillLevel(logLevel);
+
+ if (level == null) {
+ throw new Error(`loglevelnext: replaceMethods() called with invalid level: ${logLevel}`);
+ }
+
+ if (!this.logger || this.logger.type !== 'LogLevel') {
+ throw new TypeError(
+ 'loglevelnext: Logger is undefined or invalid. Please specify a valid Logger instance.'
+ );
+ }
+
+ this.methods.forEach((methodName) => {
+ const { [methodName.toUpperCase()]: methodLevel } = this.levels;
+
+ this.logger[methodName] = methodLevel < level ? noop : this.make(methodName);
+ });
+
+ // Define log.log as an alias for log.debug
+ this.logger.log = this.logger.debug;
+ }
+ };
+
+ /*
+ Copyright © 2018 Andrew Powell
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of this Source Code Form.
+ */
+
+ const MethodFactory$1 = MethodFactory_1;
+
+ const defaults$1 = {
+ level: (opts) => `[${opts.level}]`,
+ name: (opts) => opts.logger.name,
+ template: '{{time}} {{level}} ',
+ time: () => new Date().toTimeString().split(' ')[0]
+ };
+
+ var PrefixFactory_1 = class PrefixFactory extends MethodFactory$1 {
+ constructor(logger, options) {
+ super(logger);
+ this.options = Object.assign({}, defaults$1, options);
+ }
+
+ interpolate(level) {
+ return this.options.template.replace(/{{([^{}]*)}}/g, (stache, prop) => {
+ const fn = this.options[prop];
+
+ if (fn) {
+ return fn({ level, logger: this.logger });
+ }
+
+ return stache;
+ });
+ }
+
+ make(methodName) {
+ const og = super.make(methodName);
+
+ return (...args) => {
+ const output = this.interpolate(methodName);
+ const [first] = args;
+
+ if (typeof first === 'string') {
+ // eslint-disable-next-line no-param-reassign
+ args[0] = output + first;
+ } else {
+ args.unshift(output);
+ }
+
+ og(...args);
+ };
+ }
+ };
+
+ /*
+ Copyright © 2018 Andrew Powell
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of this Source Code Form.
+ */
+
+ const PrefixFactory = PrefixFactory_1;
+
+ const MethodFactory = MethodFactory_1;
+
+ const defaults = {
+ factory: null,
+ level: 'warn',
+ name: +new Date(),
+ prefix: null
+ };
+
+ var LogLevel_1 = class LogLevel {
+ constructor(options) {
+ // implement for some _very_ loose type checking. avoids getting into a
+ // circular require between MethodFactory and LogLevel
+ this.type = 'LogLevel';
+ this.options = Object.assign({}, defaults, options);
+ this.methodFactory = options.factory;
+
+ if (!this.methodFactory) {
+ const factory = options.prefix
+ ? new PrefixFactory(this, options.prefix)
+ : new MethodFactory(this);
+ this.methodFactory = factory;
+ }
+
+ if (!this.methodFactory.logger) {
+ this.methodFactory.logger = this;
+ }
+
+ this.name = options.name || '';
+
+ // this.level is a setter, do this after setting up the factory
+ this.level = this.options.level;
+ }
+
+ get factory() {
+ return this.methodFactory;
+ }
+
+ set factory(factory) {
+ // eslint-disable-next-line no-param-reassign
+ factory.logger = this;
+ this.methodFactory = factory;
+ this.methodFactory.replaceMethods(this.level);
+ }
+
+ disable() {
+ this.level = this.levels.SILENT;
+ }
+
+ enable() {
+ this.level = this.levels.TRACE;
+ }
+
+ get level() {
+ return this.currentLevel;
+ }
+
+ set level(logLevel) {
+ const level = this.methodFactory.distillLevel(logLevel);
+
+ if (level === false || level == null) {
+ throw new RangeError(`loglevelnext: setLevel() called with invalid level: ${logLevel}`);
+ }
+
+ this.currentLevel = level;
+ this.methodFactory.replaceMethods(level);
+
+ if (typeof console === 'undefined' && level < this.levels.SILENT) {
+ // eslint-disable-next-line no-console
+ console.warn('loglevelnext: console is undefined. The log will produce no output.');
+ }
+ }
+
+ get levels() {
+ // eslint-disable-line class-methods-use-this
+ return this.methodFactory.levels;
+ }
+ };
+
+ /*
+ Copyright © 2018 Andrew Powell
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of this Source Code Form.
+ */
+
+ (function (module) {
+ const LogLevel = LogLevel_1;
+ const MethodFactory = MethodFactory_1;
+ const PrefixFactory = PrefixFactory_1;
+
+ const factories = Symbol('log-factories');
+
+ class DefaultLogger extends LogLevel {
+ constructor() {
+ super({ name: 'default' });
+
+ this.cache = { default: this };
+ this[factories] = { MethodFactory, PrefixFactory };
+ }
+
+ get factories() {
+ return this[factories];
+ }
+
+ get loggers() {
+ return this.cache;
+ }
+
+ create(opts) {
+ let options;
+
+ if (typeof opts === 'string') {
+ options = { name: opts };
+ } else {
+ options = Object.assign({}, opts);
+ }
+
+ if (!options.id) {
+ options.id = options.name;
+ }
+
+ const { name, id } = options;
+ const defaults = { level: this.level };
+
+ if (typeof name !== 'string' || !name || !name.length) {
+ throw new TypeError('You must supply a name when creating a logger.');
+ }
+
+ let logger = this.cache[id];
+ if (!logger) {
+ logger = new LogLevel(Object.assign({}, defaults, options));
+ this.cache[id] = logger;
+ }
+ return logger;
+ }
+ }
+
+ module.exports = new DefaultLogger();
+
+ // TypeScript fix
+ module.exports.default = module.exports;
+ } (lib));
+
+ var libExports = lib.exports;
+ var loglevelnext = /*@__PURE__*/getDefaultExportFromCjs(libExports);
+
+ var log = loglevelnext.create("dcmjs");
+ /**
+ * A validation log shows issues with data validation, and not internal issues itself.
+ * This is validation.dcmjs to group the validation issues into a single validation set to allow
+ * turning validation on/off.
+ */
+
+ var validationLog = loglevelnext.create("validation.dcmjs");
+
+ /* eslint no-bitwise: 0 */
+ var BitArray = {
+ getBytesForBinaryFrame: getBytesForBinaryFrame,
+ pack: pack,
+ unpack: unpack
+ };
+
+ function getBytesForBinaryFrame(numPixels) {
+ // Check whether the 1-bit pixels exactly fit into bytes
+ var remainder = numPixels % 8; // Number of bytes that work on an exact fit
+
+ var bytesRequired = Math.floor(numPixels / 8); // Add one byte if we have a remainder
+
+ if (remainder > 0) {
+ bytesRequired++;
+ }
+
+ return bytesRequired;
+ }
+
+ function pack(pixelData) {
+ var numPixels = pixelData.length;
+ log.debug("numPixels: " + numPixels);
+ var length = getBytesForBinaryFrame(numPixels); //log.log('getBytesForBinaryFrame: ' + length);
+
+ var bitPixelData = new Uint8Array(length);
+ var bytePos = 0;
+
+ for (var i = 0; i < numPixels; i++) {
+ // Compute byte position
+ bytePos = Math.floor(i / 8);
+ var pixValue = pixelData[i] !== 0; //log.log('i: ' + i);
+ //log.log('pixValue: ' + pixValue);
+ //log.log('bytePos: ' + bytePos);
+
+ var bitPixelValue = pixValue << i % 8; //log.log('current bitPixelData: ' + bitPixelData[bytePos]);
+ //log.log('this bitPixelValue: ' + bitPixelValue);
+
+ bitPixelData[bytePos] |= bitPixelValue; //log.log('new bitPixelValue: ' + bitPixelData[bytePos]);
+ }
+
+ return bitPixelData;
+ } // convert a packed bitwise pixel array into a byte-per-pixel
+ // array with 255 corresponding to each set bit in the bit array
+
+
+ function unpack(bitPixelArray) {
+ var bitArray = new Uint8Array(bitPixelArray);
+ var byteArray = new Uint8Array(8 * bitArray.length);
+
+ for (var byteIndex = 0; byteIndex < byteArray.length; byteIndex++) {
+ var bitIndex = byteIndex % 8;
+ var bitByteIndex = Math.floor(byteIndex / 8);
+ byteArray[byteIndex] = 255 * ((bitArray[bitByteIndex] & 1 << bitIndex) >> bitIndex);
+ }
+
+ return byteArray;
+ }
+
+ function ownKeys(object, enumerableOnly) {
+ var keys = Object.keys(object);
+
+ if (Object.getOwnPropertySymbols) {
+ var symbols = Object.getOwnPropertySymbols(object);
+ enumerableOnly && (symbols = symbols.filter(function (sym) {
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
+ })), keys.push.apply(keys, symbols);
+ }
+
+ return keys;
+ }
+
+ function _objectSpread2(target) {
+ for (var i = 1; i < arguments.length; i++) {
+ var source = null != arguments[i] ? arguments[i] : {};
+ i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
+ _defineProperty(target, key, source[key]);
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
+ });
+ }
+
+ return target;
+ }
+
+ function _typeof(obj) {
+ "@babel/helpers - typeof";
+
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
+ return typeof obj;
+ } : function (obj) {
+ return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ }, _typeof(obj);
+ }
+
+ function _classCallCheck(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+
+ function _defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+
+ function _createClass(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties(Constructor, staticProps);
+ Object.defineProperty(Constructor, "prototype", {
+ writable: false
+ });
+ return Constructor;
+ }
+
+ function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+ }
+
+ function _inherits(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ writable: true,
+ configurable: true
+ }
+ });
+ Object.defineProperty(subClass, "prototype", {
+ writable: false
+ });
+ if (superClass) _setPrototypeOf(subClass, superClass);
+ }
+
+ function _getPrototypeOf(o) {
+ _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
+ return o.__proto__ || Object.getPrototypeOf(o);
+ };
+ return _getPrototypeOf(o);
+ }
+
+ function _setPrototypeOf(o, p) {
+ _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
+ o.__proto__ = p;
+ return o;
+ };
+
+ return _setPrototypeOf(o, p);
+ }
+
+ function _isNativeReflectConstruct() {
+ if (typeof Reflect === "undefined" || !Reflect.construct) return false;
+ if (Reflect.construct.sham) return false;
+ if (typeof Proxy === "function") return true;
+
+ try {
+ Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }
+
+ function _construct(Parent, args, Class) {
+ if (_isNativeReflectConstruct()) {
+ _construct = Reflect.construct;
+ } else {
+ _construct = function _construct(Parent, args, Class) {
+ var a = [null];
+ a.push.apply(a, args);
+ var Constructor = Function.bind.apply(Parent, a);
+ var instance = new Constructor();
+ if (Class) _setPrototypeOf(instance, Class.prototype);
+ return instance;
+ };
+ }
+
+ return _construct.apply(null, arguments);
+ }
+
+ function _isNativeFunction(fn) {
+ return Function.toString.call(fn).indexOf("[native code]") !== -1;
+ }
+
+ function _wrapNativeSuper(Class) {
+ var _cache = typeof Map === "function" ? new Map() : undefined;
+
+ _wrapNativeSuper = function _wrapNativeSuper(Class) {
+ if (Class === null || !_isNativeFunction(Class)) return Class;
+
+ if (typeof Class !== "function") {
+ throw new TypeError("Super expression must either be null or a function");
+ }
+
+ if (typeof _cache !== "undefined") {
+ if (_cache.has(Class)) return _cache.get(Class);
+
+ _cache.set(Class, Wrapper);
+ }
+
+ function Wrapper() {
+ return _construct(Class, arguments, _getPrototypeOf(this).constructor);
+ }
+
+ Wrapper.prototype = Object.create(Class.prototype, {
+ constructor: {
+ value: Wrapper,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ return _setPrototypeOf(Wrapper, Class);
+ };
+
+ return _wrapNativeSuper(Class);
+ }
+
+ function _assertThisInitialized(self) {
+ if (self === void 0) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+
+ return self;
+ }
+
+ function _possibleConstructorReturn(self, call) {
+ if (call && (typeof call === "object" || typeof call === "function")) {
+ return call;
+ } else if (call !== void 0) {
+ throw new TypeError("Derived constructors may only return object or undefined");
+ }
+
+ return _assertThisInitialized(self);
+ }
+
+ function _createSuper(Derived) {
+ var hasNativeReflectConstruct = _isNativeReflectConstruct();
+
+ return function _createSuperInternal() {
+ var Super = _getPrototypeOf(Derived),
+ result;
+
+ if (hasNativeReflectConstruct) {
+ var NewTarget = _getPrototypeOf(this).constructor;
+
+ result = Reflect.construct(Super, arguments, NewTarget);
+ } else {
+ result = Super.apply(this, arguments);
+ }
+
+ return _possibleConstructorReturn(this, result);
+ };
+ }
+
+ function _superPropBase(object, property) {
+ while (!Object.prototype.hasOwnProperty.call(object, property)) {
+ object = _getPrototypeOf(object);
+ if (object === null) break;
+ }
+
+ return object;
+ }
+
+ function _get() {
+ if (typeof Reflect !== "undefined" && Reflect.get) {
+ _get = Reflect.get;
+ } else {
+ _get = function _get(target, property, receiver) {
+ var base = _superPropBase(target, property);
+
+ if (!base) return;
+ var desc = Object.getOwnPropertyDescriptor(base, property);
+
+ if (desc.get) {
+ return desc.get.call(arguments.length < 3 ? target : receiver);
+ }
+
+ return desc.value;
+ };
+ }
+
+ return _get.apply(this, arguments);
+ }
+
+ function _slicedToArray(arr, i) {
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
+ }
+
+ function _toConsumableArray(arr) {
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
+ }
+
+ function _arrayWithoutHoles(arr) {
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
+ }
+
+ function _arrayWithHoles(arr) {
+ if (Array.isArray(arr)) return arr;
+ }
+
+ function _iterableToArray(iter) {
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
+ }
+
+ function _iterableToArrayLimit(arr, i) {
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
+
+ if (_i == null) return;
+ var _arr = [];
+ var _n = true;
+ var _d = false;
+
+ var _s, _e;
+
+ try {
+ for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
+ _arr.push(_s.value);
+
+ if (i && _arr.length === i) break;
+ }
+ } catch (err) {
+ _d = true;
+ _e = err;
+ } finally {
+ try {
+ if (!_n && _i["return"] != null) _i["return"]();
+ } finally {
+ if (_d) throw _e;
+ }
+ }
+
+ return _arr;
+ }
+
+ function _unsupportedIterableToArray(o, minLen) {
+ if (!o) return;
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+ var n = Object.prototype.toString.call(o).slice(8, -1);
+ if (n === "Object" && o.constructor) n = o.constructor.name;
+ if (n === "Map" || n === "Set") return Array.from(o);
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+ }
+
+ function _arrayLikeToArray(arr, len) {
+ if (len == null || len > arr.length) len = arr.length;
+
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+
+ return arr2;
+ }
+
+ function _nonIterableSpread() {
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+
+ function _nonIterableRest() {
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+
+ function _createForOfIteratorHelper(o, allowArrayLike) {
+ var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
+
+ if (!it) {
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+ if (it) o = it;
+ var i = 0;
+
+ var F = function () {};
+
+ return {
+ s: F,
+ n: function () {
+ if (i >= o.length) return {
+ done: true
+ };
+ return {
+ done: false,
+ value: o[i++]
+ };
+ },
+ e: function (e) {
+ throw e;
+ },
+ f: F
+ };
+ }
+
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+
+ var normalCompletion = true,
+ didErr = false,
+ err;
+ return {
+ s: function () {
+ it = it.call(o);
+ },
+ n: function () {
+ var step = it.next();
+ normalCompletion = step.done;
+ return step;
+ },
+ e: function (e) {
+ didErr = true;
+ err = e;
+ },
+ f: function () {
+ try {
+ if (!normalCompletion && it.return != null) it.return();
+ } finally {
+ if (didErr) throw err;
+ }
+ }
+ };
+ }
+
+ /*! pako 2.0.4 https://github.com/nodeca/pako @license (MIT AND Zlib) */
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ /* eslint-disable space-unary-ops */
+
+ /* Public constants ==========================================================*/
+ /* ===========================================================================*/
+
+
+ //const Z_FILTERED = 1;
+ //const Z_HUFFMAN_ONLY = 2;
+ //const Z_RLE = 3;
+ const Z_FIXED$1 = 4;
+ //const Z_DEFAULT_STRATEGY = 0;
+
+ /* Possible values of the data_type field (though see inflate()) */
+ const Z_BINARY = 0;
+ const Z_TEXT = 1;
+ //const Z_ASCII = 1; // = Z_TEXT
+ const Z_UNKNOWN$1 = 2;
+
+ /*============================================================================*/
+
+
+ function zero$1(buf) { let len = buf.length; while (--len >= 0) { buf[len] = 0; } }
+
+ // From zutil.h
+
+ const STORED_BLOCK = 0;
+ const STATIC_TREES = 1;
+ const DYN_TREES = 2;
+ /* The three kinds of block type */
+
+ const MIN_MATCH$1 = 3;
+ const MAX_MATCH$1 = 258;
+ /* The minimum and maximum match lengths */
+
+ // From deflate.h
+ /* ===========================================================================
+ * Internal compression state.
+ */
+
+ const LENGTH_CODES$1 = 29;
+ /* number of length codes, not counting the special END_BLOCK code */
+
+ const LITERALS$1 = 256;
+ /* number of literal bytes 0..255 */
+
+ const L_CODES$1 = LITERALS$1 + 1 + LENGTH_CODES$1;
+ /* number of Literal or Length codes, including the END_BLOCK code */
+
+ const D_CODES$1 = 30;
+ /* number of distance codes */
+
+ const BL_CODES$1 = 19;
+ /* number of codes used to transfer the bit lengths */
+
+ const HEAP_SIZE$1 = 2 * L_CODES$1 + 1;
+ /* maximum heap size */
+
+ const MAX_BITS$1 = 15;
+ /* All codes must not exceed MAX_BITS bits */
+
+ const Buf_size = 16;
+ /* size of bit buffer in bi_buf */
+
+
+ /* ===========================================================================
+ * Constants
+ */
+
+ const MAX_BL_BITS = 7;
+ /* Bit length codes must not exceed MAX_BL_BITS bits */
+
+ const END_BLOCK = 256;
+ /* end of block literal code */
+
+ const REP_3_6 = 16;
+ /* repeat previous bit length 3-6 times (2 bits of repeat count) */
+
+ const REPZ_3_10 = 17;
+ /* repeat a zero length 3-10 times (3 bits of repeat count) */
+
+ const REPZ_11_138 = 18;
+ /* repeat a zero length 11-138 times (7 bits of repeat count) */
+
+ /* eslint-disable comma-spacing,array-bracket-spacing */
+ const extra_lbits = /* extra bits for each length code */
+ new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]);
+
+ const extra_dbits = /* extra bits for each distance code */
+ new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]);
+
+ const extra_blbits = /* extra bits for each bit length code */
+ new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]);
+
+ const bl_order =
+ new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);
+ /* eslint-enable comma-spacing,array-bracket-spacing */
+
+ /* The lengths of the bit length codes are sent in order of decreasing
+ * probability, to avoid transmitting the lengths for unused bit length codes.
+ */
+
+ /* ===========================================================================
+ * Local data. These are initialized only once.
+ */
+
+ // We pre-fill arrays with 0 to avoid uninitialized gaps
+
+ const DIST_CODE_LEN = 512; /* see definition of array dist_code below */
+
+ // !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1
+ const static_ltree = new Array((L_CODES$1 + 2) * 2);
+ zero$1(static_ltree);
+ /* The static literal tree. Since the bit lengths are imposed, there is no
+ * need for the L_CODES extra codes used during heap construction. However
+ * The codes 286 and 287 are needed to build a canonical tree (see _tr_init
+ * below).
+ */
+
+ const static_dtree = new Array(D_CODES$1 * 2);
+ zero$1(static_dtree);
+ /* The static distance tree. (Actually a trivial tree since all codes use
+ * 5 bits.)
+ */
+
+ const _dist_code = new Array(DIST_CODE_LEN);
+ zero$1(_dist_code);
+ /* Distance codes. The first 256 values correspond to the distances
+ * 3 .. 258, the last 256 values correspond to the top 8 bits of
+ * the 15 bit distances.
+ */
+
+ const _length_code = new Array(MAX_MATCH$1 - MIN_MATCH$1 + 1);
+ zero$1(_length_code);
+ /* length code for each normalized match length (0 == MIN_MATCH) */
+
+ const base_length = new Array(LENGTH_CODES$1);
+ zero$1(base_length);
+ /* First normalized length for each code (0 = MIN_MATCH) */
+
+ const base_dist = new Array(D_CODES$1);
+ zero$1(base_dist);
+ /* First normalized distance for each code (0 = distance of 1) */
+
+
+ function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {
+
+ this.static_tree = static_tree; /* static tree or NULL */
+ this.extra_bits = extra_bits; /* extra bits for each code or NULL */
+ this.extra_base = extra_base; /* base index for extra_bits */
+ this.elems = elems; /* max number of elements in the tree */
+ this.max_length = max_length; /* max bit length for the codes */
+
+ // show if `static_tree` has data or dummy - needed for monomorphic objects
+ this.has_stree = static_tree && static_tree.length;
+ }
+
+
+ let static_l_desc;
+ let static_d_desc;
+ let static_bl_desc;
+
+
+ function TreeDesc(dyn_tree, stat_desc) {
+ this.dyn_tree = dyn_tree; /* the dynamic tree */
+ this.max_code = 0; /* largest code with non zero frequency */
+ this.stat_desc = stat_desc; /* the corresponding static tree */
+ }
+
+
+
+ const d_code = (dist) => {
+
+ return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];
+ };
+
+
+ /* ===========================================================================
+ * Output a short LSB first on the stream.
+ * IN assertion: there is enough room in pendingBuf.
+ */
+ const put_short = (s, w) => {
+ // put_byte(s, (uch)((w) & 0xff));
+ // put_byte(s, (uch)((ush)(w) >> 8));
+ s.pending_buf[s.pending++] = (w) & 0xff;
+ s.pending_buf[s.pending++] = (w >>> 8) & 0xff;
+ };
+
+
+ /* ===========================================================================
+ * Send a value on a given number of bits.
+ * IN assertion: length <= 16 and value fits in length bits.
+ */
+ const send_bits = (s, value, length) => {
+
+ if (s.bi_valid > (Buf_size - length)) {
+ s.bi_buf |= (value << s.bi_valid) & 0xffff;
+ put_short(s, s.bi_buf);
+ s.bi_buf = value >> (Buf_size - s.bi_valid);
+ s.bi_valid += length - Buf_size;
+ } else {
+ s.bi_buf |= (value << s.bi_valid) & 0xffff;
+ s.bi_valid += length;
+ }
+ };
+
+
+ const send_code = (s, c, tree) => {
+
+ send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);
+ };
+
+
+ /* ===========================================================================
+ * Reverse the first len bits of a code, using straightforward code (a faster
+ * method would use a table)
+ * IN assertion: 1 <= len <= 15
+ */
+ const bi_reverse = (code, len) => {
+
+ let res = 0;
+ do {
+ res |= code & 1;
+ code >>>= 1;
+ res <<= 1;
+ } while (--len > 0);
+ return res >>> 1;
+ };
+
+
+ /* ===========================================================================
+ * Flush the bit buffer, keeping at most 7 bits in it.
+ */
+ const bi_flush = (s) => {
+
+ if (s.bi_valid === 16) {
+ put_short(s, s.bi_buf);
+ s.bi_buf = 0;
+ s.bi_valid = 0;
+
+ } else if (s.bi_valid >= 8) {
+ s.pending_buf[s.pending++] = s.bi_buf & 0xff;
+ s.bi_buf >>= 8;
+ s.bi_valid -= 8;
+ }
+ };
+
+
+ /* ===========================================================================
+ * Compute the optimal bit lengths for a tree and update the total bit length
+ * for the current block.
+ * IN assertion: the fields freq and dad are set, heap[heap_max] and
+ * above are the tree nodes sorted by increasing frequency.
+ * OUT assertions: the field len is set to the optimal bit length, the
+ * array bl_count contains the frequencies for each bit length.
+ * The length opt_len is updated; static_len is also updated if stree is
+ * not null.
+ */
+ const gen_bitlen = (s, desc) =>
+ // deflate_state *s;
+ // tree_desc *desc; /* the tree descriptor */
+ {
+ const tree = desc.dyn_tree;
+ const max_code = desc.max_code;
+ const stree = desc.stat_desc.static_tree;
+ const has_stree = desc.stat_desc.has_stree;
+ const extra = desc.stat_desc.extra_bits;
+ const base = desc.stat_desc.extra_base;
+ const max_length = desc.stat_desc.max_length;
+ let h; /* heap index */
+ let n, m; /* iterate over the tree elements */
+ let bits; /* bit length */
+ let xbits; /* extra bits */
+ let f; /* frequency */
+ let overflow = 0; /* number of elements with bit length too large */
+
+ for (bits = 0; bits <= MAX_BITS$1; bits++) {
+ s.bl_count[bits] = 0;
+ }
+
+ /* In a first pass, compute the optimal bit lengths (which may
+ * overflow in the case of the bit length tree).
+ */
+ tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */
+
+ for (h = s.heap_max + 1; h < HEAP_SIZE$1; h++) {
+ n = s.heap[h];
+ bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;
+ if (bits > max_length) {
+ bits = max_length;
+ overflow++;
+ }
+ tree[n * 2 + 1]/*.Len*/ = bits;
+ /* We overwrite tree[n].Dad which is no longer needed */
+
+ if (n > max_code) { continue; } /* not a leaf node */
+
+ s.bl_count[bits]++;
+ xbits = 0;
+ if (n >= base) {
+ xbits = extra[n - base];
+ }
+ f = tree[n * 2]/*.Freq*/;
+ s.opt_len += f * (bits + xbits);
+ if (has_stree) {
+ s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);
+ }
+ }
+ if (overflow === 0) { return; }
+
+ // Trace((stderr,"\nbit length overflow\n"));
+ /* This happens for example on obj2 and pic of the Calgary corpus */
+
+ /* Find the first bit length which could increase: */
+ do {
+ bits = max_length - 1;
+ while (s.bl_count[bits] === 0) { bits--; }
+ s.bl_count[bits]--; /* move one leaf down the tree */
+ s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */
+ s.bl_count[max_length]--;
+ /* The brother of the overflow item also moves one step up,
+ * but this does not affect bl_count[max_length]
+ */
+ overflow -= 2;
+ } while (overflow > 0);
+
+ /* Now recompute all bit lengths, scanning in increasing frequency.
+ * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all
+ * lengths instead of fixing only the wrong ones. This idea is taken
+ * from 'ar' written by Haruhiko Okumura.)
+ */
+ for (bits = max_length; bits !== 0; bits--) {
+ n = s.bl_count[bits];
+ while (n !== 0) {
+ m = s.heap[--h];
+ if (m > max_code) { continue; }
+ if (tree[m * 2 + 1]/*.Len*/ !== bits) {
+ // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits));
+ s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;
+ tree[m * 2 + 1]/*.Len*/ = bits;
+ }
+ n--;
+ }
+ }
+ };
+
+
+ /* ===========================================================================
+ * Generate the codes for a given tree and bit counts (which need not be
+ * optimal).
+ * IN assertion: the array bl_count contains the bit length statistics for
+ * the given tree and the field len is set for all tree elements.
+ * OUT assertion: the field code is set for all tree elements of non
+ * zero code length.
+ */
+ const gen_codes = (tree, max_code, bl_count) =>
+ // ct_data *tree; /* the tree to decorate */
+ // int max_code; /* largest code with non zero frequency */
+ // ushf *bl_count; /* number of codes at each bit length */
+ {
+ const next_code = new Array(MAX_BITS$1 + 1); /* next code value for each bit length */
+ let code = 0; /* running code value */
+ let bits; /* bit index */
+ let n; /* code index */
+
+ /* The distribution counts are first used to generate the code values
+ * without bit reversal.
+ */
+ for (bits = 1; bits <= MAX_BITS$1; bits++) {
+ next_code[bits] = code = (code + bl_count[bits - 1]) << 1;
+ }
+ /* Check that the bit counts in bl_count are consistent. The last code
+ * must be all ones.
+ */
+ //Assert (code + bl_count[MAX_BITS]-1 == (1< {
+
+ let n; /* iterates over tree elements */
+ let bits; /* bit counter */
+ let length; /* length value */
+ let code; /* code value */
+ let dist; /* distance index */
+ const bl_count = new Array(MAX_BITS$1 + 1);
+ /* number of codes at each bit length for an optimal tree */
+
+ // do check in _tr_init()
+ //if (static_init_done) return;
+
+ /* For some embedded targets, global variables are not initialized: */
+ /*#ifdef NO_INIT_GLOBAL_POINTERS
+ static_l_desc.static_tree = static_ltree;
+ static_l_desc.extra_bits = extra_lbits;
+ static_d_desc.static_tree = static_dtree;
+ static_d_desc.extra_bits = extra_dbits;
+ static_bl_desc.extra_bits = extra_blbits;
+ #endif*/
+
+ /* Initialize the mapping length (0..255) -> length code (0..28) */
+ length = 0;
+ for (code = 0; code < LENGTH_CODES$1 - 1; code++) {
+ base_length[code] = length;
+ for (n = 0; n < (1 << extra_lbits[code]); n++) {
+ _length_code[length++] = code;
+ }
+ }
+ //Assert (length == 256, "tr_static_init: length != 256");
+ /* Note that the length 255 (match length 258) can be represented
+ * in two different ways: code 284 + 5 bits or code 285, so we
+ * overwrite length_code[255] to use the best encoding:
+ */
+ _length_code[length - 1] = code;
+
+ /* Initialize the mapping dist (0..32K) -> dist code (0..29) */
+ dist = 0;
+ for (code = 0; code < 16; code++) {
+ base_dist[code] = dist;
+ for (n = 0; n < (1 << extra_dbits[code]); n++) {
+ _dist_code[dist++] = code;
+ }
+ }
+ //Assert (dist == 256, "tr_static_init: dist != 256");
+ dist >>= 7; /* from now on, all distances are divided by 128 */
+ for (; code < D_CODES$1; code++) {
+ base_dist[code] = dist << 7;
+ for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {
+ _dist_code[256 + dist++] = code;
+ }
+ }
+ //Assert (dist == 256, "tr_static_init: 256+dist != 512");
+
+ /* Construct the codes of the static literal tree */
+ for (bits = 0; bits <= MAX_BITS$1; bits++) {
+ bl_count[bits] = 0;
+ }
+
+ n = 0;
+ while (n <= 143) {
+ static_ltree[n * 2 + 1]/*.Len*/ = 8;
+ n++;
+ bl_count[8]++;
+ }
+ while (n <= 255) {
+ static_ltree[n * 2 + 1]/*.Len*/ = 9;
+ n++;
+ bl_count[9]++;
+ }
+ while (n <= 279) {
+ static_ltree[n * 2 + 1]/*.Len*/ = 7;
+ n++;
+ bl_count[7]++;
+ }
+ while (n <= 287) {
+ static_ltree[n * 2 + 1]/*.Len*/ = 8;
+ n++;
+ bl_count[8]++;
+ }
+ /* Codes 286 and 287 do not exist, but we must include them in the
+ * tree construction to get a canonical Huffman tree (longest code
+ * all ones)
+ */
+ gen_codes(static_ltree, L_CODES$1 + 1, bl_count);
+
+ /* The static distance tree is trivial: */
+ for (n = 0; n < D_CODES$1; n++) {
+ static_dtree[n * 2 + 1]/*.Len*/ = 5;
+ static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);
+ }
+
+ // Now data ready and we can init static trees
+ static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS$1 + 1, L_CODES$1, MAX_BITS$1);
+ static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES$1, MAX_BITS$1);
+ static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES$1, MAX_BL_BITS);
+
+ //static_init_done = true;
+ };
+
+
+ /* ===========================================================================
+ * Initialize a new block.
+ */
+ const init_block = (s) => {
+
+ let n; /* iterates over tree elements */
+
+ /* Initialize the trees. */
+ for (n = 0; n < L_CODES$1; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }
+ for (n = 0; n < D_CODES$1; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }
+ for (n = 0; n < BL_CODES$1; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }
+
+ s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;
+ s.opt_len = s.static_len = 0;
+ s.last_lit = s.matches = 0;
+ };
+
+
+ /* ===========================================================================
+ * Flush the bit buffer and align the output on a byte boundary
+ */
+ const bi_windup = (s) =>
+ {
+ if (s.bi_valid > 8) {
+ put_short(s, s.bi_buf);
+ } else if (s.bi_valid > 0) {
+ //put_byte(s, (Byte)s->bi_buf);
+ s.pending_buf[s.pending++] = s.bi_buf;
+ }
+ s.bi_buf = 0;
+ s.bi_valid = 0;
+ };
+
+ /* ===========================================================================
+ * Copy a stored block, storing first the length and its
+ * one's complement if requested.
+ */
+ const copy_block = (s, buf, len, header) =>
+ //DeflateState *s;
+ //charf *buf; /* the input data */
+ //unsigned len; /* its length */
+ //int header; /* true if block header must be written */
+ {
+ bi_windup(s); /* align on byte boundary */
+
+ if (header) {
+ put_short(s, len);
+ put_short(s, ~len);
+ }
+ // while (len--) {
+ // put_byte(s, *buf++);
+ // }
+ s.pending_buf.set(s.window.subarray(buf, buf + len), s.pending);
+ s.pending += len;
+ };
+
+ /* ===========================================================================
+ * Compares to subtrees, using the tree depth as tie breaker when
+ * the subtrees have equal frequency. This minimizes the worst case length.
+ */
+ const smaller = (tree, n, m, depth) => {
+
+ const _n2 = n * 2;
+ const _m2 = m * 2;
+ return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||
+ (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));
+ };
+
+ /* ===========================================================================
+ * Restore the heap property by moving down the tree starting at node k,
+ * exchanging a node with the smallest of its two sons if necessary, stopping
+ * when the heap property is re-established (each father smaller than its
+ * two sons).
+ */
+ const pqdownheap = (s, tree, k) =>
+ // deflate_state *s;
+ // ct_data *tree; /* the tree to restore */
+ // int k; /* node to move down */
+ {
+ const v = s.heap[k];
+ let j = k << 1; /* left son of k */
+ while (j <= s.heap_len) {
+ /* Set j to the smallest of the two sons: */
+ if (j < s.heap_len &&
+ smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {
+ j++;
+ }
+ /* Exit if v is smaller than both sons */
+ if (smaller(tree, v, s.heap[j], s.depth)) { break; }
+
+ /* Exchange v with the smallest son */
+ s.heap[k] = s.heap[j];
+ k = j;
+
+ /* And continue down the tree, setting j to the left son of k */
+ j <<= 1;
+ }
+ s.heap[k] = v;
+ };
+
+
+ // inlined manually
+ // const SMALLEST = 1;
+
+ /* ===========================================================================
+ * Send the block data compressed using the given Huffman trees
+ */
+ const compress_block = (s, ltree, dtree) =>
+ // deflate_state *s;
+ // const ct_data *ltree; /* literal tree */
+ // const ct_data *dtree; /* distance tree */
+ {
+ let dist; /* distance of matched string */
+ let lc; /* match length or unmatched char (if dist == 0) */
+ let lx = 0; /* running index in l_buf */
+ let code; /* the code to send */
+ let extra; /* number of extra bits to send */
+
+ if (s.last_lit !== 0) {
+ do {
+ dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);
+ lc = s.pending_buf[s.l_buf + lx];
+ lx++;
+
+ if (dist === 0) {
+ send_code(s, lc, ltree); /* send a literal byte */
+ //Tracecv(isgraph(lc), (stderr," '%c' ", lc));
+ } else {
+ /* Here, lc is the match length - MIN_MATCH */
+ code = _length_code[lc];
+ send_code(s, code + LITERALS$1 + 1, ltree); /* send the length code */
+ extra = extra_lbits[code];
+ if (extra !== 0) {
+ lc -= base_length[code];
+ send_bits(s, lc, extra); /* send the extra length bits */
+ }
+ dist--; /* dist is now the match distance - 1 */
+ code = d_code(dist);
+ //Assert (code < D_CODES, "bad d_code");
+
+ send_code(s, code, dtree); /* send the distance code */
+ extra = extra_dbits[code];
+ if (extra !== 0) {
+ dist -= base_dist[code];
+ send_bits(s, dist, extra); /* send the extra distance bits */
+ }
+ } /* literal or match pair ? */
+
+ /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */
+ //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,
+ // "pendingBuf overflow");
+
+ } while (lx < s.last_lit);
+ }
+
+ send_code(s, END_BLOCK, ltree);
+ };
+
+
+ /* ===========================================================================
+ * Construct one Huffman tree and assigns the code bit strings and lengths.
+ * Update the total bit length for the current block.
+ * IN assertion: the field freq is set for all tree elements.
+ * OUT assertions: the fields len and code are set to the optimal bit length
+ * and corresponding code. The length opt_len is updated; static_len is
+ * also updated if stree is not null. The field max_code is set.
+ */
+ const build_tree = (s, desc) =>
+ // deflate_state *s;
+ // tree_desc *desc; /* the tree descriptor */
+ {
+ const tree = desc.dyn_tree;
+ const stree = desc.stat_desc.static_tree;
+ const has_stree = desc.stat_desc.has_stree;
+ const elems = desc.stat_desc.elems;
+ let n, m; /* iterate over heap elements */
+ let max_code = -1; /* largest code with non zero frequency */
+ let node; /* new node being created */
+
+ /* Construct the initial heap, with least frequent element in
+ * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].
+ * heap[0] is not used.
+ */
+ s.heap_len = 0;
+ s.heap_max = HEAP_SIZE$1;
+
+ for (n = 0; n < elems; n++) {
+ if (tree[n * 2]/*.Freq*/ !== 0) {
+ s.heap[++s.heap_len] = max_code = n;
+ s.depth[n] = 0;
+
+ } else {
+ tree[n * 2 + 1]/*.Len*/ = 0;
+ }
+ }
+
+ /* The pkzip format requires that at least one distance code exists,
+ * and that at least one bit should be sent even if there is only one
+ * possible code. So to avoid special checks later on we force at least
+ * two codes of non zero frequency.
+ */
+ while (s.heap_len < 2) {
+ node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);
+ tree[node * 2]/*.Freq*/ = 1;
+ s.depth[node] = 0;
+ s.opt_len--;
+
+ if (has_stree) {
+ s.static_len -= stree[node * 2 + 1]/*.Len*/;
+ }
+ /* node is 0 or 1 so it does not have extra bits */
+ }
+ desc.max_code = max_code;
+
+ /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,
+ * establish sub-heaps of increasing lengths:
+ */
+ for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }
+
+ /* Construct the Huffman tree by repeatedly combining the least two
+ * frequent nodes.
+ */
+ node = elems; /* next internal node of the tree */
+ do {
+ //pqremove(s, tree, n); /* n = node of least frequency */
+ /*** pqremove ***/
+ n = s.heap[1/*SMALLEST*/];
+ s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];
+ pqdownheap(s, tree, 1/*SMALLEST*/);
+ /***/
+
+ m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */
+
+ s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */
+ s.heap[--s.heap_max] = m;
+
+ /* Create a new node father of n and m */
+ tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;
+ s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;
+ tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;
+
+ /* and insert the new node in the heap */
+ s.heap[1/*SMALLEST*/] = node++;
+ pqdownheap(s, tree, 1/*SMALLEST*/);
+
+ } while (s.heap_len >= 2);
+
+ s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];
+
+ /* At this point, the fields freq and dad are set. We can now
+ * generate the bit lengths.
+ */
+ gen_bitlen(s, desc);
+
+ /* The field len is now set, we can generate the bit codes */
+ gen_codes(tree, max_code, s.bl_count);
+ };
+
+
+ /* ===========================================================================
+ * Scan a literal or distance tree to determine the frequencies of the codes
+ * in the bit length tree.
+ */
+ const scan_tree = (s, tree, max_code) =>
+ // deflate_state *s;
+ // ct_data *tree; /* the tree to be scanned */
+ // int max_code; /* and its largest code of non zero frequency */
+ {
+ let n; /* iterates over all tree elements */
+ let prevlen = -1; /* last emitted length */
+ let curlen; /* length of current code */
+
+ let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
+
+ let count = 0; /* repeat count of the current code */
+ let max_count = 7; /* max repeat count */
+ let min_count = 4; /* min repeat count */
+
+ if (nextlen === 0) {
+ max_count = 138;
+ min_count = 3;
+ }
+ tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */
+
+ for (n = 0; n <= max_code; n++) {
+ curlen = nextlen;
+ nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
+
+ if (++count < max_count && curlen === nextlen) {
+ continue;
+
+ } else if (count < min_count) {
+ s.bl_tree[curlen * 2]/*.Freq*/ += count;
+
+ } else if (curlen !== 0) {
+
+ if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }
+ s.bl_tree[REP_3_6 * 2]/*.Freq*/++;
+
+ } else if (count <= 10) {
+ s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;
+
+ } else {
+ s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;
+ }
+
+ count = 0;
+ prevlen = curlen;
+
+ if (nextlen === 0) {
+ max_count = 138;
+ min_count = 3;
+
+ } else if (curlen === nextlen) {
+ max_count = 6;
+ min_count = 3;
+
+ } else {
+ max_count = 7;
+ min_count = 4;
+ }
+ }
+ };
+
+
+ /* ===========================================================================
+ * Send a literal or distance tree in compressed form, using the codes in
+ * bl_tree.
+ */
+ const send_tree = (s, tree, max_code) =>
+ // deflate_state *s;
+ // ct_data *tree; /* the tree to be scanned */
+ // int max_code; /* and its largest code of non zero frequency */
+ {
+ let n; /* iterates over all tree elements */
+ let prevlen = -1; /* last emitted length */
+ let curlen; /* length of current code */
+
+ let nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */
+
+ let count = 0; /* repeat count of the current code */
+ let max_count = 7; /* max repeat count */
+ let min_count = 4; /* min repeat count */
+
+ /* tree[max_code+1].Len = -1; */ /* guard already set */
+ if (nextlen === 0) {
+ max_count = 138;
+ min_count = 3;
+ }
+
+ for (n = 0; n <= max_code; n++) {
+ curlen = nextlen;
+ nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;
+
+ if (++count < max_count && curlen === nextlen) {
+ continue;
+
+ } else if (count < min_count) {
+ do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);
+
+ } else if (curlen !== 0) {
+ if (curlen !== prevlen) {
+ send_code(s, curlen, s.bl_tree);
+ count--;
+ }
+ //Assert(count >= 3 && count <= 6, " 3_6?");
+ send_code(s, REP_3_6, s.bl_tree);
+ send_bits(s, count - 3, 2);
+
+ } else if (count <= 10) {
+ send_code(s, REPZ_3_10, s.bl_tree);
+ send_bits(s, count - 3, 3);
+
+ } else {
+ send_code(s, REPZ_11_138, s.bl_tree);
+ send_bits(s, count - 11, 7);
+ }
+
+ count = 0;
+ prevlen = curlen;
+ if (nextlen === 0) {
+ max_count = 138;
+ min_count = 3;
+
+ } else if (curlen === nextlen) {
+ max_count = 6;
+ min_count = 3;
+
+ } else {
+ max_count = 7;
+ min_count = 4;
+ }
+ }
+ };
+
+
+ /* ===========================================================================
+ * Construct the Huffman tree for the bit lengths and return the index in
+ * bl_order of the last bit length code to send.
+ */
+ const build_bl_tree = (s) => {
+
+ let max_blindex; /* index of last bit length code of non zero freq */
+
+ /* Determine the bit length frequencies for literal and distance trees */
+ scan_tree(s, s.dyn_ltree, s.l_desc.max_code);
+ scan_tree(s, s.dyn_dtree, s.d_desc.max_code);
+
+ /* Build the bit length tree: */
+ build_tree(s, s.bl_desc);
+ /* opt_len now includes the length of the tree representations, except
+ * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.
+ */
+
+ /* Determine the number of bit length codes to send. The pkzip format
+ * requires that at least 4 bit length codes be sent. (appnote.txt says
+ * 3 but the actual value used is 4.)
+ */
+ for (max_blindex = BL_CODES$1 - 1; max_blindex >= 3; max_blindex--) {
+ if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {
+ break;
+ }
+ }
+ /* Update opt_len to include the bit length tree and counts */
+ s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;
+ //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld",
+ // s->opt_len, s->static_len));
+
+ return max_blindex;
+ };
+
+
+ /* ===========================================================================
+ * Send the header for a block using dynamic Huffman trees: the counts, the
+ * lengths of the bit length codes, the literal tree and the distance tree.
+ * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.
+ */
+ const send_all_trees = (s, lcodes, dcodes, blcodes) =>
+ // deflate_state *s;
+ // int lcodes, dcodes, blcodes; /* number of codes for each tree */
+ {
+ let rank; /* index in bl_order */
+
+ //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes");
+ //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,
+ // "too many codes");
+ //Tracev((stderr, "\nbl counts: "));
+ send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */
+ send_bits(s, dcodes - 1, 5);
+ send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */
+ for (rank = 0; rank < blcodes; rank++) {
+ //Tracev((stderr, "\nbl code %2d ", bl_order[rank]));
+ send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);
+ }
+ //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent));
+
+ send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */
+ //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent));
+
+ send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */
+ //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent));
+ };
+
+
+ /* ===========================================================================
+ * Check if the data type is TEXT or BINARY, using the following algorithm:
+ * - TEXT if the two conditions below are satisfied:
+ * a) There are no non-portable control characters belonging to the
+ * "black list" (0..6, 14..25, 28..31).
+ * b) There is at least one printable character belonging to the
+ * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).
+ * - BINARY otherwise.
+ * - The following partially-portable control characters form a
+ * "gray list" that is ignored in this detection algorithm:
+ * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).
+ * IN assertion: the fields Freq of dyn_ltree are set.
+ */
+ const detect_data_type = (s) => {
+ /* black_mask is the bit mask of black-listed bytes
+ * set bits 0..6, 14..25, and 28..31
+ * 0xf3ffc07f = binary 11110011111111111100000001111111
+ */
+ let black_mask = 0xf3ffc07f;
+ let n;
+
+ /* Check for non-textual ("black-listed") bytes. */
+ for (n = 0; n <= 31; n++, black_mask >>>= 1) {
+ if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {
+ return Z_BINARY;
+ }
+ }
+
+ /* Check for textual ("white-listed") bytes. */
+ if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||
+ s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {
+ return Z_TEXT;
+ }
+ for (n = 32; n < LITERALS$1; n++) {
+ if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {
+ return Z_TEXT;
+ }
+ }
+
+ /* There are no "black-listed" or "white-listed" bytes:
+ * this stream either is empty or has tolerated ("gray-listed") bytes only.
+ */
+ return Z_BINARY;
+ };
+
+
+ let static_init_done = false;
+
+ /* ===========================================================================
+ * Initialize the tree data structures for a new zlib stream.
+ */
+ const _tr_init$1 = (s) =>
+ {
+
+ if (!static_init_done) {
+ tr_static_init();
+ static_init_done = true;
+ }
+
+ s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);
+ s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);
+ s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);
+
+ s.bi_buf = 0;
+ s.bi_valid = 0;
+
+ /* Initialize the first block of the first file: */
+ init_block(s);
+ };
+
+
+ /* ===========================================================================
+ * Send a stored block
+ */
+ const _tr_stored_block$1 = (s, buf, stored_len, last) =>
+ //DeflateState *s;
+ //charf *buf; /* input block */
+ //ulg stored_len; /* length of input block */
+ //int last; /* one if this is the last block for a file */
+ {
+ send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */
+ copy_block(s, buf, stored_len, true); /* with header */
+ };
+
+
+ /* ===========================================================================
+ * Send one empty static block to give enough lookahead for inflate.
+ * This takes 10 bits, of which 7 may remain in the bit buffer.
+ */
+ const _tr_align$1 = (s) => {
+ send_bits(s, STATIC_TREES << 1, 3);
+ send_code(s, END_BLOCK, static_ltree);
+ bi_flush(s);
+ };
+
+
+ /* ===========================================================================
+ * Determine the best encoding for the current block: dynamic trees, static
+ * trees or store, and output the encoded block to the zip file.
+ */
+ const _tr_flush_block$1 = (s, buf, stored_len, last) =>
+ //DeflateState *s;
+ //charf *buf; /* input block, or NULL if too old */
+ //ulg stored_len; /* length of input block */
+ //int last; /* one if this is the last block for a file */
+ {
+ let opt_lenb, static_lenb; /* opt_len and static_len in bytes */
+ let max_blindex = 0; /* index of last bit length code of non zero freq */
+
+ /* Build the Huffman trees unless a stored block is forced */
+ if (s.level > 0) {
+
+ /* Check if the file is binary or text */
+ if (s.strm.data_type === Z_UNKNOWN$1) {
+ s.strm.data_type = detect_data_type(s);
+ }
+
+ /* Construct the literal and distance trees */
+ build_tree(s, s.l_desc);
+ // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len,
+ // s->static_len));
+
+ build_tree(s, s.d_desc);
+ // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len,
+ // s->static_len));
+ /* At this point, opt_len and static_len are the total bit lengths of
+ * the compressed block data, excluding the tree representations.
+ */
+
+ /* Build the bit length tree for the above two trees, and get the index
+ * in bl_order of the last bit length code to send.
+ */
+ max_blindex = build_bl_tree(s);
+
+ /* Determine the best encoding. Compute the block lengths in bytes. */
+ opt_lenb = (s.opt_len + 3 + 7) >>> 3;
+ static_lenb = (s.static_len + 3 + 7) >>> 3;
+
+ // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ",
+ // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,
+ // s->last_lit));
+
+ if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }
+
+ } else {
+ // Assert(buf != (char*)0, "lost buf");
+ opt_lenb = static_lenb = stored_len + 5; /* force a stored block */
+ }
+
+ if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {
+ /* 4: two words for the lengths */
+
+ /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.
+ * Otherwise we can't have processed more than WSIZE input bytes since
+ * the last block flush, because compression would have been
+ * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to
+ * transform a block into a stored block.
+ */
+ _tr_stored_block$1(s, buf, stored_len, last);
+
+ } else if (s.strategy === Z_FIXED$1 || static_lenb === opt_lenb) {
+
+ send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);
+ compress_block(s, static_ltree, static_dtree);
+
+ } else {
+ send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);
+ send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);
+ compress_block(s, s.dyn_ltree, s.dyn_dtree);
+ }
+ // Assert (s->compressed_len == s->bits_sent, "bad compressed size");
+ /* The above check is made mod 2^32, for files larger than 512 MB
+ * and uLong implemented on 32 bits.
+ */
+ init_block(s);
+
+ if (last) {
+ bi_windup(s);
+ }
+ // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3,
+ // s->compressed_len-7*last));
+ };
+
+ /* ===========================================================================
+ * Save the match info and tally the frequency counts. Return true if
+ * the current block must be flushed.
+ */
+ const _tr_tally$1 = (s, dist, lc) =>
+ // deflate_state *s;
+ // unsigned dist; /* distance of matched string */
+ // unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */
+ {
+ //let out_length, in_length, dcode;
+
+ s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff;
+ s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;
+
+ s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;
+ s.last_lit++;
+
+ if (dist === 0) {
+ /* lc is the unmatched char */
+ s.dyn_ltree[lc * 2]/*.Freq*/++;
+ } else {
+ s.matches++;
+ /* Here, lc is the match length - MIN_MATCH */
+ dist--; /* dist = match distance - 1 */
+ //Assert((ush)dist < (ush)MAX_DIST(s) &&
+ // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&
+ // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match");
+
+ s.dyn_ltree[(_length_code[lc] + LITERALS$1 + 1) * 2]/*.Freq*/++;
+ s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;
+ }
+
+ // (!) This block is disabled in zlib defaults,
+ // don't enable it for binary compatibility
+
+ //#ifdef TRUNCATE_BLOCK
+ // /* Try to guess if it is profitable to stop the current block here */
+ // if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {
+ // /* Compute an upper bound for the compressed length */
+ // out_length = s.last_lit*8;
+ // in_length = s.strstart - s.block_start;
+ //
+ // for (dcode = 0; dcode < D_CODES; dcode++) {
+ // out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);
+ // }
+ // out_length >>>= 3;
+ // //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ",
+ // // s->last_lit, in_length, out_length,
+ // // 100L - out_length*100L/in_length));
+ // if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {
+ // return true;
+ // }
+ // }
+ //#endif
+
+ return (s.last_lit === s.lit_bufsize - 1);
+ /* We avoid equality with lit_bufsize because of wraparound at 64K
+ * on 16 bit machines and because stored blocks are restricted to
+ * 64K-1 bytes.
+ */
+ };
+
+ var _tr_init_1 = _tr_init$1;
+ var _tr_stored_block_1 = _tr_stored_block$1;
+ var _tr_flush_block_1 = _tr_flush_block$1;
+ var _tr_tally_1 = _tr_tally$1;
+ var _tr_align_1 = _tr_align$1;
+
+ var trees = {
+ _tr_init: _tr_init_1,
+ _tr_stored_block: _tr_stored_block_1,
+ _tr_flush_block: _tr_flush_block_1,
+ _tr_tally: _tr_tally_1,
+ _tr_align: _tr_align_1
+ };
+
+ // Note: adler32 takes 12% for level 0 and 2% for level 6.
+ // It isn't worth it to make additional optimizations as in original.
+ // Small size is preferable.
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ const adler32 = (adler, buf, len, pos) => {
+ let s1 = (adler & 0xffff) |0,
+ s2 = ((adler >>> 16) & 0xffff) |0,
+ n = 0;
+
+ while (len !== 0) {
+ // Set limit ~ twice less than 5552, to keep
+ // s2 in 31-bits, because we force signed ints.
+ // in other case %= will fail.
+ n = len > 2000 ? 2000 : len;
+ len -= n;
+
+ do {
+ s1 = (s1 + buf[pos++]) |0;
+ s2 = (s2 + s1) |0;
+ } while (--n);
+
+ s1 %= 65521;
+ s2 %= 65521;
+ }
+
+ return (s1 | (s2 << 16)) |0;
+ };
+
+
+ var adler32_1 = adler32;
+
+ // Note: we can't get significant speed boost here.
+ // So write code to minimize size - no pregenerated tables
+ // and array tools dependencies.
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ // Use ordinary array, since untyped makes no boost here
+ const makeTable = () => {
+ let c, table = [];
+
+ for (var n = 0; n < 256; n++) {
+ c = n;
+ for (var k = 0; k < 8; k++) {
+ c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));
+ }
+ table[n] = c;
+ }
+
+ return table;
+ };
+
+ // Create table on load. Just 255 signed longs. Not a problem.
+ const crcTable = new Uint32Array(makeTable());
+
+
+ const crc32 = (crc, buf, len, pos) => {
+ const t = crcTable;
+ const end = pos + len;
+
+ crc ^= -1;
+
+ for (let i = pos; i < end; i++) {
+ crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];
+ }
+
+ return (crc ^ (-1)); // >>> 0;
+ };
+
+
+ var crc32_1 = crc32;
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ var messages = {
+ 2: 'need dictionary', /* Z_NEED_DICT 2 */
+ 1: 'stream end', /* Z_STREAM_END 1 */
+ 0: '', /* Z_OK 0 */
+ '-1': 'file error', /* Z_ERRNO (-1) */
+ '-2': 'stream error', /* Z_STREAM_ERROR (-2) */
+ '-3': 'data error', /* Z_DATA_ERROR (-3) */
+ '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */
+ '-5': 'buffer error', /* Z_BUF_ERROR (-5) */
+ '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */
+ };
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ var constants$2 = {
+
+ /* Allowed flush values; see deflate() and inflate() below for details */
+ Z_NO_FLUSH: 0,
+ Z_PARTIAL_FLUSH: 1,
+ Z_SYNC_FLUSH: 2,
+ Z_FULL_FLUSH: 3,
+ Z_FINISH: 4,
+ Z_BLOCK: 5,
+ Z_TREES: 6,
+
+ /* Return codes for the compression/decompression functions. Negative values
+ * are errors, positive values are used for special but normal events.
+ */
+ Z_OK: 0,
+ Z_STREAM_END: 1,
+ Z_NEED_DICT: 2,
+ Z_ERRNO: -1,
+ Z_STREAM_ERROR: -2,
+ Z_DATA_ERROR: -3,
+ Z_MEM_ERROR: -4,
+ Z_BUF_ERROR: -5,
+ //Z_VERSION_ERROR: -6,
+
+ /* compression levels */
+ Z_NO_COMPRESSION: 0,
+ Z_BEST_SPEED: 1,
+ Z_BEST_COMPRESSION: 9,
+ Z_DEFAULT_COMPRESSION: -1,
+
+
+ Z_FILTERED: 1,
+ Z_HUFFMAN_ONLY: 2,
+ Z_RLE: 3,
+ Z_FIXED: 4,
+ Z_DEFAULT_STRATEGY: 0,
+
+ /* Possible values of the data_type field (though see inflate()) */
+ Z_BINARY: 0,
+ Z_TEXT: 1,
+ //Z_ASCII: 1, // = Z_TEXT (deprecated)
+ Z_UNKNOWN: 2,
+
+ /* The deflate compression method */
+ Z_DEFLATED: 8
+ //Z_NULL: null // Use -1 or null inline, depending on var type
+ };
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ const { _tr_init, _tr_stored_block, _tr_flush_block, _tr_tally, _tr_align } = trees;
+
+
+
+
+ /* Public constants ==========================================================*/
+ /* ===========================================================================*/
+
+ const {
+ Z_NO_FLUSH: Z_NO_FLUSH$2, Z_PARTIAL_FLUSH, Z_FULL_FLUSH: Z_FULL_FLUSH$1, Z_FINISH: Z_FINISH$3, Z_BLOCK: Z_BLOCK$1,
+ Z_OK: Z_OK$3, Z_STREAM_END: Z_STREAM_END$3, Z_STREAM_ERROR: Z_STREAM_ERROR$2, Z_DATA_ERROR: Z_DATA_ERROR$2, Z_BUF_ERROR: Z_BUF_ERROR$1,
+ Z_DEFAULT_COMPRESSION: Z_DEFAULT_COMPRESSION$1,
+ Z_FILTERED, Z_HUFFMAN_ONLY, Z_RLE, Z_FIXED, Z_DEFAULT_STRATEGY: Z_DEFAULT_STRATEGY$1,
+ Z_UNKNOWN,
+ Z_DEFLATED: Z_DEFLATED$2
+ } = constants$2;
+
+ /*============================================================================*/
+
+
+ const MAX_MEM_LEVEL = 9;
+ /* Maximum value for memLevel in deflateInit2 */
+ const MAX_WBITS$1 = 15;
+ /* 32K LZ77 window */
+ const DEF_MEM_LEVEL = 8;
+
+
+ const LENGTH_CODES = 29;
+ /* number of length codes, not counting the special END_BLOCK code */
+ const LITERALS = 256;
+ /* number of literal bytes 0..255 */
+ const L_CODES = LITERALS + 1 + LENGTH_CODES;
+ /* number of Literal or Length codes, including the END_BLOCK code */
+ const D_CODES = 30;
+ /* number of distance codes */
+ const BL_CODES = 19;
+ /* number of codes used to transfer the bit lengths */
+ const HEAP_SIZE = 2 * L_CODES + 1;
+ /* maximum heap size */
+ const MAX_BITS = 15;
+ /* All codes must not exceed MAX_BITS bits */
+
+ const MIN_MATCH = 3;
+ const MAX_MATCH = 258;
+ const MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);
+
+ const PRESET_DICT = 0x20;
+
+ const INIT_STATE = 42;
+ const EXTRA_STATE = 69;
+ const NAME_STATE = 73;
+ const COMMENT_STATE = 91;
+ const HCRC_STATE = 103;
+ const BUSY_STATE = 113;
+ const FINISH_STATE = 666;
+
+ const BS_NEED_MORE = 1; /* block not completed, need more input or more output */
+ const BS_BLOCK_DONE = 2; /* block flush performed */
+ const BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */
+ const BS_FINISH_DONE = 4; /* finish done, accept no more input or output */
+
+ const OS_CODE = 0x03; // Unix :) . Don't detect, use this default.
+
+ const err = (strm, errorCode) => {
+ strm.msg = messages[errorCode];
+ return errorCode;
+ };
+
+ const rank = (f) => {
+ return ((f) << 1) - ((f) > 4 ? 9 : 0);
+ };
+
+ const zero$2 = (buf) => {
+ let len = buf.length; while (--len >= 0) { buf[len] = 0; }
+ };
+
+
+ /* eslint-disable new-cap */
+ let HASH_ZLIB = (s, prev, data) => ((prev << s.hash_shift) ^ data) & s.hash_mask;
+ // This hash causes less collisions, https://github.com/nodeca/pako/issues/135
+ // But breaks binary compatibility
+ //let HASH_FAST = (s, prev, data) => ((prev << 8) + (prev >> 8) + (data << 4)) & s.hash_mask;
+ let HASH = HASH_ZLIB;
+
+ /* =========================================================================
+ * Flush as much pending output as possible. All deflate() output goes
+ * through this function so some applications may wish to modify it
+ * to avoid allocating a large strm->output buffer and copying into it.
+ * (See also read_buf()).
+ */
+ const flush_pending = (strm) => {
+ const s = strm.state;
+
+ //_tr_flush_bits(s);
+ let len = s.pending;
+ if (len > strm.avail_out) {
+ len = strm.avail_out;
+ }
+ if (len === 0) { return; }
+
+ strm.output.set(s.pending_buf.subarray(s.pending_out, s.pending_out + len), strm.next_out);
+ strm.next_out += len;
+ s.pending_out += len;
+ strm.total_out += len;
+ strm.avail_out -= len;
+ s.pending -= len;
+ if (s.pending === 0) {
+ s.pending_out = 0;
+ }
+ };
+
+
+ const flush_block_only = (s, last) => {
+ _tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);
+ s.block_start = s.strstart;
+ flush_pending(s.strm);
+ };
+
+
+ const put_byte = (s, b) => {
+ s.pending_buf[s.pending++] = b;
+ };
+
+
+ /* =========================================================================
+ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+ * IN assertion: the stream state is correct and there is enough room in
+ * pending_buf.
+ */
+ const putShortMSB = (s, b) => {
+
+ // put_byte(s, (Byte)(b >> 8));
+ // put_byte(s, (Byte)(b & 0xff));
+ s.pending_buf[s.pending++] = (b >>> 8) & 0xff;
+ s.pending_buf[s.pending++] = b & 0xff;
+ };
+
+
+ /* ===========================================================================
+ * Read a new buffer from the current input stream, update the adler32
+ * and total number of bytes read. All deflate() input goes through
+ * this function so some applications may wish to modify it to avoid
+ * allocating a large strm->input buffer and copying from it.
+ * (See also flush_pending()).
+ */
+ const read_buf = (strm, buf, start, size) => {
+
+ let len = strm.avail_in;
+
+ if (len > size) { len = size; }
+ if (len === 0) { return 0; }
+
+ strm.avail_in -= len;
+
+ // zmemcpy(buf, strm->next_in, len);
+ buf.set(strm.input.subarray(strm.next_in, strm.next_in + len), start);
+ if (strm.state.wrap === 1) {
+ strm.adler = adler32_1(strm.adler, buf, len, start);
+ }
+
+ else if (strm.state.wrap === 2) {
+ strm.adler = crc32_1(strm.adler, buf, len, start);
+ }
+
+ strm.next_in += len;
+ strm.total_in += len;
+
+ return len;
+ };
+
+
+ /* ===========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ * OUT assertion: the match length is not greater than s->lookahead.
+ */
+ const longest_match = (s, cur_match) => {
+
+ let chain_length = s.max_chain_length; /* max hash chain length */
+ let scan = s.strstart; /* current string */
+ let match; /* matched string */
+ let len; /* length of current match */
+ let best_len = s.prev_length; /* best match length so far */
+ let nice_match = s.nice_match; /* stop if match long enough */
+ const limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?
+ s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;
+
+ const _win = s.window; // shortcut
+
+ const wmask = s.w_mask;
+ const prev = s.prev;
+
+ /* Stop when cur_match becomes <= limit. To simplify the code,
+ * we prevent matches with the string of window index 0.
+ */
+
+ const strend = s.strstart + MAX_MATCH;
+ let scan_end1 = _win[scan + best_len - 1];
+ let scan_end = _win[scan + best_len];
+
+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+ * It is easy to get rid of this optimization if necessary.
+ */
+ // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+ /* Do not waste too much time if we already have a good match: */
+ if (s.prev_length >= s.good_match) {
+ chain_length >>= 2;
+ }
+ /* Do not look for matches beyond the end of the input. This is necessary
+ * to make deflate deterministic.
+ */
+ if (nice_match > s.lookahead) { nice_match = s.lookahead; }
+
+ // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+ do {
+ // Assert(cur_match < s->strstart, "no future");
+ match = cur_match;
+
+ /* Skip to next match if the match length cannot increase
+ * or if the match length is less than 2. Note that the checks below
+ * for insufficient lookahead only occur occasionally for performance
+ * reasons. Therefore uninitialized memory will be accessed, and
+ * conditional jumps will be made that depend on those values.
+ * However the length of the match is limited to the lookahead, so
+ * the output of deflate is not affected by the uninitialized values.
+ */
+
+ if (_win[match + best_len] !== scan_end ||
+ _win[match + best_len - 1] !== scan_end1 ||
+ _win[match] !== _win[scan] ||
+ _win[++match] !== _win[scan + 1]) {
+ continue;
+ }
+
+ /* The check at best_len-1 can be removed because it will be made
+ * again later. (This heuristic is not always a win.)
+ * It is not necessary to compare scan[2] and match[2] since they
+ * are always equal when the other bytes match, given that
+ * the hash keys are equal and that HASH_BITS >= 8.
+ */
+ scan += 2;
+ match++;
+ // Assert(*scan == *match, "match[2]?");
+
+ /* We check for insufficient lookahead only every 8th comparison;
+ * the 256th check will be made at strstart+258.
+ */
+ do {
+ /*jshint noempty:false*/
+ } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+ _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+ _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+ _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&
+ scan < strend);
+
+ // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+ len = MAX_MATCH - (strend - scan);
+ scan = strend - MAX_MATCH;
+
+ if (len > best_len) {
+ s.match_start = cur_match;
+ best_len = len;
+ if (len >= nice_match) {
+ break;
+ }
+ scan_end1 = _win[scan + best_len - 1];
+ scan_end = _win[scan + best_len];
+ }
+ } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);
+
+ if (best_len <= s.lookahead) {
+ return best_len;
+ }
+ return s.lookahead;
+ };
+
+
+ /* ===========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead.
+ *
+ * IN assertion: lookahead < MIN_LOOKAHEAD
+ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+ * At least one byte has been read, or avail_in == 0; reads are
+ * performed for at least two bytes (required for the zip translate_eol
+ * option -- not supported here).
+ */
+ const fill_window = (s) => {
+
+ const _w_size = s.w_size;
+ let p, n, m, more, str;
+
+ //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+ do {
+ more = s.window_size - s.lookahead - s.strstart;
+
+ // JS ints have 32 bit, block below not needed
+ /* Deal with !@#$% 64K limit: */
+ //if (sizeof(int) <= 2) {
+ // if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+ // more = wsize;
+ //
+ // } else if (more == (unsigned)(-1)) {
+ // /* Very unlikely, but possible on 16 bit machine if
+ // * strstart == 0 && lookahead == 1 (input done a byte at time)
+ // */
+ // more--;
+ // }
+ //}
+
+
+ /* If the window is almost full and there is insufficient lookahead,
+ * move the upper half to the lower one to make room in the upper half.
+ */
+ if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {
+
+ s.window.set(s.window.subarray(_w_size, _w_size + _w_size), 0);
+ s.match_start -= _w_size;
+ s.strstart -= _w_size;
+ /* we now have strstart >= MAX_DIST */
+ s.block_start -= _w_size;
+
+ /* Slide the hash table (could be avoided with 32 bit values
+ at the expense of memory usage). We slide even when level == 0
+ to keep the hash table consistent if we switch back to level > 0
+ later. (Using level 0 permanently is not an optimal usage of
+ zlib, so we don't care about this pathological case.)
+ */
+
+ n = s.hash_size;
+ p = n;
+
+ do {
+ m = s.head[--p];
+ s.head[p] = (m >= _w_size ? m - _w_size : 0);
+ } while (--n);
+
+ n = _w_size;
+ p = n;
+
+ do {
+ m = s.prev[--p];
+ s.prev[p] = (m >= _w_size ? m - _w_size : 0);
+ /* If n is not on any hash chain, prev[n] is garbage but
+ * its value will never be used.
+ */
+ } while (--n);
+
+ more += _w_size;
+ }
+ if (s.strm.avail_in === 0) {
+ break;
+ }
+
+ /* If there was no sliding:
+ * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+ * more == window_size - lookahead - strstart
+ * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+ * => more >= window_size - 2*WSIZE + 2
+ * In the BIG_MEM or MMAP case (not yet supported),
+ * window_size == input_size + MIN_LOOKAHEAD &&
+ * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+ * Otherwise, window_size == 2*WSIZE so more >= 2.
+ * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+ */
+ //Assert(more >= 2, "more < 2");
+ n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);
+ s.lookahead += n;
+
+ /* Initialize the hash value now that we have some input: */
+ if (s.lookahead + s.insert >= MIN_MATCH) {
+ str = s.strstart - s.insert;
+ s.ins_h = s.window[str];
+
+ /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */
+ s.ins_h = HASH(s, s.ins_h, s.window[str + 1]);
+ //#if MIN_MATCH != 3
+ // Call update_hash() MIN_MATCH-3 more times
+ //#endif
+ while (s.insert) {
+ /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
+ s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);
+
+ s.prev[str & s.w_mask] = s.head[s.ins_h];
+ s.head[s.ins_h] = str;
+ str++;
+ s.insert--;
+ if (s.lookahead + s.insert < MIN_MATCH) {
+ break;
+ }
+ }
+ }
+ /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+ * but this is not important since only literal bytes will be emitted.
+ */
+
+ } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);
+
+ /* If the WIN_INIT bytes after the end of the current data have never been
+ * written, then zero those bytes in order to avoid memory check reports of
+ * the use of uninitialized (or uninitialised as Julian writes) bytes by
+ * the longest match routines. Update the high water mark for the next
+ * time through here. WIN_INIT is set to MAX_MATCH since the longest match
+ * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+ */
+ // if (s.high_water < s.window_size) {
+ // const curr = s.strstart + s.lookahead;
+ // let init = 0;
+ //
+ // if (s.high_water < curr) {
+ // /* Previous high water mark below current data -- zero WIN_INIT
+ // * bytes or up to end of window, whichever is less.
+ // */
+ // init = s.window_size - curr;
+ // if (init > WIN_INIT)
+ // init = WIN_INIT;
+ // zmemzero(s->window + curr, (unsigned)init);
+ // s->high_water = curr + init;
+ // }
+ // else if (s->high_water < (ulg)curr + WIN_INIT) {
+ // /* High water mark at or above current data, but below current data
+ // * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+ // * to end of window, whichever is less.
+ // */
+ // init = (ulg)curr + WIN_INIT - s->high_water;
+ // if (init > s->window_size - s->high_water)
+ // init = s->window_size - s->high_water;
+ // zmemzero(s->window + s->high_water, (unsigned)init);
+ // s->high_water += init;
+ // }
+ // }
+ //
+ // Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+ // "not enough room for search");
+ };
+
+ /* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+ const deflate_stored = (s, flush) => {
+
+ /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+ * to pending_buf_size, and each stored block has a 5 byte header:
+ */
+ let max_block_size = 0xffff;
+
+ if (max_block_size > s.pending_buf_size - 5) {
+ max_block_size = s.pending_buf_size - 5;
+ }
+
+ /* Copy as much as possible from input to output: */
+ for (;;) {
+ /* Fill the window as much as possible: */
+ if (s.lookahead <= 1) {
+
+ //Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+ // s->block_start >= (long)s->w_size, "slide too late");
+ // if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||
+ // s.block_start >= s.w_size)) {
+ // throw new Error("slide too late");
+ // }
+
+ fill_window(s);
+ if (s.lookahead === 0 && flush === Z_NO_FLUSH$2) {
+ return BS_NEED_MORE;
+ }
+
+ if (s.lookahead === 0) {
+ break;
+ }
+ /* flush the current block */
+ }
+ //Assert(s->block_start >= 0L, "block gone");
+ // if (s.block_start < 0) throw new Error("block gone");
+
+ s.strstart += s.lookahead;
+ s.lookahead = 0;
+
+ /* Emit a stored block if pending_buf will be full: */
+ const max_start = s.block_start + max_block_size;
+
+ if (s.strstart === 0 || s.strstart >= max_start) {
+ /* strstart == 0 is possible when wraparound on 16-bit machine */
+ s.lookahead = s.strstart - max_start;
+ s.strstart = max_start;
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+
+
+ }
+ /* Flush if we may have to slide, otherwise block_start may become
+ * negative and the data will be gone:
+ */
+ if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+ }
+
+ s.insert = 0;
+
+ if (flush === Z_FINISH$3) {
+ /*** FLUSH_BLOCK(s, 1); ***/
+ flush_block_only(s, true);
+ if (s.strm.avail_out === 0) {
+ return BS_FINISH_STARTED;
+ }
+ /***/
+ return BS_FINISH_DONE;
+ }
+
+ if (s.strstart > s.block_start) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+
+ return BS_NEED_MORE;
+ };
+
+ /* ===========================================================================
+ * Compress as much as possible from the input stream, return the current
+ * block state.
+ * This function does not perform lazy evaluation of matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+ const deflate_fast = (s, flush) => {
+
+ let hash_head; /* head of the hash chain */
+ let bflush; /* set if current block must be flushed */
+
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the next match, plus MIN_MATCH bytes to insert the
+ * string following the next match.
+ */
+ if (s.lookahead < MIN_LOOKAHEAD) {
+ fill_window(s);
+ if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {
+ return BS_NEED_MORE;
+ }
+ if (s.lookahead === 0) {
+ break; /* flush the current block */
+ }
+ }
+
+ /* Insert the string window[strstart .. strstart+2] in the
+ * dictionary, and set hash_head to the head of the hash chain:
+ */
+ hash_head = 0/*NIL*/;
+ if (s.lookahead >= MIN_MATCH) {
+ /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+ s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);
+ hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+ s.head[s.ins_h] = s.strstart;
+ /***/
+ }
+
+ /* Find the longest match, discarding those <= prev_length.
+ * At this point we have always match_length < MIN_MATCH
+ */
+ if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {
+ /* To simplify the code, we prevent matches with the string
+ * of window index 0 (in particular we have to avoid a match
+ * of the string with itself at the start of the input file).
+ */
+ s.match_length = longest_match(s, hash_head);
+ /* longest_match() sets match_start */
+ }
+ if (s.match_length >= MIN_MATCH) {
+ // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only
+
+ /*** _tr_tally_dist(s, s.strstart - s.match_start,
+ s.match_length - MIN_MATCH, bflush); ***/
+ bflush = _tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);
+
+ s.lookahead -= s.match_length;
+
+ /* Insert new strings in the hash table only if the match length
+ * is not too large. This saves time but degrades compression.
+ */
+ if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {
+ s.match_length--; /* string at strstart already in table */
+ do {
+ s.strstart++;
+ /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+ s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);
+ hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+ s.head[s.ins_h] = s.strstart;
+ /***/
+ /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+ * always MIN_MATCH bytes ahead.
+ */
+ } while (--s.match_length !== 0);
+ s.strstart++;
+ } else
+ {
+ s.strstart += s.match_length;
+ s.match_length = 0;
+ s.ins_h = s.window[s.strstart];
+ /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */
+ s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + 1]);
+
+ //#if MIN_MATCH != 3
+ // Call UPDATE_HASH() MIN_MATCH-3 more times
+ //#endif
+ /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+ * matter since it will be recomputed at next deflate call.
+ */
+ }
+ } else {
+ /* No match, output a literal byte */
+ //Tracevv((stderr,"%c", s.window[s.strstart]));
+ /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+ bflush = _tr_tally(s, 0, s.window[s.strstart]);
+
+ s.lookahead--;
+ s.strstart++;
+ }
+ if (bflush) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+ }
+ s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);
+ if (flush === Z_FINISH$3) {
+ /*** FLUSH_BLOCK(s, 1); ***/
+ flush_block_only(s, true);
+ if (s.strm.avail_out === 0) {
+ return BS_FINISH_STARTED;
+ }
+ /***/
+ return BS_FINISH_DONE;
+ }
+ if (s.last_lit) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+ return BS_BLOCK_DONE;
+ };
+
+ /* ===========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+ const deflate_slow = (s, flush) => {
+
+ let hash_head; /* head of hash chain */
+ let bflush; /* set if current block must be flushed */
+
+ let max_insert;
+
+ /* Process the input block. */
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the next match, plus MIN_MATCH bytes to insert the
+ * string following the next match.
+ */
+ if (s.lookahead < MIN_LOOKAHEAD) {
+ fill_window(s);
+ if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH$2) {
+ return BS_NEED_MORE;
+ }
+ if (s.lookahead === 0) { break; } /* flush the current block */
+ }
+
+ /* Insert the string window[strstart .. strstart+2] in the
+ * dictionary, and set hash_head to the head of the hash chain:
+ */
+ hash_head = 0/*NIL*/;
+ if (s.lookahead >= MIN_MATCH) {
+ /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+ s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);
+ hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+ s.head[s.ins_h] = s.strstart;
+ /***/
+ }
+
+ /* Find the longest match, discarding those <= prev_length.
+ */
+ s.prev_length = s.match_length;
+ s.prev_match = s.match_start;
+ s.match_length = MIN_MATCH - 1;
+
+ if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&
+ s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {
+ /* To simplify the code, we prevent matches with the string
+ * of window index 0 (in particular we have to avoid a match
+ * of the string with itself at the start of the input file).
+ */
+ s.match_length = longest_match(s, hash_head);
+ /* longest_match() sets match_start */
+
+ if (s.match_length <= 5 &&
+ (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {
+
+ /* If prev_match is also MIN_MATCH, match_start is garbage
+ * but we will ignore the current match anyway.
+ */
+ s.match_length = MIN_MATCH - 1;
+ }
+ }
+ /* If there was a match at the previous step and the current
+ * match is not better, output the previous match:
+ */
+ if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {
+ max_insert = s.strstart + s.lookahead - MIN_MATCH;
+ /* Do not insert strings in hash table beyond this. */
+
+ //check_match(s, s.strstart-1, s.prev_match, s.prev_length);
+
+ /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,
+ s.prev_length - MIN_MATCH, bflush);***/
+ bflush = _tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);
+ /* Insert in hash table all strings up to the end of the match.
+ * strstart-1 and strstart are already inserted. If there is not
+ * enough lookahead, the last two strings are not inserted in
+ * the hash table.
+ */
+ s.lookahead -= s.prev_length - 1;
+ s.prev_length -= 2;
+ do {
+ if (++s.strstart <= max_insert) {
+ /*** INSERT_STRING(s, s.strstart, hash_head); ***/
+ s.ins_h = HASH(s, s.ins_h, s.window[s.strstart + MIN_MATCH - 1]);
+ hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];
+ s.head[s.ins_h] = s.strstart;
+ /***/
+ }
+ } while (--s.prev_length !== 0);
+ s.match_available = 0;
+ s.match_length = MIN_MATCH - 1;
+ s.strstart++;
+
+ if (bflush) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+
+ } else if (s.match_available) {
+ /* If there was no match at the previous position, output a
+ * single literal. If there was a match but the current match
+ * is longer, truncate the previous match to a single literal.
+ */
+ //Tracevv((stderr,"%c", s->window[s->strstart-1]));
+ /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
+ bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);
+
+ if (bflush) {
+ /*** FLUSH_BLOCK_ONLY(s, 0) ***/
+ flush_block_only(s, false);
+ /***/
+ }
+ s.strstart++;
+ s.lookahead--;
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ } else {
+ /* There is no previous match to compare with, wait for
+ * the next step to decide.
+ */
+ s.match_available = 1;
+ s.strstart++;
+ s.lookahead--;
+ }
+ }
+ //Assert (flush != Z_NO_FLUSH, "no flush?");
+ if (s.match_available) {
+ //Tracevv((stderr,"%c", s->window[s->strstart-1]));
+ /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/
+ bflush = _tr_tally(s, 0, s.window[s.strstart - 1]);
+
+ s.match_available = 0;
+ }
+ s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;
+ if (flush === Z_FINISH$3) {
+ /*** FLUSH_BLOCK(s, 1); ***/
+ flush_block_only(s, true);
+ if (s.strm.avail_out === 0) {
+ return BS_FINISH_STARTED;
+ }
+ /***/
+ return BS_FINISH_DONE;
+ }
+ if (s.last_lit) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+
+ return BS_BLOCK_DONE;
+ };
+
+
+ /* ===========================================================================
+ * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+ * one. Do not maintain a hash table. (It will be regenerated if this run of
+ * deflate switches away from Z_RLE.)
+ */
+ const deflate_rle = (s, flush) => {
+
+ let bflush; /* set if current block must be flushed */
+ let prev; /* byte at distance one to match */
+ let scan, strend; /* scan goes up to strend for length of run */
+
+ const _win = s.window;
+
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the longest run, plus one for the unrolled loop.
+ */
+ if (s.lookahead <= MAX_MATCH) {
+ fill_window(s);
+ if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH$2) {
+ return BS_NEED_MORE;
+ }
+ if (s.lookahead === 0) { break; } /* flush the current block */
+ }
+
+ /* See how many times the previous byte repeats */
+ s.match_length = 0;
+ if (s.lookahead >= MIN_MATCH && s.strstart > 0) {
+ scan = s.strstart - 1;
+ prev = _win[scan];
+ if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {
+ strend = s.strstart + MAX_MATCH;
+ do {
+ /*jshint noempty:false*/
+ } while (prev === _win[++scan] && prev === _win[++scan] &&
+ prev === _win[++scan] && prev === _win[++scan] &&
+ prev === _win[++scan] && prev === _win[++scan] &&
+ prev === _win[++scan] && prev === _win[++scan] &&
+ scan < strend);
+ s.match_length = MAX_MATCH - (strend - scan);
+ if (s.match_length > s.lookahead) {
+ s.match_length = s.lookahead;
+ }
+ }
+ //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+ }
+
+ /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+ if (s.match_length >= MIN_MATCH) {
+ //check_match(s, s.strstart, s.strstart - 1, s.match_length);
+
+ /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/
+ bflush = _tr_tally(s, 1, s.match_length - MIN_MATCH);
+
+ s.lookahead -= s.match_length;
+ s.strstart += s.match_length;
+ s.match_length = 0;
+ } else {
+ /* No match, output a literal byte */
+ //Tracevv((stderr,"%c", s->window[s->strstart]));
+ /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+ bflush = _tr_tally(s, 0, s.window[s.strstart]);
+
+ s.lookahead--;
+ s.strstart++;
+ }
+ if (bflush) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+ }
+ s.insert = 0;
+ if (flush === Z_FINISH$3) {
+ /*** FLUSH_BLOCK(s, 1); ***/
+ flush_block_only(s, true);
+ if (s.strm.avail_out === 0) {
+ return BS_FINISH_STARTED;
+ }
+ /***/
+ return BS_FINISH_DONE;
+ }
+ if (s.last_lit) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+ return BS_BLOCK_DONE;
+ };
+
+ /* ===========================================================================
+ * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
+ * (It will be regenerated if this run of deflate switches away from Huffman.)
+ */
+ const deflate_huff = (s, flush) => {
+
+ let bflush; /* set if current block must be flushed */
+
+ for (;;) {
+ /* Make sure that we have a literal to write. */
+ if (s.lookahead === 0) {
+ fill_window(s);
+ if (s.lookahead === 0) {
+ if (flush === Z_NO_FLUSH$2) {
+ return BS_NEED_MORE;
+ }
+ break; /* flush the current block */
+ }
+ }
+
+ /* Output a literal byte */
+ s.match_length = 0;
+ //Tracevv((stderr,"%c", s->window[s->strstart]));
+ /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/
+ bflush = _tr_tally(s, 0, s.window[s.strstart]);
+ s.lookahead--;
+ s.strstart++;
+ if (bflush) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+ }
+ s.insert = 0;
+ if (flush === Z_FINISH$3) {
+ /*** FLUSH_BLOCK(s, 1); ***/
+ flush_block_only(s, true);
+ if (s.strm.avail_out === 0) {
+ return BS_FINISH_STARTED;
+ }
+ /***/
+ return BS_FINISH_DONE;
+ }
+ if (s.last_lit) {
+ /*** FLUSH_BLOCK(s, 0); ***/
+ flush_block_only(s, false);
+ if (s.strm.avail_out === 0) {
+ return BS_NEED_MORE;
+ }
+ /***/
+ }
+ return BS_BLOCK_DONE;
+ };
+
+ /* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+ function Config(good_length, max_lazy, nice_length, max_chain, func) {
+
+ this.good_length = good_length;
+ this.max_lazy = max_lazy;
+ this.nice_length = nice_length;
+ this.max_chain = max_chain;
+ this.func = func;
+ }
+
+ const configuration_table = [
+ /* good lazy nice chain */
+ new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */
+ new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */
+ new Config(4, 5, 16, 8, deflate_fast), /* 2 */
+ new Config(4, 6, 32, 32, deflate_fast), /* 3 */
+
+ new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */
+ new Config(8, 16, 32, 32, deflate_slow), /* 5 */
+ new Config(8, 16, 128, 128, deflate_slow), /* 6 */
+ new Config(8, 32, 128, 256, deflate_slow), /* 7 */
+ new Config(32, 128, 258, 1024, deflate_slow), /* 8 */
+ new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */
+ ];
+
+
+ /* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+ const lm_init = (s) => {
+
+ s.window_size = 2 * s.w_size;
+
+ /*** CLEAR_HASH(s); ***/
+ zero$2(s.head); // Fill with NIL (= 0);
+
+ /* Set the default configuration parameters:
+ */
+ s.max_lazy_match = configuration_table[s.level].max_lazy;
+ s.good_match = configuration_table[s.level].good_length;
+ s.nice_match = configuration_table[s.level].nice_length;
+ s.max_chain_length = configuration_table[s.level].max_chain;
+
+ s.strstart = 0;
+ s.block_start = 0;
+ s.lookahead = 0;
+ s.insert = 0;
+ s.match_length = s.prev_length = MIN_MATCH - 1;
+ s.match_available = 0;
+ s.ins_h = 0;
+ };
+
+
+ function DeflateState() {
+ this.strm = null; /* pointer back to this zlib stream */
+ this.status = 0; /* as the name implies */
+ this.pending_buf = null; /* output still pending */
+ this.pending_buf_size = 0; /* size of pending_buf */
+ this.pending_out = 0; /* next pending byte to output to the stream */
+ this.pending = 0; /* nb of bytes in the pending buffer */
+ this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
+ this.gzhead = null; /* gzip header information to write */
+ this.gzindex = 0; /* where in extra, name, or comment */
+ this.method = Z_DEFLATED$2; /* can only be DEFLATED */
+ this.last_flush = -1; /* value of flush param for previous deflate call */
+
+ this.w_size = 0; /* LZ77 window size (32K by default) */
+ this.w_bits = 0; /* log2(w_size) (8..16) */
+ this.w_mask = 0; /* w_size - 1 */
+
+ this.window = null;
+ /* Sliding window. Input bytes are read into the second half of the window,
+ * and move to the first half later to keep a dictionary of at least wSize
+ * bytes. With this organization, matches are limited to a distance of
+ * wSize-MAX_MATCH bytes, but this ensures that IO is always
+ * performed with a length multiple of the block size.
+ */
+
+ this.window_size = 0;
+ /* Actual size of window: 2*wSize, except when the user input buffer
+ * is directly used as sliding window.
+ */
+
+ this.prev = null;
+ /* Link to older string with same hash index. To limit the size of this
+ * array to 64K, this link is maintained only for the last 32K strings.
+ * An index in this array is thus a window index modulo 32K.
+ */
+
+ this.head = null; /* Heads of the hash chains or NIL. */
+
+ this.ins_h = 0; /* hash index of string to be inserted */
+ this.hash_size = 0; /* number of elements in hash table */
+ this.hash_bits = 0; /* log2(hash_size) */
+ this.hash_mask = 0; /* hash_size-1 */
+
+ this.hash_shift = 0;
+ /* Number of bits by which ins_h must be shifted at each input
+ * step. It must be such that after MIN_MATCH steps, the oldest
+ * byte no longer takes part in the hash key, that is:
+ * hash_shift * MIN_MATCH >= hash_bits
+ */
+
+ this.block_start = 0;
+ /* Window position at the beginning of the current output block. Gets
+ * negative when the window is moved backwards.
+ */
+
+ this.match_length = 0; /* length of best match */
+ this.prev_match = 0; /* previous match */
+ this.match_available = 0; /* set if previous match exists */
+ this.strstart = 0; /* start of string to insert */
+ this.match_start = 0; /* start of matching string */
+ this.lookahead = 0; /* number of valid bytes ahead in window */
+
+ this.prev_length = 0;
+ /* Length of the best match at previous step. Matches not greater than this
+ * are discarded. This is used in the lazy match evaluation.
+ */
+
+ this.max_chain_length = 0;
+ /* To speed up deflation, hash chains are never searched beyond this
+ * length. A higher limit improves compression ratio but degrades the
+ * speed.
+ */
+
+ this.max_lazy_match = 0;
+ /* Attempt to find a better match only when the current match is strictly
+ * smaller than this value. This mechanism is used only for compression
+ * levels >= 4.
+ */
+ // That's alias to max_lazy_match, don't use directly
+ //this.max_insert_length = 0;
+ /* Insert new strings in the hash table only if the match length is not
+ * greater than this length. This saves time but degrades compression.
+ * max_insert_length is used only for compression levels <= 3.
+ */
+
+ this.level = 0; /* compression level (1..9) */
+ this.strategy = 0; /* favor or force Huffman coding*/
+
+ this.good_match = 0;
+ /* Use a faster search when the previous match is longer than this */
+
+ this.nice_match = 0; /* Stop searching when current match exceeds this */
+
+ /* used by trees.c: */
+
+ /* Didn't use ct_data typedef below to suppress compiler warning */
+
+ // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
+ // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+ // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
+
+ // Use flat array of DOUBLE size, with interleaved fata,
+ // because JS does not support effective
+ this.dyn_ltree = new Uint16Array(HEAP_SIZE * 2);
+ this.dyn_dtree = new Uint16Array((2 * D_CODES + 1) * 2);
+ this.bl_tree = new Uint16Array((2 * BL_CODES + 1) * 2);
+ zero$2(this.dyn_ltree);
+ zero$2(this.dyn_dtree);
+ zero$2(this.bl_tree);
+
+ this.l_desc = null; /* desc. for literal tree */
+ this.d_desc = null; /* desc. for distance tree */
+ this.bl_desc = null; /* desc. for bit length tree */
+
+ //ush bl_count[MAX_BITS+1];
+ this.bl_count = new Uint16Array(MAX_BITS + 1);
+ /* number of codes at each bit length for an optimal tree */
+
+ //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
+ this.heap = new Uint16Array(2 * L_CODES + 1); /* heap used to build the Huffman trees */
+ zero$2(this.heap);
+
+ this.heap_len = 0; /* number of elements in the heap */
+ this.heap_max = 0; /* element of largest frequency */
+ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+ * The same heap array is used to build all trees.
+ */
+
+ this.depth = new Uint16Array(2 * L_CODES + 1); //uch depth[2*L_CODES+1];
+ zero$2(this.depth);
+ /* Depth of each subtree used as tie breaker for trees of equal frequency
+ */
+
+ this.l_buf = 0; /* buffer index for literals or lengths */
+
+ this.lit_bufsize = 0;
+ /* Size of match buffer for literals/lengths. There are 4 reasons for
+ * limiting lit_bufsize to 64K:
+ * - frequencies can be kept in 16 bit counters
+ * - if compression is not successful for the first block, all input
+ * data is still in the window so we can still emit a stored block even
+ * when input comes from standard input. (This can also be done for
+ * all blocks if lit_bufsize is not greater than 32K.)
+ * - if compression is not successful for a file smaller than 64K, we can
+ * even emit a stored file instead of a stored block (saving 5 bytes).
+ * This is applicable only for zip (not gzip or zlib).
+ * - creating new Huffman trees less frequently may not provide fast
+ * adaptation to changes in the input data statistics. (Take for
+ * example a binary file with poorly compressible code followed by
+ * a highly compressible string table.) Smaller buffer sizes give
+ * fast adaptation but have of course the overhead of transmitting
+ * trees more frequently.
+ * - I can't count above 4
+ */
+
+ this.last_lit = 0; /* running index in l_buf */
+
+ this.d_buf = 0;
+ /* Buffer index for distances. To simplify the code, d_buf and l_buf have
+ * the same number of elements. To use different lengths, an extra flag
+ * array would be necessary.
+ */
+
+ this.opt_len = 0; /* bit length of current block with optimal trees */
+ this.static_len = 0; /* bit length of current block with static trees */
+ this.matches = 0; /* number of string matches in current block */
+ this.insert = 0; /* bytes at end of window left to insert */
+
+
+ this.bi_buf = 0;
+ /* Output buffer. bits are inserted starting at the bottom (least
+ * significant bits).
+ */
+ this.bi_valid = 0;
+ /* Number of valid bits in bi_buf. All bits above the last valid bit
+ * are always zero.
+ */
+
+ // Used for window memory init. We safely ignore it for JS. That makes
+ // sense only for pointers and memory check tools.
+ //this.high_water = 0;
+ /* High water mark offset in window for initialized bytes -- bytes above
+ * this are set to zero in order to avoid memory check warnings when
+ * longest match routines access bytes past the input. This is then
+ * updated to the new high water mark.
+ */
+ }
+
+
+ const deflateResetKeep = (strm) => {
+
+ if (!strm || !strm.state) {
+ return err(strm, Z_STREAM_ERROR$2);
+ }
+
+ strm.total_in = strm.total_out = 0;
+ strm.data_type = Z_UNKNOWN;
+
+ const s = strm.state;
+ s.pending = 0;
+ s.pending_out = 0;
+
+ if (s.wrap < 0) {
+ s.wrap = -s.wrap;
+ /* was made negative by deflate(..., Z_FINISH); */
+ }
+ s.status = (s.wrap ? INIT_STATE : BUSY_STATE);
+ strm.adler = (s.wrap === 2) ?
+ 0 // crc32(0, Z_NULL, 0)
+ :
+ 1; // adler32(0, Z_NULL, 0)
+ s.last_flush = Z_NO_FLUSH$2;
+ _tr_init(s);
+ return Z_OK$3;
+ };
+
+
+ const deflateReset = (strm) => {
+
+ const ret = deflateResetKeep(strm);
+ if (ret === Z_OK$3) {
+ lm_init(strm.state);
+ }
+ return ret;
+ };
+
+
+ const deflateSetHeader = (strm, head) => {
+
+ if (!strm || !strm.state) { return Z_STREAM_ERROR$2; }
+ if (strm.state.wrap !== 2) { return Z_STREAM_ERROR$2; }
+ strm.state.gzhead = head;
+ return Z_OK$3;
+ };
+
+
+ const deflateInit2 = (strm, level, method, windowBits, memLevel, strategy) => {
+
+ if (!strm) { // === Z_NULL
+ return Z_STREAM_ERROR$2;
+ }
+ let wrap = 1;
+
+ if (level === Z_DEFAULT_COMPRESSION$1) {
+ level = 6;
+ }
+
+ if (windowBits < 0) { /* suppress zlib wrapper */
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+
+ else if (windowBits > 15) {
+ wrap = 2; /* write gzip wrapper instead */
+ windowBits -= 16;
+ }
+
+
+ if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED$2 ||
+ windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+ strategy < 0 || strategy > Z_FIXED) {
+ return err(strm, Z_STREAM_ERROR$2);
+ }
+
+
+ if (windowBits === 8) {
+ windowBits = 9;
+ }
+ /* until 256-byte window bug fixed */
+
+ const s = new DeflateState();
+
+ strm.state = s;
+ s.strm = strm;
+
+ s.wrap = wrap;
+ s.gzhead = null;
+ s.w_bits = windowBits;
+ s.w_size = 1 << s.w_bits;
+ s.w_mask = s.w_size - 1;
+
+ s.hash_bits = memLevel + 7;
+ s.hash_size = 1 << s.hash_bits;
+ s.hash_mask = s.hash_size - 1;
+ s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);
+
+ s.window = new Uint8Array(s.w_size * 2);
+ s.head = new Uint16Array(s.hash_size);
+ s.prev = new Uint16Array(s.w_size);
+
+ // Don't need mem init magic for JS.
+ //s.high_water = 0; /* nothing written to s->window yet */
+
+ s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+ s.pending_buf_size = s.lit_bufsize * 4;
+
+ //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
+ //s->pending_buf = (uchf *) overlay;
+ s.pending_buf = new Uint8Array(s.pending_buf_size);
+
+ // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)
+ //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+ s.d_buf = 1 * s.lit_bufsize;
+
+ //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+ s.l_buf = (1 + 2) * s.lit_bufsize;
+
+ s.level = level;
+ s.strategy = strategy;
+ s.method = method;
+
+ return deflateReset(strm);
+ };
+
+ const deflateInit = (strm, level) => {
+
+ return deflateInit2(strm, level, Z_DEFLATED$2, MAX_WBITS$1, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY$1);
+ };
+
+
+ const deflate$2 = (strm, flush) => {
+
+ let beg, val; // for gzip header write only
+
+ if (!strm || !strm.state ||
+ flush > Z_BLOCK$1 || flush < 0) {
+ return strm ? err(strm, Z_STREAM_ERROR$2) : Z_STREAM_ERROR$2;
+ }
+
+ const s = strm.state;
+
+ if (!strm.output ||
+ (!strm.input && strm.avail_in !== 0) ||
+ (s.status === FINISH_STATE && flush !== Z_FINISH$3)) {
+ return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR$1 : Z_STREAM_ERROR$2);
+ }
+
+ s.strm = strm; /* just in case */
+ const old_flush = s.last_flush;
+ s.last_flush = flush;
+
+ /* Write the header */
+ if (s.status === INIT_STATE) {
+
+ if (s.wrap === 2) { // GZIP header
+ strm.adler = 0; //crc32(0L, Z_NULL, 0);
+ put_byte(s, 31);
+ put_byte(s, 139);
+ put_byte(s, 8);
+ if (!s.gzhead) { // s->gzhead == Z_NULL
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, s.level === 9 ? 2 :
+ (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
+ 4 : 0));
+ put_byte(s, OS_CODE);
+ s.status = BUSY_STATE;
+ }
+ else {
+ put_byte(s, (s.gzhead.text ? 1 : 0) +
+ (s.gzhead.hcrc ? 2 : 0) +
+ (!s.gzhead.extra ? 0 : 4) +
+ (!s.gzhead.name ? 0 : 8) +
+ (!s.gzhead.comment ? 0 : 16)
+ );
+ put_byte(s, s.gzhead.time & 0xff);
+ put_byte(s, (s.gzhead.time >> 8) & 0xff);
+ put_byte(s, (s.gzhead.time >> 16) & 0xff);
+ put_byte(s, (s.gzhead.time >> 24) & 0xff);
+ put_byte(s, s.level === 9 ? 2 :
+ (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?
+ 4 : 0));
+ put_byte(s, s.gzhead.os & 0xff);
+ if (s.gzhead.extra && s.gzhead.extra.length) {
+ put_byte(s, s.gzhead.extra.length & 0xff);
+ put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);
+ }
+ if (s.gzhead.hcrc) {
+ strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending, 0);
+ }
+ s.gzindex = 0;
+ s.status = EXTRA_STATE;
+ }
+ }
+ else // DEFLATE header
+ {
+ let header = (Z_DEFLATED$2 + ((s.w_bits - 8) << 4)) << 8;
+ let level_flags = -1;
+
+ if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {
+ level_flags = 0;
+ } else if (s.level < 6) {
+ level_flags = 1;
+ } else if (s.level === 6) {
+ level_flags = 2;
+ } else {
+ level_flags = 3;
+ }
+ header |= (level_flags << 6);
+ if (s.strstart !== 0) { header |= PRESET_DICT; }
+ header += 31 - (header % 31);
+
+ s.status = BUSY_STATE;
+ putShortMSB(s, header);
+
+ /* Save the adler32 of the preset dictionary: */
+ if (s.strstart !== 0) {
+ putShortMSB(s, strm.adler >>> 16);
+ putShortMSB(s, strm.adler & 0xffff);
+ }
+ strm.adler = 1; // adler32(0L, Z_NULL, 0);
+ }
+ }
+
+ //#ifdef GZIP
+ if (s.status === EXTRA_STATE) {
+ if (s.gzhead.extra/* != Z_NULL*/) {
+ beg = s.pending; /* start of bytes to update crc */
+
+ while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {
+ if (s.pending === s.pending_buf_size) {
+ if (s.gzhead.hcrc && s.pending > beg) {
+ strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
+ }
+ flush_pending(strm);
+ beg = s.pending;
+ if (s.pending === s.pending_buf_size) {
+ break;
+ }
+ }
+ put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);
+ s.gzindex++;
+ }
+ if (s.gzhead.hcrc && s.pending > beg) {
+ strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
+ }
+ if (s.gzindex === s.gzhead.extra.length) {
+ s.gzindex = 0;
+ s.status = NAME_STATE;
+ }
+ }
+ else {
+ s.status = NAME_STATE;
+ }
+ }
+ if (s.status === NAME_STATE) {
+ if (s.gzhead.name/* != Z_NULL*/) {
+ beg = s.pending; /* start of bytes to update crc */
+ //int val;
+
+ do {
+ if (s.pending === s.pending_buf_size) {
+ if (s.gzhead.hcrc && s.pending > beg) {
+ strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
+ }
+ flush_pending(strm);
+ beg = s.pending;
+ if (s.pending === s.pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ // JS specific: little magic to add zero terminator to end of string
+ if (s.gzindex < s.gzhead.name.length) {
+ val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;
+ } else {
+ val = 0;
+ }
+ put_byte(s, val);
+ } while (val !== 0);
+
+ if (s.gzhead.hcrc && s.pending > beg) {
+ strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
+ }
+ if (val === 0) {
+ s.gzindex = 0;
+ s.status = COMMENT_STATE;
+ }
+ }
+ else {
+ s.status = COMMENT_STATE;
+ }
+ }
+ if (s.status === COMMENT_STATE) {
+ if (s.gzhead.comment/* != Z_NULL*/) {
+ beg = s.pending; /* start of bytes to update crc */
+ //int val;
+
+ do {
+ if (s.pending === s.pending_buf_size) {
+ if (s.gzhead.hcrc && s.pending > beg) {
+ strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
+ }
+ flush_pending(strm);
+ beg = s.pending;
+ if (s.pending === s.pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ // JS specific: little magic to add zero terminator to end of string
+ if (s.gzindex < s.gzhead.comment.length) {
+ val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;
+ } else {
+ val = 0;
+ }
+ put_byte(s, val);
+ } while (val !== 0);
+
+ if (s.gzhead.hcrc && s.pending > beg) {
+ strm.adler = crc32_1(strm.adler, s.pending_buf, s.pending - beg, beg);
+ }
+ if (val === 0) {
+ s.status = HCRC_STATE;
+ }
+ }
+ else {
+ s.status = HCRC_STATE;
+ }
+ }
+ if (s.status === HCRC_STATE) {
+ if (s.gzhead.hcrc) {
+ if (s.pending + 2 > s.pending_buf_size) {
+ flush_pending(strm);
+ }
+ if (s.pending + 2 <= s.pending_buf_size) {
+ put_byte(s, strm.adler & 0xff);
+ put_byte(s, (strm.adler >> 8) & 0xff);
+ strm.adler = 0; //crc32(0L, Z_NULL, 0);
+ s.status = BUSY_STATE;
+ }
+ }
+ else {
+ s.status = BUSY_STATE;
+ }
+ }
+ //#endif
+
+ /* Flush as much pending output as possible */
+ if (s.pending !== 0) {
+ flush_pending(strm);
+ if (strm.avail_out === 0) {
+ /* Since avail_out is 0, deflate will be called again with
+ * more output space, but possibly with both pending and
+ * avail_in equal to zero. There won't be anything to do,
+ * but this is not an error situation so make sure we
+ * return OK instead of BUF_ERROR at next call of deflate:
+ */
+ s.last_flush = -1;
+ return Z_OK$3;
+ }
+
+ /* Make sure there is something to do and avoid duplicate consecutive
+ * flushes. For repeated and useless calls with Z_FINISH, we keep
+ * returning Z_STREAM_END instead of Z_BUF_ERROR.
+ */
+ } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&
+ flush !== Z_FINISH$3) {
+ return err(strm, Z_BUF_ERROR$1);
+ }
+
+ /* User must not provide more input after the first FINISH: */
+ if (s.status === FINISH_STATE && strm.avail_in !== 0) {
+ return err(strm, Z_BUF_ERROR$1);
+ }
+
+ /* Start a new block or continue the current one.
+ */
+ if (strm.avail_in !== 0 || s.lookahead !== 0 ||
+ (flush !== Z_NO_FLUSH$2 && s.status !== FINISH_STATE)) {
+ let bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :
+ (s.strategy === Z_RLE ? deflate_rle(s, flush) :
+ configuration_table[s.level].func(s, flush));
+
+ if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {
+ s.status = FINISH_STATE;
+ }
+ if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {
+ if (strm.avail_out === 0) {
+ s.last_flush = -1;
+ /* avoid BUF_ERROR next call, see above */
+ }
+ return Z_OK$3;
+ /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+ * of deflate should use the same flush parameter to make sure
+ * that the flush is complete. So we don't have to output an
+ * empty block here, this will be done at next call. This also
+ * ensures that for a very small output buffer, we emit at most
+ * one empty block.
+ */
+ }
+ if (bstate === BS_BLOCK_DONE) {
+ if (flush === Z_PARTIAL_FLUSH) {
+ _tr_align(s);
+ }
+ else if (flush !== Z_BLOCK$1) { /* FULL_FLUSH or SYNC_FLUSH */
+
+ _tr_stored_block(s, 0, 0, false);
+ /* For a full flush, this empty block will be recognized
+ * as a special marker by inflate_sync().
+ */
+ if (flush === Z_FULL_FLUSH$1) {
+ /*** CLEAR_HASH(s); ***/ /* forget history */
+ zero$2(s.head); // Fill with NIL (= 0);
+
+ if (s.lookahead === 0) {
+ s.strstart = 0;
+ s.block_start = 0;
+ s.insert = 0;
+ }
+ }
+ }
+ flush_pending(strm);
+ if (strm.avail_out === 0) {
+ s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+ return Z_OK$3;
+ }
+ }
+ }
+ //Assert(strm->avail_out > 0, "bug2");
+ //if (strm.avail_out <= 0) { throw new Error("bug2");}
+
+ if (flush !== Z_FINISH$3) { return Z_OK$3; }
+ if (s.wrap <= 0) { return Z_STREAM_END$3; }
+
+ /* Write the trailer */
+ if (s.wrap === 2) {
+ put_byte(s, strm.adler & 0xff);
+ put_byte(s, (strm.adler >> 8) & 0xff);
+ put_byte(s, (strm.adler >> 16) & 0xff);
+ put_byte(s, (strm.adler >> 24) & 0xff);
+ put_byte(s, strm.total_in & 0xff);
+ put_byte(s, (strm.total_in >> 8) & 0xff);
+ put_byte(s, (strm.total_in >> 16) & 0xff);
+ put_byte(s, (strm.total_in >> 24) & 0xff);
+ }
+ else
+ {
+ putShortMSB(s, strm.adler >>> 16);
+ putShortMSB(s, strm.adler & 0xffff);
+ }
+
+ flush_pending(strm);
+ /* If avail_out is zero, the application will call deflate again
+ * to flush the rest.
+ */
+ if (s.wrap > 0) { s.wrap = -s.wrap; }
+ /* write the trailer only once! */
+ return s.pending !== 0 ? Z_OK$3 : Z_STREAM_END$3;
+ };
+
+
+ const deflateEnd = (strm) => {
+
+ if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
+ return Z_STREAM_ERROR$2;
+ }
+
+ const status = strm.state.status;
+ if (status !== INIT_STATE &&
+ status !== EXTRA_STATE &&
+ status !== NAME_STATE &&
+ status !== COMMENT_STATE &&
+ status !== HCRC_STATE &&
+ status !== BUSY_STATE &&
+ status !== FINISH_STATE
+ ) {
+ return err(strm, Z_STREAM_ERROR$2);
+ }
+
+ strm.state = null;
+
+ return status === BUSY_STATE ? err(strm, Z_DATA_ERROR$2) : Z_OK$3;
+ };
+
+
+ /* =========================================================================
+ * Initializes the compression dictionary from the given byte
+ * sequence without producing any compressed output.
+ */
+ const deflateSetDictionary = (strm, dictionary) => {
+
+ let dictLength = dictionary.length;
+
+ if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {
+ return Z_STREAM_ERROR$2;
+ }
+
+ const s = strm.state;
+ const wrap = s.wrap;
+
+ if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {
+ return Z_STREAM_ERROR$2;
+ }
+
+ /* when using zlib wrappers, compute Adler-32 for provided dictionary */
+ if (wrap === 1) {
+ /* adler32(strm->adler, dictionary, dictLength); */
+ strm.adler = adler32_1(strm.adler, dictionary, dictLength, 0);
+ }
+
+ s.wrap = 0; /* avoid computing Adler-32 in read_buf */
+
+ /* if dictionary would fill window, just replace the history */
+ if (dictLength >= s.w_size) {
+ if (wrap === 0) { /* already empty otherwise */
+ /*** CLEAR_HASH(s); ***/
+ zero$2(s.head); // Fill with NIL (= 0);
+ s.strstart = 0;
+ s.block_start = 0;
+ s.insert = 0;
+ }
+ /* use the tail */
+ // dictionary = dictionary.slice(dictLength - s.w_size);
+ let tmpDict = new Uint8Array(s.w_size);
+ tmpDict.set(dictionary.subarray(dictLength - s.w_size, dictLength), 0);
+ dictionary = tmpDict;
+ dictLength = s.w_size;
+ }
+ /* insert dictionary into window and hash */
+ const avail = strm.avail_in;
+ const next = strm.next_in;
+ const input = strm.input;
+ strm.avail_in = dictLength;
+ strm.next_in = 0;
+ strm.input = dictionary;
+ fill_window(s);
+ while (s.lookahead >= MIN_MATCH) {
+ let str = s.strstart;
+ let n = s.lookahead - (MIN_MATCH - 1);
+ do {
+ /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */
+ s.ins_h = HASH(s, s.ins_h, s.window[str + MIN_MATCH - 1]);
+
+ s.prev[str & s.w_mask] = s.head[s.ins_h];
+
+ s.head[s.ins_h] = str;
+ str++;
+ } while (--n);
+ s.strstart = str;
+ s.lookahead = MIN_MATCH - 1;
+ fill_window(s);
+ }
+ s.strstart += s.lookahead;
+ s.block_start = s.strstart;
+ s.insert = s.lookahead;
+ s.lookahead = 0;
+ s.match_length = s.prev_length = MIN_MATCH - 1;
+ s.match_available = 0;
+ strm.next_in = next;
+ strm.input = input;
+ strm.avail_in = avail;
+ s.wrap = wrap;
+ return Z_OK$3;
+ };
+
+
+ var deflateInit_1 = deflateInit;
+ var deflateInit2_1 = deflateInit2;
+ var deflateReset_1 = deflateReset;
+ var deflateResetKeep_1 = deflateResetKeep;
+ var deflateSetHeader_1 = deflateSetHeader;
+ var deflate_2$1 = deflate$2;
+ var deflateEnd_1 = deflateEnd;
+ var deflateSetDictionary_1 = deflateSetDictionary;
+ var deflateInfo = 'pako deflate (from Nodeca project)';
+
+ /* Not implemented
+ module.exports.deflateBound = deflateBound;
+ module.exports.deflateCopy = deflateCopy;
+ module.exports.deflateParams = deflateParams;
+ module.exports.deflatePending = deflatePending;
+ module.exports.deflatePrime = deflatePrime;
+ module.exports.deflateTune = deflateTune;
+ */
+
+ var deflate_1$2 = {
+ deflateInit: deflateInit_1,
+ deflateInit2: deflateInit2_1,
+ deflateReset: deflateReset_1,
+ deflateResetKeep: deflateResetKeep_1,
+ deflateSetHeader: deflateSetHeader_1,
+ deflate: deflate_2$1,
+ deflateEnd: deflateEnd_1,
+ deflateSetDictionary: deflateSetDictionary_1,
+ deflateInfo: deflateInfo
+ };
+
+ const _has = (obj, key) => {
+ return Object.prototype.hasOwnProperty.call(obj, key);
+ };
+
+ var assign = function (obj /*from1, from2, from3, ...*/) {
+ const sources = Array.prototype.slice.call(arguments, 1);
+ while (sources.length) {
+ const source = sources.shift();
+ if (!source) { continue; }
+
+ if (typeof source !== 'object') {
+ throw new TypeError(source + 'must be non-object');
+ }
+
+ for (const p in source) {
+ if (_has(source, p)) {
+ obj[p] = source[p];
+ }
+ }
+ }
+
+ return obj;
+ };
+
+
+ // Join array of chunks to single array.
+ var flattenChunks = (chunks) => {
+ // calculate data length
+ let len = 0;
+
+ for (let i = 0, l = chunks.length; i < l; i++) {
+ len += chunks[i].length;
+ }
+
+ // join chunks
+ const result = new Uint8Array(len);
+
+ for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {
+ let chunk = chunks[i];
+ result.set(chunk, pos);
+ pos += chunk.length;
+ }
+
+ return result;
+ };
+
+ var common = {
+ assign: assign,
+ flattenChunks: flattenChunks
+ };
+
+ // String encode/decode helpers
+
+
+ // Quick check if we can use fast array to bin string conversion
+ //
+ // - apply(Array) can fail on Android 2.2
+ // - apply(Uint8Array) can fail on iOS 5.1 Safari
+ //
+ let STR_APPLY_UIA_OK = true;
+
+ try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }
+
+
+ // Table with utf8 lengths (calculated by first byte of sequence)
+ // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,
+ // because max possible codepoint is 0x10ffff
+ const _utf8len = new Uint8Array(256);
+ for (let q = 0; q < 256; q++) {
+ _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);
+ }
+ _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start
+
+
+ // convert string to array (typed, when possible)
+ var string2buf = (str) => {
+ if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {
+ return new TextEncoder().encode(str);
+ }
+
+ let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;
+
+ // count binary size
+ for (m_pos = 0; m_pos < str_len; m_pos++) {
+ c = str.charCodeAt(m_pos);
+ if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
+ c2 = str.charCodeAt(m_pos + 1);
+ if ((c2 & 0xfc00) === 0xdc00) {
+ c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+ m_pos++;
+ }
+ }
+ buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;
+ }
+
+ // allocate buffer
+ buf = new Uint8Array(buf_len);
+
+ // convert
+ for (i = 0, m_pos = 0; i < buf_len; m_pos++) {
+ c = str.charCodeAt(m_pos);
+ if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {
+ c2 = str.charCodeAt(m_pos + 1);
+ if ((c2 & 0xfc00) === 0xdc00) {
+ c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);
+ m_pos++;
+ }
+ }
+ if (c < 0x80) {
+ /* one byte */
+ buf[i++] = c;
+ } else if (c < 0x800) {
+ /* two bytes */
+ buf[i++] = 0xC0 | (c >>> 6);
+ buf[i++] = 0x80 | (c & 0x3f);
+ } else if (c < 0x10000) {
+ /* three bytes */
+ buf[i++] = 0xE0 | (c >>> 12);
+ buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+ buf[i++] = 0x80 | (c & 0x3f);
+ } else {
+ /* four bytes */
+ buf[i++] = 0xf0 | (c >>> 18);
+ buf[i++] = 0x80 | (c >>> 12 & 0x3f);
+ buf[i++] = 0x80 | (c >>> 6 & 0x3f);
+ buf[i++] = 0x80 | (c & 0x3f);
+ }
+ }
+
+ return buf;
+ };
+
+ // Helper
+ const buf2binstring = (buf, len) => {
+ // On Chrome, the arguments in a function call that are allowed is `65534`.
+ // If the length of the buffer is smaller than that, we can use this optimization,
+ // otherwise we will take a slower path.
+ if (len < 65534) {
+ if (buf.subarray && STR_APPLY_UIA_OK) {
+ return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));
+ }
+ }
+
+ let result = '';
+ for (let i = 0; i < len; i++) {
+ result += String.fromCharCode(buf[i]);
+ }
+ return result;
+ };
+
+
+ // convert array to string
+ var buf2string = (buf, max) => {
+ const len = max || buf.length;
+
+ if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {
+ return new TextDecoder().decode(buf.subarray(0, max));
+ }
+
+ let i, out;
+
+ // Reserve max possible length (2 words per char)
+ // NB: by unknown reasons, Array is significantly faster for
+ // String.fromCharCode.apply than Uint16Array.
+ const utf16buf = new Array(len * 2);
+
+ for (out = 0, i = 0; i < len;) {
+ let c = buf[i++];
+ // quick process ascii
+ if (c < 0x80) { utf16buf[out++] = c; continue; }
+
+ let c_len = _utf8len[c];
+ // skip 5 & 6 byte codes
+ if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }
+
+ // apply mask on first byte
+ c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;
+ // join the rest
+ while (c_len > 1 && i < len) {
+ c = (c << 6) | (buf[i++] & 0x3f);
+ c_len--;
+ }
+
+ // terminated by end of string?
+ if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }
+
+ if (c < 0x10000) {
+ utf16buf[out++] = c;
+ } else {
+ c -= 0x10000;
+ utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);
+ utf16buf[out++] = 0xdc00 | (c & 0x3ff);
+ }
+ }
+
+ return buf2binstring(utf16buf, out);
+ };
+
+
+ // Calculate max possible position in utf8 buffer,
+ // that will not break sequence. If that's not possible
+ // - (very small limits) return max size as is.
+ //
+ // buf[] - utf8 bytes array
+ // max - length limit (mandatory);
+ var utf8border = (buf, max) => {
+
+ max = max || buf.length;
+ if (max > buf.length) { max = buf.length; }
+
+ // go back from last position, until start of sequence found
+ let pos = max - 1;
+ while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }
+
+ // Very small and broken sequence,
+ // return max, because we should return something anyway.
+ if (pos < 0) { return max; }
+
+ // If we came to start of buffer - that means buffer is too small,
+ // return max too.
+ if (pos === 0) { return max; }
+
+ return (pos + _utf8len[buf[pos]] > max) ? pos : max;
+ };
+
+ var strings = {
+ string2buf: string2buf,
+ buf2string: buf2string,
+ utf8border: utf8border
+ };
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ function ZStream() {
+ /* next input byte */
+ this.input = null; // JS specific, because we have no pointers
+ this.next_in = 0;
+ /* number of bytes available at input */
+ this.avail_in = 0;
+ /* total number of input bytes read so far */
+ this.total_in = 0;
+ /* next output byte should be put there */
+ this.output = null; // JS specific, because we have no pointers
+ this.next_out = 0;
+ /* remaining free space at output */
+ this.avail_out = 0;
+ /* total number of bytes output so far */
+ this.total_out = 0;
+ /* last error message, NULL if no error */
+ this.msg = ''/*Z_NULL*/;
+ /* not visible by applications */
+ this.state = null;
+ /* best guess about the data type: binary or text */
+ this.data_type = 2/*Z_UNKNOWN*/;
+ /* adler32 value of the uncompressed data */
+ this.adler = 0;
+ }
+
+ var zstream = ZStream;
+
+ const toString$1 = Object.prototype.toString;
+
+ /* Public constants ==========================================================*/
+ /* ===========================================================================*/
+
+ const {
+ Z_NO_FLUSH: Z_NO_FLUSH$1, Z_SYNC_FLUSH, Z_FULL_FLUSH, Z_FINISH: Z_FINISH$2,
+ Z_OK: Z_OK$2, Z_STREAM_END: Z_STREAM_END$2,
+ Z_DEFAULT_COMPRESSION,
+ Z_DEFAULT_STRATEGY,
+ Z_DEFLATED: Z_DEFLATED$1
+ } = constants$2;
+
+ /* ===========================================================================*/
+
+
+ /**
+ * class Deflate
+ *
+ * Generic JS-style wrapper for zlib calls. If you don't need
+ * streaming behaviour - use more simple functions: [[deflate]],
+ * [[deflateRaw]] and [[gzip]].
+ **/
+
+ /* internal
+ * Deflate.chunks -> Array
+ *
+ * Chunks of output data, if [[Deflate#onData]] not overridden.
+ **/
+
+ /**
+ * Deflate.result -> Uint8Array
+ *
+ * Compressed result, generated by default [[Deflate#onData]]
+ * and [[Deflate#onEnd]] handlers. Filled after you push last chunk
+ * (call [[Deflate#push]] with `Z_FINISH` / `true` param).
+ **/
+
+ /**
+ * Deflate.err -> Number
+ *
+ * Error code after deflate finished. 0 (Z_OK) on success.
+ * You will not need it in real life, because deflate errors
+ * are possible only on wrong options or bad `onData` / `onEnd`
+ * custom handlers.
+ **/
+
+ /**
+ * Deflate.msg -> String
+ *
+ * Error message, if [[Deflate.err]] != 0
+ **/
+
+
+ /**
+ * new Deflate(options)
+ * - options (Object): zlib deflate options.
+ *
+ * Creates new deflator instance with specified params. Throws exception
+ * on bad params. Supported options:
+ *
+ * - `level`
+ * - `windowBits`
+ * - `memLevel`
+ * - `strategy`
+ * - `dictionary`
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Additional options, for internal needs:
+ *
+ * - `chunkSize` - size of generated data chunks (16K by default)
+ * - `raw` (Boolean) - do raw deflate
+ * - `gzip` (Boolean) - create gzip wrapper
+ * - `header` (Object) - custom header for gzip
+ * - `text` (Boolean) - true if compressed data believed to be text
+ * - `time` (Number) - modification time, unix timestamp
+ * - `os` (Number) - operation system code
+ * - `extra` (Array) - array of bytes with extra data (max 65536)
+ * - `name` (String) - file name (binary string)
+ * - `comment` (String) - comment (binary string)
+ * - `hcrc` (Boolean) - true if header crc should be added
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * const pako = require('pako')
+ * , chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])
+ * , chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);
+ *
+ * const deflate = new pako.Deflate({ level: 3});
+ *
+ * deflate.push(chunk1, false);
+ * deflate.push(chunk2, true); // true -> last chunk
+ *
+ * if (deflate.err) { throw new Error(deflate.err); }
+ *
+ * console.log(deflate.result);
+ * ```
+ **/
+ function Deflate$1(options) {
+ this.options = common.assign({
+ level: Z_DEFAULT_COMPRESSION,
+ method: Z_DEFLATED$1,
+ chunkSize: 16384,
+ windowBits: 15,
+ memLevel: 8,
+ strategy: Z_DEFAULT_STRATEGY
+ }, options || {});
+
+ let opt = this.options;
+
+ if (opt.raw && (opt.windowBits > 0)) {
+ opt.windowBits = -opt.windowBits;
+ }
+
+ else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {
+ opt.windowBits += 16;
+ }
+
+ this.err = 0; // error code, if happens (0 = Z_OK)
+ this.msg = ''; // error message
+ this.ended = false; // used to avoid multiple onEnd() calls
+ this.chunks = []; // chunks of compressed data
+
+ this.strm = new zstream();
+ this.strm.avail_out = 0;
+
+ let status = deflate_1$2.deflateInit2(
+ this.strm,
+ opt.level,
+ opt.method,
+ opt.windowBits,
+ opt.memLevel,
+ opt.strategy
+ );
+
+ if (status !== Z_OK$2) {
+ throw new Error(messages[status]);
+ }
+
+ if (opt.header) {
+ deflate_1$2.deflateSetHeader(this.strm, opt.header);
+ }
+
+ if (opt.dictionary) {
+ let dict;
+ // Convert data if needed
+ if (typeof opt.dictionary === 'string') {
+ // If we need to compress text, change encoding to utf8.
+ dict = strings.string2buf(opt.dictionary);
+ } else if (toString$1.call(opt.dictionary) === '[object ArrayBuffer]') {
+ dict = new Uint8Array(opt.dictionary);
+ } else {
+ dict = opt.dictionary;
+ }
+
+ status = deflate_1$2.deflateSetDictionary(this.strm, dict);
+
+ if (status !== Z_OK$2) {
+ throw new Error(messages[status]);
+ }
+
+ this._dict_set = true;
+ }
+ }
+
+ /**
+ * Deflate#push(data[, flush_mode]) -> Boolean
+ * - data (Uint8Array|ArrayBuffer|String): input data. Strings will be
+ * converted to utf8 byte sequence.
+ * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.
+ * See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.
+ *
+ * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with
+ * new compressed chunks. Returns `true` on success. The last data block must
+ * have `flush_mode` Z_FINISH (or `true`). That will flush internal pending
+ * buffers and call [[Deflate#onEnd]].
+ *
+ * On fail call [[Deflate#onEnd]] with error code and return false.
+ *
+ * ##### Example
+ *
+ * ```javascript
+ * push(chunk, false); // push one of data chunks
+ * ...
+ * push(chunk, true); // push last chunk
+ * ```
+ **/
+ Deflate$1.prototype.push = function (data, flush_mode) {
+ const strm = this.strm;
+ const chunkSize = this.options.chunkSize;
+ let status, _flush_mode;
+
+ if (this.ended) { return false; }
+
+ if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;
+ else _flush_mode = flush_mode === true ? Z_FINISH$2 : Z_NO_FLUSH$1;
+
+ // Convert data if needed
+ if (typeof data === 'string') {
+ // If we need to compress text, change encoding to utf8.
+ strm.input = strings.string2buf(data);
+ } else if (toString$1.call(data) === '[object ArrayBuffer]') {
+ strm.input = new Uint8Array(data);
+ } else {
+ strm.input = data;
+ }
+
+ strm.next_in = 0;
+ strm.avail_in = strm.input.length;
+
+ for (;;) {
+ if (strm.avail_out === 0) {
+ strm.output = new Uint8Array(chunkSize);
+ strm.next_out = 0;
+ strm.avail_out = chunkSize;
+ }
+
+ // Make sure avail_out > 6 to avoid repeating markers
+ if ((_flush_mode === Z_SYNC_FLUSH || _flush_mode === Z_FULL_FLUSH) && strm.avail_out <= 6) {
+ this.onData(strm.output.subarray(0, strm.next_out));
+ strm.avail_out = 0;
+ continue;
+ }
+
+ status = deflate_1$2.deflate(strm, _flush_mode);
+
+ // Ended => flush and finish
+ if (status === Z_STREAM_END$2) {
+ if (strm.next_out > 0) {
+ this.onData(strm.output.subarray(0, strm.next_out));
+ }
+ status = deflate_1$2.deflateEnd(this.strm);
+ this.onEnd(status);
+ this.ended = true;
+ return status === Z_OK$2;
+ }
+
+ // Flush if out buffer full
+ if (strm.avail_out === 0) {
+ this.onData(strm.output);
+ continue;
+ }
+
+ // Flush if requested and has data
+ if (_flush_mode > 0 && strm.next_out > 0) {
+ this.onData(strm.output.subarray(0, strm.next_out));
+ strm.avail_out = 0;
+ continue;
+ }
+
+ if (strm.avail_in === 0) break;
+ }
+
+ return true;
+ };
+
+
+ /**
+ * Deflate#onData(chunk) -> Void
+ * - chunk (Uint8Array): output data.
+ *
+ * By default, stores data blocks in `chunks[]` property and glue
+ * those in `onEnd`. Override this handler, if you need another behaviour.
+ **/
+ Deflate$1.prototype.onData = function (chunk) {
+ this.chunks.push(chunk);
+ };
+
+
+ /**
+ * Deflate#onEnd(status) -> Void
+ * - status (Number): deflate status. 0 (Z_OK) on success,
+ * other if not.
+ *
+ * Called once after you tell deflate that the input stream is
+ * complete (Z_FINISH). By default - join collected chunks,
+ * free memory and fill `results` / `err` properties.
+ **/
+ Deflate$1.prototype.onEnd = function (status) {
+ // On success - join
+ if (status === Z_OK$2) {
+ this.result = common.flattenChunks(this.chunks);
+ }
+ this.chunks = [];
+ this.err = status;
+ this.msg = this.strm.msg;
+ };
+
+
+ /**
+ * deflate(data[, options]) -> Uint8Array
+ * - data (Uint8Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * Compress `data` with deflate algorithm and `options`.
+ *
+ * Supported options are:
+ *
+ * - level
+ * - windowBits
+ * - memLevel
+ * - strategy
+ * - dictionary
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Sugar (options):
+ *
+ * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
+ * negative windowBits implicitly.
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * const pako = require('pako')
+ * const data = new Uint8Array([1,2,3,4,5,6,7,8,9]);
+ *
+ * console.log(pako.deflate(data));
+ * ```
+ **/
+ function deflate$1(input, options) {
+ const deflator = new Deflate$1(options);
+
+ deflator.push(input, true);
+
+ // That will never happens, if you don't cheat with options :)
+ if (deflator.err) { throw deflator.msg || messages[deflator.err]; }
+
+ return deflator.result;
+ }
+
+
+ /**
+ * deflateRaw(data[, options]) -> Uint8Array
+ * - data (Uint8Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * The same as [[deflate]], but creates raw data, without wrapper
+ * (header and adler32 crc).
+ **/
+ function deflateRaw$1(input, options) {
+ options = options || {};
+ options.raw = true;
+ return deflate$1(input, options);
+ }
+
+
+ /**
+ * gzip(data[, options]) -> Uint8Array
+ * - data (Uint8Array|String): input data to compress.
+ * - options (Object): zlib deflate options.
+ *
+ * The same as [[deflate]], but create gzip wrapper instead of
+ * deflate one.
+ **/
+ function gzip$1(input, options) {
+ options = options || {};
+ options.gzip = true;
+ return deflate$1(input, options);
+ }
+
+
+ var Deflate_1$1 = Deflate$1;
+ var deflate_2 = deflate$1;
+ var deflateRaw_1$1 = deflateRaw$1;
+ var gzip_1$1 = gzip$1;
+ var constants$1 = constants$2;
+
+ var deflate_1$1 = {
+ Deflate: Deflate_1$1,
+ deflate: deflate_2,
+ deflateRaw: deflateRaw_1$1,
+ gzip: gzip_1$1,
+ constants: constants$1
+ };
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ // See state defs from inflate.js
+ const BAD$1 = 30; /* got a data error -- remain here until reset */
+ const TYPE$1 = 12; /* i: waiting for type bits, including last-flag bit */
+
+ /*
+ Decode literal, length, and distance codes and write out the resulting
+ literal and match bytes until either not enough input or output is
+ available, an end-of-block is encountered, or a data error is encountered.
+ When large enough input and output buffers are supplied to inflate(), for
+ example, a 16K input buffer and a 64K output buffer, more than 95% of the
+ inflate execution time is spent in this routine.
+
+ Entry assumptions:
+
+ state.mode === LEN
+ strm.avail_in >= 6
+ strm.avail_out >= 258
+ start >= strm.avail_out
+ state.bits < 8
+
+ On return, state.mode is one of:
+
+ LEN -- ran out of enough output space or enough available input
+ TYPE -- reached end of block code, inflate() to interpret next block
+ BAD -- error in block data
+
+ Notes:
+
+ - The maximum input bits used by a length/distance pair is 15 bits for the
+ length code, 5 bits for the length extra, 15 bits for the distance code,
+ and 13 bits for the distance extra. This totals 48 bits, or six bytes.
+ Therefore if strm.avail_in >= 6, then there is enough input to avoid
+ checking for available input while decoding.
+
+ - The maximum bytes that a single length/distance pair can output is 258
+ bytes, which is the maximum length that can be coded. inflate_fast()
+ requires strm.avail_out >= 258 for each loop to avoid checking for
+ output space.
+ */
+ var inffast = function inflate_fast(strm, start) {
+ let _in; /* local strm.input */
+ let last; /* have enough input while in < last */
+ let _out; /* local strm.output */
+ let beg; /* inflate()'s initial strm.output */
+ let end; /* while out < end, enough space available */
+ //#ifdef INFLATE_STRICT
+ let dmax; /* maximum distance from zlib header */
+ //#endif
+ let wsize; /* window size or zero if not using window */
+ let whave; /* valid bytes in the window */
+ let wnext; /* window write index */
+ // Use `s_window` instead `window`, avoid conflict with instrumentation tools
+ let s_window; /* allocated sliding window, if wsize != 0 */
+ let hold; /* local strm.hold */
+ let bits; /* local strm.bits */
+ let lcode; /* local strm.lencode */
+ let dcode; /* local strm.distcode */
+ let lmask; /* mask for first level of length codes */
+ let dmask; /* mask for first level of distance codes */
+ let here; /* retrieved table entry */
+ let op; /* code bits, operation, extra bits, or */
+ /* window position, window bytes to copy */
+ let len; /* match length, unused bytes */
+ let dist; /* match distance */
+ let from; /* where to copy match from */
+ let from_source;
+
+
+ let input, output; // JS specific, because we have no pointers
+
+ /* copy state to local variables */
+ const state = strm.state;
+ //here = state.here;
+ _in = strm.next_in;
+ input = strm.input;
+ last = _in + (strm.avail_in - 5);
+ _out = strm.next_out;
+ output = strm.output;
+ beg = _out - (start - strm.avail_out);
+ end = _out + (strm.avail_out - 257);
+ //#ifdef INFLATE_STRICT
+ dmax = state.dmax;
+ //#endif
+ wsize = state.wsize;
+ whave = state.whave;
+ wnext = state.wnext;
+ s_window = state.window;
+ hold = state.hold;
+ bits = state.bits;
+ lcode = state.lencode;
+ dcode = state.distcode;
+ lmask = (1 << state.lenbits) - 1;
+ dmask = (1 << state.distbits) - 1;
+
+
+ /* decode literals and length/distances until end-of-block or not enough
+ input data or output space */
+
+ top:
+ do {
+ if (bits < 15) {
+ hold += input[_in++] << bits;
+ bits += 8;
+ hold += input[_in++] << bits;
+ bits += 8;
+ }
+
+ here = lcode[hold & lmask];
+
+ dolen:
+ for (;;) { // Goto emulation
+ op = here >>> 24/*here.bits*/;
+ hold >>>= op;
+ bits -= op;
+ op = (here >>> 16) & 0xff/*here.op*/;
+ if (op === 0) { /* literal */
+ //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ // "inflate: literal '%c'\n" :
+ // "inflate: literal 0x%02x\n", here.val));
+ output[_out++] = here & 0xffff/*here.val*/;
+ }
+ else if (op & 16) { /* length base */
+ len = here & 0xffff/*here.val*/;
+ op &= 15; /* number of extra bits */
+ if (op) {
+ if (bits < op) {
+ hold += input[_in++] << bits;
+ bits += 8;
+ }
+ len += hold & ((1 << op) - 1);
+ hold >>>= op;
+ bits -= op;
+ }
+ //Tracevv((stderr, "inflate: length %u\n", len));
+ if (bits < 15) {
+ hold += input[_in++] << bits;
+ bits += 8;
+ hold += input[_in++] << bits;
+ bits += 8;
+ }
+ here = dcode[hold & dmask];
+
+ dodist:
+ for (;;) { // goto emulation
+ op = here >>> 24/*here.bits*/;
+ hold >>>= op;
+ bits -= op;
+ op = (here >>> 16) & 0xff/*here.op*/;
+
+ if (op & 16) { /* distance base */
+ dist = here & 0xffff/*here.val*/;
+ op &= 15; /* number of extra bits */
+ if (bits < op) {
+ hold += input[_in++] << bits;
+ bits += 8;
+ if (bits < op) {
+ hold += input[_in++] << bits;
+ bits += 8;
+ }
+ }
+ dist += hold & ((1 << op) - 1);
+ //#ifdef INFLATE_STRICT
+ if (dist > dmax) {
+ strm.msg = 'invalid distance too far back';
+ state.mode = BAD$1;
+ break top;
+ }
+ //#endif
+ hold >>>= op;
+ bits -= op;
+ //Tracevv((stderr, "inflate: distance %u\n", dist));
+ op = _out - beg; /* max distance in output */
+ if (dist > op) { /* see if copy from window */
+ op = dist - op; /* distance back in window */
+ if (op > whave) {
+ if (state.sane) {
+ strm.msg = 'invalid distance too far back';
+ state.mode = BAD$1;
+ break top;
+ }
+
+ // (!) This block is disabled in zlib defaults,
+ // don't enable it for binary compatibility
+ //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ // if (len <= op - whave) {
+ // do {
+ // output[_out++] = 0;
+ // } while (--len);
+ // continue top;
+ // }
+ // len -= op - whave;
+ // do {
+ // output[_out++] = 0;
+ // } while (--op > whave);
+ // if (op === 0) {
+ // from = _out - dist;
+ // do {
+ // output[_out++] = output[from++];
+ // } while (--len);
+ // continue top;
+ // }
+ //#endif
+ }
+ from = 0; // window index
+ from_source = s_window;
+ if (wnext === 0) { /* very common case */
+ from += wsize - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ output[_out++] = s_window[from++];
+ } while (--op);
+ from = _out - dist; /* rest from output */
+ from_source = output;
+ }
+ }
+ else if (wnext < op) { /* wrap around window */
+ from += wsize + wnext - op;
+ op -= wnext;
+ if (op < len) { /* some from end of window */
+ len -= op;
+ do {
+ output[_out++] = s_window[from++];
+ } while (--op);
+ from = 0;
+ if (wnext < len) { /* some from start of window */
+ op = wnext;
+ len -= op;
+ do {
+ output[_out++] = s_window[from++];
+ } while (--op);
+ from = _out - dist; /* rest from output */
+ from_source = output;
+ }
+ }
+ }
+ else { /* contiguous in window */
+ from += wnext - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ output[_out++] = s_window[from++];
+ } while (--op);
+ from = _out - dist; /* rest from output */
+ from_source = output;
+ }
+ }
+ while (len > 2) {
+ output[_out++] = from_source[from++];
+ output[_out++] = from_source[from++];
+ output[_out++] = from_source[from++];
+ len -= 3;
+ }
+ if (len) {
+ output[_out++] = from_source[from++];
+ if (len > 1) {
+ output[_out++] = from_source[from++];
+ }
+ }
+ }
+ else {
+ from = _out - dist; /* copy direct from output */
+ do { /* minimum length is three */
+ output[_out++] = output[from++];
+ output[_out++] = output[from++];
+ output[_out++] = output[from++];
+ len -= 3;
+ } while (len > 2);
+ if (len) {
+ output[_out++] = output[from++];
+ if (len > 1) {
+ output[_out++] = output[from++];
+ }
+ }
+ }
+ }
+ else if ((op & 64) === 0) { /* 2nd level distance code */
+ here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
+ continue dodist;
+ }
+ else {
+ strm.msg = 'invalid distance code';
+ state.mode = BAD$1;
+ break top;
+ }
+
+ break; // need to emulate goto via "continue"
+ }
+ }
+ else if ((op & 64) === 0) { /* 2nd level length code */
+ here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];
+ continue dolen;
+ }
+ else if (op & 32) { /* end-of-block */
+ //Tracevv((stderr, "inflate: end of block\n"));
+ state.mode = TYPE$1;
+ break top;
+ }
+ else {
+ strm.msg = 'invalid literal/length code';
+ state.mode = BAD$1;
+ break top;
+ }
+
+ break; // need to emulate goto via "continue"
+ }
+ } while (_in < last && _out < end);
+
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+ len = bits >> 3;
+ _in -= len;
+ bits -= len << 3;
+ hold &= (1 << bits) - 1;
+
+ /* update state and return */
+ strm.next_in = _in;
+ strm.next_out = _out;
+ strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));
+ strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));
+ state.hold = hold;
+ state.bits = bits;
+ return;
+ };
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ const MAXBITS = 15;
+ const ENOUGH_LENS$1 = 852;
+ const ENOUGH_DISTS$1 = 592;
+ //const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
+
+ const CODES$1 = 0;
+ const LENS$1 = 1;
+ const DISTS$1 = 2;
+
+ const lbase = new Uint16Array([ /* Length codes 257..285 base */
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
+ 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0
+ ]);
+
+ const lext = new Uint8Array([ /* Length codes 257..285 extra */
+ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78
+ ]);
+
+ const dbase = new Uint16Array([ /* Distance codes 0..29 base */
+ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
+ 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
+ 8193, 12289, 16385, 24577, 0, 0
+ ]);
+
+ const dext = new Uint8Array([ /* Distance codes 0..29 extra */
+ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+ 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+ 28, 28, 29, 29, 64, 64
+ ]);
+
+ const inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>
+ {
+ const bits = opts.bits;
+ //here = opts.here; /* table entry for duplication */
+
+ let len = 0; /* a code's length in bits */
+ let sym = 0; /* index of code symbols */
+ let min = 0, max = 0; /* minimum and maximum code lengths */
+ let root = 0; /* number of index bits for root table */
+ let curr = 0; /* number of index bits for current table */
+ let drop = 0; /* code bits to drop for sub-table */
+ let left = 0; /* number of prefix codes available */
+ let used = 0; /* code entries in table used */
+ let huff = 0; /* Huffman code */
+ let incr; /* for incrementing code, index */
+ let fill; /* index for replicating entries */
+ let low; /* low bits for current root entry */
+ let mask; /* mask for low root bits */
+ let next; /* next available space in table */
+ let base = null; /* base value table to use */
+ let base_index = 0;
+ // let shoextra; /* extra bits table to use */
+ let end; /* use base and extra for symbol > end */
+ const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */
+ const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */
+ let extra = null;
+ let extra_index = 0;
+
+ let here_bits, here_op, here_val;
+
+ /*
+ Process a set of code lengths to create a canonical Huffman code. The
+ code lengths are lens[0..codes-1]. Each length corresponds to the
+ symbols 0..codes-1. The Huffman code is generated by first sorting the
+ symbols by length from short to long, and retaining the symbol order
+ for codes with equal lengths. Then the code starts with all zero bits
+ for the first code of the shortest length, and the codes are integer
+ increments for the same length, and zeros are appended as the length
+ increases. For the deflate format, these bits are stored backwards
+ from their more natural integer increment ordering, and so when the
+ decoding tables are built in the large loop below, the integer codes
+ are incremented backwards.
+
+ This routine assumes, but does not check, that all of the entries in
+ lens[] are in the range 0..MAXBITS. The caller must assure this.
+ 1..MAXBITS is interpreted as that code length. zero means that that
+ symbol does not occur in this code.
+
+ The codes are sorted by computing a count of codes for each length,
+ creating from that a table of starting indices for each length in the
+ sorted table, and then entering the symbols in order in the sorted
+ table. The sorted table is work[], with that space being provided by
+ the caller.
+
+ The length counts are used for other purposes as well, i.e. finding
+ the minimum and maximum length codes, determining if there are any
+ codes at all, checking for a valid set of lengths, and looking ahead
+ at length counts to determine sub-table sizes when building the
+ decoding tables.
+ */
+
+ /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
+ for (len = 0; len <= MAXBITS; len++) {
+ count[len] = 0;
+ }
+ for (sym = 0; sym < codes; sym++) {
+ count[lens[lens_index + sym]]++;
+ }
+
+ /* bound code lengths, force root to be within code lengths */
+ root = bits;
+ for (max = MAXBITS; max >= 1; max--) {
+ if (count[max] !== 0) { break; }
+ }
+ if (root > max) {
+ root = max;
+ }
+ if (max === 0) { /* no symbols to code at all */
+ //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */
+ //table.bits[opts.table_index] = 1; //here.bits = (var char)1;
+ //table.val[opts.table_index++] = 0; //here.val = (var short)0;
+ table[table_index++] = (1 << 24) | (64 << 16) | 0;
+
+
+ //table.op[opts.table_index] = 64;
+ //table.bits[opts.table_index] = 1;
+ //table.val[opts.table_index++] = 0;
+ table[table_index++] = (1 << 24) | (64 << 16) | 0;
+
+ opts.bits = 1;
+ return 0; /* no symbols, but wait for decoding to report error */
+ }
+ for (min = 1; min < max; min++) {
+ if (count[min] !== 0) { break; }
+ }
+ if (root < min) {
+ root = min;
+ }
+
+ /* check for an over-subscribed or incomplete set of lengths */
+ left = 1;
+ for (len = 1; len <= MAXBITS; len++) {
+ left <<= 1;
+ left -= count[len];
+ if (left < 0) {
+ return -1;
+ } /* over-subscribed */
+ }
+ if (left > 0 && (type === CODES$1 || max !== 1)) {
+ return -1; /* incomplete set */
+ }
+
+ /* generate offsets into symbol table for each length for sorting */
+ offs[1] = 0;
+ for (len = 1; len < MAXBITS; len++) {
+ offs[len + 1] = offs[len] + count[len];
+ }
+
+ /* sort symbols by length, by symbol order within each length */
+ for (sym = 0; sym < codes; sym++) {
+ if (lens[lens_index + sym] !== 0) {
+ work[offs[lens[lens_index + sym]]++] = sym;
+ }
+ }
+
+ /*
+ Create and fill in decoding tables. In this loop, the table being
+ filled is at next and has curr index bits. The code being used is huff
+ with length len. That code is converted to an index by dropping drop
+ bits off of the bottom. For codes where len is less than drop + curr,
+ those top drop + curr - len bits are incremented through all values to
+ fill the table with replicated entries.
+
+ root is the number of index bits for the root table. When len exceeds
+ root, sub-tables are created pointed to by the root entry with an index
+ of the low root bits of huff. This is saved in low to check for when a
+ new sub-table should be started. drop is zero when the root table is
+ being filled, and drop is root when sub-tables are being filled.
+
+ When a new sub-table is needed, it is necessary to look ahead in the
+ code lengths to determine what size sub-table is needed. The length
+ counts are used for this, and so count[] is decremented as codes are
+ entered in the tables.
+
+ used keeps track of how many table entries have been allocated from the
+ provided *table space. It is checked for LENS and DIST tables against
+ the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
+ the initial root table size constants. See the comments in inftrees.h
+ for more information.
+
+ sym increments through all symbols, and the loop terminates when
+ all codes of length max, i.e. all codes, have been processed. This
+ routine permits incomplete codes, so another loop after this one fills
+ in the rest of the decoding tables with invalid code markers.
+ */
+
+ /* set up for code type */
+ // poor man optimization - use if-else instead of switch,
+ // to avoid deopts in old v8
+ if (type === CODES$1) {
+ base = extra = work; /* dummy value--not used */
+ end = 19;
+
+ } else if (type === LENS$1) {
+ base = lbase;
+ base_index -= 257;
+ extra = lext;
+ extra_index -= 257;
+ end = 256;
+
+ } else { /* DISTS */
+ base = dbase;
+ extra = dext;
+ end = -1;
+ }
+
+ /* initialize opts for loop */
+ huff = 0; /* starting code */
+ sym = 0; /* starting code symbol */
+ len = min; /* starting code length */
+ next = table_index; /* current table to fill in */
+ curr = root; /* current table index bits */
+ drop = 0; /* current bits to drop from code for index */
+ low = -1; /* trigger new sub-table when len > root */
+ used = 1 << root; /* use root table entries */
+ mask = used - 1; /* mask for comparing low */
+
+ /* check available table space */
+ if ((type === LENS$1 && used > ENOUGH_LENS$1) ||
+ (type === DISTS$1 && used > ENOUGH_DISTS$1)) {
+ return 1;
+ }
+
+ /* process all codes and make table entries */
+ for (;;) {
+ /* create table entry */
+ here_bits = len - drop;
+ if (work[sym] < end) {
+ here_op = 0;
+ here_val = work[sym];
+ }
+ else if (work[sym] > end) {
+ here_op = extra[extra_index + work[sym]];
+ here_val = base[base_index + work[sym]];
+ }
+ else {
+ here_op = 32 + 64; /* end of block */
+ here_val = 0;
+ }
+
+ /* replicate for those indices with low len bits equal to huff */
+ incr = 1 << (len - drop);
+ fill = 1 << curr;
+ min = fill; /* save offset to next table */
+ do {
+ fill -= incr;
+ table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;
+ } while (fill !== 0);
+
+ /* backwards increment the len-bit code huff */
+ incr = 1 << (len - 1);
+ while (huff & incr) {
+ incr >>= 1;
+ }
+ if (incr !== 0) {
+ huff &= incr - 1;
+ huff += incr;
+ } else {
+ huff = 0;
+ }
+
+ /* go to next symbol, update count, len */
+ sym++;
+ if (--count[len] === 0) {
+ if (len === max) { break; }
+ len = lens[lens_index + work[sym]];
+ }
+
+ /* create new sub-table if needed */
+ if (len > root && (huff & mask) !== low) {
+ /* if first time, transition to sub-tables */
+ if (drop === 0) {
+ drop = root;
+ }
+
+ /* increment past last table */
+ next += min; /* here min is 1 << curr */
+
+ /* determine length of next table */
+ curr = len - drop;
+ left = 1 << curr;
+ while (curr + drop < max) {
+ left -= count[curr + drop];
+ if (left <= 0) { break; }
+ curr++;
+ left <<= 1;
+ }
+
+ /* check for enough space */
+ used += 1 << curr;
+ if ((type === LENS$1 && used > ENOUGH_LENS$1) ||
+ (type === DISTS$1 && used > ENOUGH_DISTS$1)) {
+ return 1;
+ }
+
+ /* point entry in root table to sub-table */
+ low = huff & mask;
+ /*table.op[low] = curr;
+ table.bits[low] = root;
+ table.val[low] = next - opts.table_index;*/
+ table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;
+ }
+ }
+
+ /* fill in remaining table entry if code is incomplete (guaranteed to have
+ at most one remaining entry, since if the code is incomplete, the
+ maximum code length that was allowed to get this far is one bit) */
+ if (huff !== 0) {
+ //table.op[next + huff] = 64; /* invalid code marker */
+ //table.bits[next + huff] = len - drop;
+ //table.val[next + huff] = 0;
+ table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;
+ }
+
+ /* set return parameters */
+ //opts.table_index += used;
+ opts.bits = root;
+ return 0;
+ };
+
+
+ var inftrees = inflate_table;
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+
+
+
+
+
+ const CODES = 0;
+ const LENS = 1;
+ const DISTS = 2;
+
+ /* Public constants ==========================================================*/
+ /* ===========================================================================*/
+
+ const {
+ Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES,
+ Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR,
+ Z_DEFLATED
+ } = constants$2;
+
+
+ /* STATES ====================================================================*/
+ /* ===========================================================================*/
+
+
+ const HEAD = 1; /* i: waiting for magic header */
+ const FLAGS = 2; /* i: waiting for method and flags (gzip) */
+ const TIME = 3; /* i: waiting for modification time (gzip) */
+ const OS = 4; /* i: waiting for extra flags and operating system (gzip) */
+ const EXLEN = 5; /* i: waiting for extra length (gzip) */
+ const EXTRA = 6; /* i: waiting for extra bytes (gzip) */
+ const NAME = 7; /* i: waiting for end of file name (gzip) */
+ const COMMENT = 8; /* i: waiting for end of comment (gzip) */
+ const HCRC = 9; /* i: waiting for header crc (gzip) */
+ const DICTID = 10; /* i: waiting for dictionary check value */
+ const DICT = 11; /* waiting for inflateSetDictionary() call */
+ const TYPE = 12; /* i: waiting for type bits, including last-flag bit */
+ const TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */
+ const STORED = 14; /* i: waiting for stored size (length and complement) */
+ const COPY_ = 15; /* i/o: same as COPY below, but only first time in */
+ const COPY = 16; /* i/o: waiting for input or output to copy stored block */
+ const TABLE = 17; /* i: waiting for dynamic block table lengths */
+ const LENLENS = 18; /* i: waiting for code length code lengths */
+ const CODELENS = 19; /* i: waiting for length/lit and distance code lengths */
+ const LEN_ = 20; /* i: same as LEN below, but only first time in */
+ const LEN = 21; /* i: waiting for length/lit/eob code */
+ const LENEXT = 22; /* i: waiting for length extra bits */
+ const DIST = 23; /* i: waiting for distance code */
+ const DISTEXT = 24; /* i: waiting for distance extra bits */
+ const MATCH = 25; /* o: waiting for output space to copy string */
+ const LIT = 26; /* o: waiting for output space to write literal */
+ const CHECK = 27; /* i: waiting for 32-bit check value */
+ const LENGTH$2 = 28; /* i: waiting for 32-bit length (gzip) */
+ const DONE = 29; /* finished check, done -- remain here until reset */
+ const BAD = 30; /* got a data error -- remain here until reset */
+ const MEM = 31; /* got an inflate() memory error -- remain here until reset */
+ const SYNC = 32; /* looking for synchronization bytes to restart inflate() */
+
+ /* ===========================================================================*/
+
+
+
+ const ENOUGH_LENS = 852;
+ const ENOUGH_DISTS = 592;
+ //const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);
+
+ const MAX_WBITS = 15;
+ /* 32K LZ77 window */
+ const DEF_WBITS = MAX_WBITS;
+
+
+ const zswap32 = (q) => {
+
+ return (((q >>> 24) & 0xff) +
+ ((q >>> 8) & 0xff00) +
+ ((q & 0xff00) << 8) +
+ ((q & 0xff) << 24));
+ };
+
+
+ function InflateState() {
+ this.mode = 0; /* current inflate mode */
+ this.last = false; /* true if processing last block */
+ this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */
+ this.havedict = false; /* true if dictionary provided */
+ this.flags = 0; /* gzip header method and flags (0 if zlib) */
+ this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */
+ this.check = 0; /* protected copy of check value */
+ this.total = 0; /* protected copy of output count */
+ // TODO: may be {}
+ this.head = null; /* where to save gzip header information */
+
+ /* sliding window */
+ this.wbits = 0; /* log base 2 of requested window size */
+ this.wsize = 0; /* window size or zero if not using window */
+ this.whave = 0; /* valid bytes in the window */
+ this.wnext = 0; /* window write index */
+ this.window = null; /* allocated sliding window, if needed */
+
+ /* bit accumulator */
+ this.hold = 0; /* input bit accumulator */
+ this.bits = 0; /* number of bits in "in" */
+
+ /* for string and stored block copying */
+ this.length = 0; /* literal or length of data to copy */
+ this.offset = 0; /* distance back to copy string from */
+
+ /* for table and code decoding */
+ this.extra = 0; /* extra bits needed */
+
+ /* fixed and dynamic code tables */
+ this.lencode = null; /* starting table for length/literal codes */
+ this.distcode = null; /* starting table for distance codes */
+ this.lenbits = 0; /* index bits for lencode */
+ this.distbits = 0; /* index bits for distcode */
+
+ /* dynamic table building */
+ this.ncode = 0; /* number of code length code lengths */
+ this.nlen = 0; /* number of length code lengths */
+ this.ndist = 0; /* number of distance code lengths */
+ this.have = 0; /* number of code lengths in lens[] */
+ this.next = null; /* next available space in codes[] */
+
+ this.lens = new Uint16Array(320); /* temporary storage for code lengths */
+ this.work = new Uint16Array(288); /* work area for code table building */
+
+ /*
+ because we don't have pointers in js, we use lencode and distcode directly
+ as buffers so we don't need codes
+ */
+ //this.codes = new Int32Array(ENOUGH); /* space for code tables */
+ this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */
+ this.distdyn = null; /* dynamic table for distance codes (JS specific) */
+ this.sane = 0; /* if false, allow invalid distance too far */
+ this.back = 0; /* bits back of last unprocessed length/lit */
+ this.was = 0; /* initial length of match */
+ }
+
+
+ const inflateResetKeep = (strm) => {
+
+ if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }
+ const state = strm.state;
+ strm.total_in = strm.total_out = state.total = 0;
+ strm.msg = ''; /*Z_NULL*/
+ if (state.wrap) { /* to support ill-conceived Java test suite */
+ strm.adler = state.wrap & 1;
+ }
+ state.mode = HEAD;
+ state.last = 0;
+ state.havedict = 0;
+ state.dmax = 32768;
+ state.head = null/*Z_NULL*/;
+ state.hold = 0;
+ state.bits = 0;
+ //state.lencode = state.distcode = state.next = state.codes;
+ state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);
+ state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);
+
+ state.sane = 1;
+ state.back = -1;
+ //Tracev((stderr, "inflate: reset\n"));
+ return Z_OK$1;
+ };
+
+
+ const inflateReset = (strm) => {
+
+ if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }
+ const state = strm.state;
+ state.wsize = 0;
+ state.whave = 0;
+ state.wnext = 0;
+ return inflateResetKeep(strm);
+
+ };
+
+
+ const inflateReset2 = (strm, windowBits) => {
+ let wrap;
+
+ /* get the state */
+ if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }
+ const state = strm.state;
+
+ /* extract wrap request from windowBits parameter */
+ if (windowBits < 0) {
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+ else {
+ wrap = (windowBits >> 4) + 1;
+ if (windowBits < 48) {
+ windowBits &= 15;
+ }
+ }
+
+ /* set number of window bits, free window if different */
+ if (windowBits && (windowBits < 8 || windowBits > 15)) {
+ return Z_STREAM_ERROR$1;
+ }
+ if (state.window !== null && state.wbits !== windowBits) {
+ state.window = null;
+ }
+
+ /* update state and reset the rest of it */
+ state.wrap = wrap;
+ state.wbits = windowBits;
+ return inflateReset(strm);
+ };
+
+
+ const inflateInit2 = (strm, windowBits) => {
+
+ if (!strm) { return Z_STREAM_ERROR$1; }
+ //strm.msg = Z_NULL; /* in case we return an error */
+
+ const state = new InflateState();
+
+ //if (state === Z_NULL) return Z_MEM_ERROR;
+ //Tracev((stderr, "inflate: allocated\n"));
+ strm.state = state;
+ state.window = null/*Z_NULL*/;
+ const ret = inflateReset2(strm, windowBits);
+ if (ret !== Z_OK$1) {
+ strm.state = null/*Z_NULL*/;
+ }
+ return ret;
+ };
+
+
+ const inflateInit = (strm) => {
+
+ return inflateInit2(strm, DEF_WBITS);
+ };
+
+
+ /*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding. Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter. This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time. However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+ let virgin = true;
+
+ let lenfix, distfix; // We have no pointers in JS, so keep tables separate
+
+
+ const fixedtables = (state) => {
+
+ /* build fixed huffman tables if first call (may not be thread safe) */
+ if (virgin) {
+ lenfix = new Int32Array(512);
+ distfix = new Int32Array(32);
+
+ /* literal/length table */
+ let sym = 0;
+ while (sym < 144) { state.lens[sym++] = 8; }
+ while (sym < 256) { state.lens[sym++] = 9; }
+ while (sym < 280) { state.lens[sym++] = 7; }
+ while (sym < 288) { state.lens[sym++] = 8; }
+
+ inftrees(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });
+
+ /* distance table */
+ sym = 0;
+ while (sym < 32) { state.lens[sym++] = 5; }
+
+ inftrees(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });
+
+ /* do this just once */
+ virgin = false;
+ }
+
+ state.lencode = lenfix;
+ state.lenbits = 9;
+ state.distcode = distfix;
+ state.distbits = 5;
+ };
+
+
+ /*
+ Update the window with the last wsize (normally 32K) bytes written before
+ returning. If window does not exist yet, create it. This is only called
+ when a window is already in use, or when output has been written during this
+ inflate call, but the end of the deflate stream has not been reached yet.
+ It is also called to create a window for dictionary data when a dictionary
+ is loaded.
+
+ Providing output buffers larger than 32K to inflate() should provide a speed
+ advantage, since only the last 32K of output is copied to the sliding window
+ upon return from inflate(), and since all distances after the first 32K of
+ output will fall in the output data, making match copies simpler and faster.
+ The advantage may be dependent on the size of the processor's data caches.
+ */
+ const updatewindow = (strm, src, end, copy) => {
+
+ let dist;
+ const state = strm.state;
+
+ /* if it hasn't been done already, allocate space for the window */
+ if (state.window === null) {
+ state.wsize = 1 << state.wbits;
+ state.wnext = 0;
+ state.whave = 0;
+
+ state.window = new Uint8Array(state.wsize);
+ }
+
+ /* copy state->wsize or less output bytes into the circular window */
+ if (copy >= state.wsize) {
+ state.window.set(src.subarray(end - state.wsize, end), 0);
+ state.wnext = 0;
+ state.whave = state.wsize;
+ }
+ else {
+ dist = state.wsize - state.wnext;
+ if (dist > copy) {
+ dist = copy;
+ }
+ //zmemcpy(state->window + state->wnext, end - copy, dist);
+ state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);
+ copy -= dist;
+ if (copy) {
+ //zmemcpy(state->window, end - copy, copy);
+ state.window.set(src.subarray(end - copy, end), 0);
+ state.wnext = copy;
+ state.whave = state.wsize;
+ }
+ else {
+ state.wnext += dist;
+ if (state.wnext === state.wsize) { state.wnext = 0; }
+ if (state.whave < state.wsize) { state.whave += dist; }
+ }
+ }
+ return 0;
+ };
+
+
+ const inflate$2 = (strm, flush) => {
+
+ let state;
+ let input, output; // input/output buffers
+ let next; /* next input INDEX */
+ let put; /* next output INDEX */
+ let have, left; /* available input and output */
+ let hold; /* bit buffer */
+ let bits; /* bits in bit buffer */
+ let _in, _out; /* save starting available input and output */
+ let copy; /* number of stored or match bytes to copy */
+ let from; /* where to copy match bytes from */
+ let from_source;
+ let here = 0; /* current decoding table entry */
+ let here_bits, here_op, here_val; // paked "here" denormalized (JS specific)
+ //let last; /* parent table entry */
+ let last_bits, last_op, last_val; // paked "last" denormalized (JS specific)
+ let len; /* length to copy for repeats, bits to drop */
+ let ret; /* return code */
+ const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */
+ let opts;
+
+ let n; // temporary variable for NEED_BITS
+
+ const order = /* permutation of code lengths */
+ new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);
+
+
+ if (!strm || !strm.state || !strm.output ||
+ (!strm.input && strm.avail_in !== 0)) {
+ return Z_STREAM_ERROR$1;
+ }
+
+ state = strm.state;
+ if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */
+
+
+ //--- LOAD() ---
+ put = strm.next_out;
+ output = strm.output;
+ left = strm.avail_out;
+ next = strm.next_in;
+ input = strm.input;
+ have = strm.avail_in;
+ hold = state.hold;
+ bits = state.bits;
+ //---
+
+ _in = have;
+ _out = left;
+ ret = Z_OK$1;
+
+ inf_leave: // goto emulation
+ for (;;) {
+ switch (state.mode) {
+ case HEAD:
+ if (state.wrap === 0) {
+ state.mode = TYPEDO;
+ break;
+ }
+ //=== NEEDBITS(16);
+ while (bits < 16) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */
+ state.check = 0/*crc32(0L, Z_NULL, 0)*/;
+ //=== CRC2(state.check, hold);
+ hbuf[0] = hold & 0xff;
+ hbuf[1] = (hold >>> 8) & 0xff;
+ state.check = crc32_1(state.check, hbuf, 2, 0);
+ //===//
+
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ state.mode = FLAGS;
+ break;
+ }
+ state.flags = 0; /* expect zlib header */
+ if (state.head) {
+ state.head.done = false;
+ }
+ if (!(state.wrap & 1) || /* check if zlib header allowed */
+ (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {
+ strm.msg = 'incorrect header check';
+ state.mode = BAD;
+ break;
+ }
+ if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {
+ strm.msg = 'unknown compression method';
+ state.mode = BAD;
+ break;
+ }
+ //--- DROPBITS(4) ---//
+ hold >>>= 4;
+ bits -= 4;
+ //---//
+ len = (hold & 0x0f)/*BITS(4)*/ + 8;
+ if (state.wbits === 0) {
+ state.wbits = len;
+ }
+ else if (len > state.wbits) {
+ strm.msg = 'invalid window size';
+ state.mode = BAD;
+ break;
+ }
+
+ // !!! pako patch. Force use `options.windowBits` if passed.
+ // Required to always use max window size by default.
+ state.dmax = 1 << state.wbits;
+ //state.dmax = 1 << len;
+
+ //Tracev((stderr, "inflate: zlib header ok\n"));
+ strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
+ state.mode = hold & 0x200 ? DICTID : TYPE;
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ break;
+ case FLAGS:
+ //=== NEEDBITS(16); */
+ while (bits < 16) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ state.flags = hold;
+ if ((state.flags & 0xff) !== Z_DEFLATED) {
+ strm.msg = 'unknown compression method';
+ state.mode = BAD;
+ break;
+ }
+ if (state.flags & 0xe000) {
+ strm.msg = 'unknown header flags set';
+ state.mode = BAD;
+ break;
+ }
+ if (state.head) {
+ state.head.text = ((hold >> 8) & 1);
+ }
+ if (state.flags & 0x0200) {
+ //=== CRC2(state.check, hold);
+ hbuf[0] = hold & 0xff;
+ hbuf[1] = (hold >>> 8) & 0xff;
+ state.check = crc32_1(state.check, hbuf, 2, 0);
+ //===//
+ }
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ state.mode = TIME;
+ /* falls through */
+ case TIME:
+ //=== NEEDBITS(32); */
+ while (bits < 32) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ if (state.head) {
+ state.head.time = hold;
+ }
+ if (state.flags & 0x0200) {
+ //=== CRC4(state.check, hold)
+ hbuf[0] = hold & 0xff;
+ hbuf[1] = (hold >>> 8) & 0xff;
+ hbuf[2] = (hold >>> 16) & 0xff;
+ hbuf[3] = (hold >>> 24) & 0xff;
+ state.check = crc32_1(state.check, hbuf, 4, 0);
+ //===
+ }
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ state.mode = OS;
+ /* falls through */
+ case OS:
+ //=== NEEDBITS(16); */
+ while (bits < 16) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ if (state.head) {
+ state.head.xflags = (hold & 0xff);
+ state.head.os = (hold >> 8);
+ }
+ if (state.flags & 0x0200) {
+ //=== CRC2(state.check, hold);
+ hbuf[0] = hold & 0xff;
+ hbuf[1] = (hold >>> 8) & 0xff;
+ state.check = crc32_1(state.check, hbuf, 2, 0);
+ //===//
+ }
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ state.mode = EXLEN;
+ /* falls through */
+ case EXLEN:
+ if (state.flags & 0x0400) {
+ //=== NEEDBITS(16); */
+ while (bits < 16) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ state.length = hold;
+ if (state.head) {
+ state.head.extra_len = hold;
+ }
+ if (state.flags & 0x0200) {
+ //=== CRC2(state.check, hold);
+ hbuf[0] = hold & 0xff;
+ hbuf[1] = (hold >>> 8) & 0xff;
+ state.check = crc32_1(state.check, hbuf, 2, 0);
+ //===//
+ }
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ }
+ else if (state.head) {
+ state.head.extra = null/*Z_NULL*/;
+ }
+ state.mode = EXTRA;
+ /* falls through */
+ case EXTRA:
+ if (state.flags & 0x0400) {
+ copy = state.length;
+ if (copy > have) { copy = have; }
+ if (copy) {
+ if (state.head) {
+ len = state.head.extra_len - state.length;
+ if (!state.head.extra) {
+ // Use untyped array for more convenient processing later
+ state.head.extra = new Uint8Array(state.head.extra_len);
+ }
+ state.head.extra.set(
+ input.subarray(
+ next,
+ // extra field is limited to 65536 bytes
+ // - no need for additional size check
+ next + copy
+ ),
+ /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/
+ len
+ );
+ //zmemcpy(state.head.extra + len, next,
+ // len + copy > state.head.extra_max ?
+ // state.head.extra_max - len : copy);
+ }
+ if (state.flags & 0x0200) {
+ state.check = crc32_1(state.check, input, copy, next);
+ }
+ have -= copy;
+ next += copy;
+ state.length -= copy;
+ }
+ if (state.length) { break inf_leave; }
+ }
+ state.length = 0;
+ state.mode = NAME;
+ /* falls through */
+ case NAME:
+ if (state.flags & 0x0800) {
+ if (have === 0) { break inf_leave; }
+ copy = 0;
+ do {
+ // TODO: 2 or 1 bytes?
+ len = input[next + copy++];
+ /* use constant limit because in js we should not preallocate memory */
+ if (state.head && len &&
+ (state.length < 65536 /*state.head.name_max*/)) {
+ state.head.name += String.fromCharCode(len);
+ }
+ } while (len && copy < have);
+
+ if (state.flags & 0x0200) {
+ state.check = crc32_1(state.check, input, copy, next);
+ }
+ have -= copy;
+ next += copy;
+ if (len) { break inf_leave; }
+ }
+ else if (state.head) {
+ state.head.name = null;
+ }
+ state.length = 0;
+ state.mode = COMMENT;
+ /* falls through */
+ case COMMENT:
+ if (state.flags & 0x1000) {
+ if (have === 0) { break inf_leave; }
+ copy = 0;
+ do {
+ len = input[next + copy++];
+ /* use constant limit because in js we should not preallocate memory */
+ if (state.head && len &&
+ (state.length < 65536 /*state.head.comm_max*/)) {
+ state.head.comment += String.fromCharCode(len);
+ }
+ } while (len && copy < have);
+ if (state.flags & 0x0200) {
+ state.check = crc32_1(state.check, input, copy, next);
+ }
+ have -= copy;
+ next += copy;
+ if (len) { break inf_leave; }
+ }
+ else if (state.head) {
+ state.head.comment = null;
+ }
+ state.mode = HCRC;
+ /* falls through */
+ case HCRC:
+ if (state.flags & 0x0200) {
+ //=== NEEDBITS(16); */
+ while (bits < 16) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ if (hold !== (state.check & 0xffff)) {
+ strm.msg = 'header crc mismatch';
+ state.mode = BAD;
+ break;
+ }
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ }
+ if (state.head) {
+ state.head.hcrc = ((state.flags >> 9) & 1);
+ state.head.done = true;
+ }
+ strm.adler = state.check = 0;
+ state.mode = TYPE;
+ break;
+ case DICTID:
+ //=== NEEDBITS(32); */
+ while (bits < 32) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ strm.adler = state.check = zswap32(hold);
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ state.mode = DICT;
+ /* falls through */
+ case DICT:
+ if (state.havedict === 0) {
+ //--- RESTORE() ---
+ strm.next_out = put;
+ strm.avail_out = left;
+ strm.next_in = next;
+ strm.avail_in = have;
+ state.hold = hold;
+ state.bits = bits;
+ //---
+ return Z_NEED_DICT$1;
+ }
+ strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;
+ state.mode = TYPE;
+ /* falls through */
+ case TYPE:
+ if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }
+ /* falls through */
+ case TYPEDO:
+ if (state.last) {
+ //--- BYTEBITS() ---//
+ hold >>>= bits & 7;
+ bits -= bits & 7;
+ //---//
+ state.mode = CHECK;
+ break;
+ }
+ //=== NEEDBITS(3); */
+ while (bits < 3) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ state.last = (hold & 0x01)/*BITS(1)*/;
+ //--- DROPBITS(1) ---//
+ hold >>>= 1;
+ bits -= 1;
+ //---//
+
+ switch ((hold & 0x03)/*BITS(2)*/) {
+ case 0: /* stored block */
+ //Tracev((stderr, "inflate: stored block%s\n",
+ // state.last ? " (last)" : ""));
+ state.mode = STORED;
+ break;
+ case 1: /* fixed block */
+ fixedtables(state);
+ //Tracev((stderr, "inflate: fixed codes block%s\n",
+ // state.last ? " (last)" : ""));
+ state.mode = LEN_; /* decode codes */
+ if (flush === Z_TREES) {
+ //--- DROPBITS(2) ---//
+ hold >>>= 2;
+ bits -= 2;
+ //---//
+ break inf_leave;
+ }
+ break;
+ case 2: /* dynamic block */
+ //Tracev((stderr, "inflate: dynamic codes block%s\n",
+ // state.last ? " (last)" : ""));
+ state.mode = TABLE;
+ break;
+ case 3:
+ strm.msg = 'invalid block type';
+ state.mode = BAD;
+ }
+ //--- DROPBITS(2) ---//
+ hold >>>= 2;
+ bits -= 2;
+ //---//
+ break;
+ case STORED:
+ //--- BYTEBITS() ---// /* go to byte boundary */
+ hold >>>= bits & 7;
+ bits -= bits & 7;
+ //---//
+ //=== NEEDBITS(32); */
+ while (bits < 32) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {
+ strm.msg = 'invalid stored block lengths';
+ state.mode = BAD;
+ break;
+ }
+ state.length = hold & 0xffff;
+ //Tracev((stderr, "inflate: stored length %u\n",
+ // state.length));
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ state.mode = COPY_;
+ if (flush === Z_TREES) { break inf_leave; }
+ /* falls through */
+ case COPY_:
+ state.mode = COPY;
+ /* falls through */
+ case COPY:
+ copy = state.length;
+ if (copy) {
+ if (copy > have) { copy = have; }
+ if (copy > left) { copy = left; }
+ if (copy === 0) { break inf_leave; }
+ //--- zmemcpy(put, next, copy); ---
+ output.set(input.subarray(next, next + copy), put);
+ //---//
+ have -= copy;
+ next += copy;
+ left -= copy;
+ put += copy;
+ state.length -= copy;
+ break;
+ }
+ //Tracev((stderr, "inflate: stored end\n"));
+ state.mode = TYPE;
+ break;
+ case TABLE:
+ //=== NEEDBITS(14); */
+ while (bits < 14) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;
+ //--- DROPBITS(5) ---//
+ hold >>>= 5;
+ bits -= 5;
+ //---//
+ state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;
+ //--- DROPBITS(5) ---//
+ hold >>>= 5;
+ bits -= 5;
+ //---//
+ state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;
+ //--- DROPBITS(4) ---//
+ hold >>>= 4;
+ bits -= 4;
+ //---//
+ //#ifndef PKZIP_BUG_WORKAROUND
+ if (state.nlen > 286 || state.ndist > 30) {
+ strm.msg = 'too many length or distance symbols';
+ state.mode = BAD;
+ break;
+ }
+ //#endif
+ //Tracev((stderr, "inflate: table sizes ok\n"));
+ state.have = 0;
+ state.mode = LENLENS;
+ /* falls through */
+ case LENLENS:
+ while (state.have < state.ncode) {
+ //=== NEEDBITS(3);
+ while (bits < 3) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);
+ //--- DROPBITS(3) ---//
+ hold >>>= 3;
+ bits -= 3;
+ //---//
+ }
+ while (state.have < 19) {
+ state.lens[order[state.have++]] = 0;
+ }
+ // We have separate tables & no pointers. 2 commented lines below not needed.
+ //state.next = state.codes;
+ //state.lencode = state.next;
+ // Switch to use dynamic table
+ state.lencode = state.lendyn;
+ state.lenbits = 7;
+
+ opts = { bits: state.lenbits };
+ ret = inftrees(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);
+ state.lenbits = opts.bits;
+
+ if (ret) {
+ strm.msg = 'invalid code lengths set';
+ state.mode = BAD;
+ break;
+ }
+ //Tracev((stderr, "inflate: code lengths ok\n"));
+ state.have = 0;
+ state.mode = CODELENS;
+ /* falls through */
+ case CODELENS:
+ while (state.have < state.nlen + state.ndist) {
+ for (;;) {
+ here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/
+ here_bits = here >>> 24;
+ here_op = (here >>> 16) & 0xff;
+ here_val = here & 0xffff;
+
+ if ((here_bits) <= bits) { break; }
+ //--- PULLBYTE() ---//
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ //---//
+ }
+ if (here_val < 16) {
+ //--- DROPBITS(here.bits) ---//
+ hold >>>= here_bits;
+ bits -= here_bits;
+ //---//
+ state.lens[state.have++] = here_val;
+ }
+ else {
+ if (here_val === 16) {
+ //=== NEEDBITS(here.bits + 2);
+ n = here_bits + 2;
+ while (bits < n) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ //--- DROPBITS(here.bits) ---//
+ hold >>>= here_bits;
+ bits -= here_bits;
+ //---//
+ if (state.have === 0) {
+ strm.msg = 'invalid bit length repeat';
+ state.mode = BAD;
+ break;
+ }
+ len = state.lens[state.have - 1];
+ copy = 3 + (hold & 0x03);//BITS(2);
+ //--- DROPBITS(2) ---//
+ hold >>>= 2;
+ bits -= 2;
+ //---//
+ }
+ else if (here_val === 17) {
+ //=== NEEDBITS(here.bits + 3);
+ n = here_bits + 3;
+ while (bits < n) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ //--- DROPBITS(here.bits) ---//
+ hold >>>= here_bits;
+ bits -= here_bits;
+ //---//
+ len = 0;
+ copy = 3 + (hold & 0x07);//BITS(3);
+ //--- DROPBITS(3) ---//
+ hold >>>= 3;
+ bits -= 3;
+ //---//
+ }
+ else {
+ //=== NEEDBITS(here.bits + 7);
+ n = here_bits + 7;
+ while (bits < n) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ //--- DROPBITS(here.bits) ---//
+ hold >>>= here_bits;
+ bits -= here_bits;
+ //---//
+ len = 0;
+ copy = 11 + (hold & 0x7f);//BITS(7);
+ //--- DROPBITS(7) ---//
+ hold >>>= 7;
+ bits -= 7;
+ //---//
+ }
+ if (state.have + copy > state.nlen + state.ndist) {
+ strm.msg = 'invalid bit length repeat';
+ state.mode = BAD;
+ break;
+ }
+ while (copy--) {
+ state.lens[state.have++] = len;
+ }
+ }
+ }
+
+ /* handle error breaks in while */
+ if (state.mode === BAD) { break; }
+
+ /* check for end-of-block code (better have one) */
+ if (state.lens[256] === 0) {
+ strm.msg = 'invalid code -- missing end-of-block';
+ state.mode = BAD;
+ break;
+ }
+
+ /* build code tables -- note: do not change the lenbits or distbits
+ values here (9 and 6) without reading the comments in inftrees.h
+ concerning the ENOUGH constants, which depend on those values */
+ state.lenbits = 9;
+
+ opts = { bits: state.lenbits };
+ ret = inftrees(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);
+ // We have separate tables & no pointers. 2 commented lines below not needed.
+ // state.next_index = opts.table_index;
+ state.lenbits = opts.bits;
+ // state.lencode = state.next;
+
+ if (ret) {
+ strm.msg = 'invalid literal/lengths set';
+ state.mode = BAD;
+ break;
+ }
+
+ state.distbits = 6;
+ //state.distcode.copy(state.codes);
+ // Switch to use dynamic table
+ state.distcode = state.distdyn;
+ opts = { bits: state.distbits };
+ ret = inftrees(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);
+ // We have separate tables & no pointers. 2 commented lines below not needed.
+ // state.next_index = opts.table_index;
+ state.distbits = opts.bits;
+ // state.distcode = state.next;
+
+ if (ret) {
+ strm.msg = 'invalid distances set';
+ state.mode = BAD;
+ break;
+ }
+ //Tracev((stderr, 'inflate: codes ok\n'));
+ state.mode = LEN_;
+ if (flush === Z_TREES) { break inf_leave; }
+ /* falls through */
+ case LEN_:
+ state.mode = LEN;
+ /* falls through */
+ case LEN:
+ if (have >= 6 && left >= 258) {
+ //--- RESTORE() ---
+ strm.next_out = put;
+ strm.avail_out = left;
+ strm.next_in = next;
+ strm.avail_in = have;
+ state.hold = hold;
+ state.bits = bits;
+ //---
+ inffast(strm, _out);
+ //--- LOAD() ---
+ put = strm.next_out;
+ output = strm.output;
+ left = strm.avail_out;
+ next = strm.next_in;
+ input = strm.input;
+ have = strm.avail_in;
+ hold = state.hold;
+ bits = state.bits;
+ //---
+
+ if (state.mode === TYPE) {
+ state.back = -1;
+ }
+ break;
+ }
+ state.back = 0;
+ for (;;) {
+ here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/
+ here_bits = here >>> 24;
+ here_op = (here >>> 16) & 0xff;
+ here_val = here & 0xffff;
+
+ if (here_bits <= bits) { break; }
+ //--- PULLBYTE() ---//
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ //---//
+ }
+ if (here_op && (here_op & 0xf0) === 0) {
+ last_bits = here_bits;
+ last_op = here_op;
+ last_val = here_val;
+ for (;;) {
+ here = state.lencode[last_val +
+ ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
+ here_bits = here >>> 24;
+ here_op = (here >>> 16) & 0xff;
+ here_val = here & 0xffff;
+
+ if ((last_bits + here_bits) <= bits) { break; }
+ //--- PULLBYTE() ---//
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ //---//
+ }
+ //--- DROPBITS(last.bits) ---//
+ hold >>>= last_bits;
+ bits -= last_bits;
+ //---//
+ state.back += last_bits;
+ }
+ //--- DROPBITS(here.bits) ---//
+ hold >>>= here_bits;
+ bits -= here_bits;
+ //---//
+ state.back += here_bits;
+ state.length = here_val;
+ if (here_op === 0) {
+ //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ // "inflate: literal '%c'\n" :
+ // "inflate: literal 0x%02x\n", here.val));
+ state.mode = LIT;
+ break;
+ }
+ if (here_op & 32) {
+ //Tracevv((stderr, "inflate: end of block\n"));
+ state.back = -1;
+ state.mode = TYPE;
+ break;
+ }
+ if (here_op & 64) {
+ strm.msg = 'invalid literal/length code';
+ state.mode = BAD;
+ break;
+ }
+ state.extra = here_op & 15;
+ state.mode = LENEXT;
+ /* falls through */
+ case LENEXT:
+ if (state.extra) {
+ //=== NEEDBITS(state.extra);
+ n = state.extra;
+ while (bits < n) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
+ //--- DROPBITS(state.extra) ---//
+ hold >>>= state.extra;
+ bits -= state.extra;
+ //---//
+ state.back += state.extra;
+ }
+ //Tracevv((stderr, "inflate: length %u\n", state.length));
+ state.was = state.length;
+ state.mode = DIST;
+ /* falls through */
+ case DIST:
+ for (;;) {
+ here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/
+ here_bits = here >>> 24;
+ here_op = (here >>> 16) & 0xff;
+ here_val = here & 0xffff;
+
+ if ((here_bits) <= bits) { break; }
+ //--- PULLBYTE() ---//
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ //---//
+ }
+ if ((here_op & 0xf0) === 0) {
+ last_bits = here_bits;
+ last_op = here_op;
+ last_val = here_val;
+ for (;;) {
+ here = state.distcode[last_val +
+ ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];
+ here_bits = here >>> 24;
+ here_op = (here >>> 16) & 0xff;
+ here_val = here & 0xffff;
+
+ if ((last_bits + here_bits) <= bits) { break; }
+ //--- PULLBYTE() ---//
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ //---//
+ }
+ //--- DROPBITS(last.bits) ---//
+ hold >>>= last_bits;
+ bits -= last_bits;
+ //---//
+ state.back += last_bits;
+ }
+ //--- DROPBITS(here.bits) ---//
+ hold >>>= here_bits;
+ bits -= here_bits;
+ //---//
+ state.back += here_bits;
+ if (here_op & 64) {
+ strm.msg = 'invalid distance code';
+ state.mode = BAD;
+ break;
+ }
+ state.offset = here_val;
+ state.extra = (here_op) & 15;
+ state.mode = DISTEXT;
+ /* falls through */
+ case DISTEXT:
+ if (state.extra) {
+ //=== NEEDBITS(state.extra);
+ n = state.extra;
+ while (bits < n) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;
+ //--- DROPBITS(state.extra) ---//
+ hold >>>= state.extra;
+ bits -= state.extra;
+ //---//
+ state.back += state.extra;
+ }
+ //#ifdef INFLATE_STRICT
+ if (state.offset > state.dmax) {
+ strm.msg = 'invalid distance too far back';
+ state.mode = BAD;
+ break;
+ }
+ //#endif
+ //Tracevv((stderr, "inflate: distance %u\n", state.offset));
+ state.mode = MATCH;
+ /* falls through */
+ case MATCH:
+ if (left === 0) { break inf_leave; }
+ copy = _out - left;
+ if (state.offset > copy) { /* copy from window */
+ copy = state.offset - copy;
+ if (copy > state.whave) {
+ if (state.sane) {
+ strm.msg = 'invalid distance too far back';
+ state.mode = BAD;
+ break;
+ }
+ // (!) This block is disabled in zlib defaults,
+ // don't enable it for binary compatibility
+ //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ // Trace((stderr, "inflate.c too far\n"));
+ // copy -= state.whave;
+ // if (copy > state.length) { copy = state.length; }
+ // if (copy > left) { copy = left; }
+ // left -= copy;
+ // state.length -= copy;
+ // do {
+ // output[put++] = 0;
+ // } while (--copy);
+ // if (state.length === 0) { state.mode = LEN; }
+ // break;
+ //#endif
+ }
+ if (copy > state.wnext) {
+ copy -= state.wnext;
+ from = state.wsize - copy;
+ }
+ else {
+ from = state.wnext - copy;
+ }
+ if (copy > state.length) { copy = state.length; }
+ from_source = state.window;
+ }
+ else { /* copy from output */
+ from_source = output;
+ from = put - state.offset;
+ copy = state.length;
+ }
+ if (copy > left) { copy = left; }
+ left -= copy;
+ state.length -= copy;
+ do {
+ output[put++] = from_source[from++];
+ } while (--copy);
+ if (state.length === 0) { state.mode = LEN; }
+ break;
+ case LIT:
+ if (left === 0) { break inf_leave; }
+ output[put++] = state.length;
+ left--;
+ state.mode = LEN;
+ break;
+ case CHECK:
+ if (state.wrap) {
+ //=== NEEDBITS(32);
+ while (bits < 32) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ // Use '|' instead of '+' to make sure that result is signed
+ hold |= input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ _out -= left;
+ strm.total_out += _out;
+ state.total += _out;
+ if (_out) {
+ strm.adler = state.check =
+ /*UPDATE(state.check, put - _out, _out);*/
+ (state.flags ? crc32_1(state.check, output, _out, put - _out) : adler32_1(state.check, output, _out, put - _out));
+
+ }
+ _out = left;
+ // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too
+ if ((state.flags ? hold : zswap32(hold)) !== state.check) {
+ strm.msg = 'incorrect data check';
+ state.mode = BAD;
+ break;
+ }
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ //Tracev((stderr, "inflate: check matches trailer\n"));
+ }
+ state.mode = LENGTH$2;
+ /* falls through */
+ case LENGTH$2:
+ if (state.wrap && state.flags) {
+ //=== NEEDBITS(32);
+ while (bits < 32) {
+ if (have === 0) { break inf_leave; }
+ have--;
+ hold += input[next++] << bits;
+ bits += 8;
+ }
+ //===//
+ if (hold !== (state.total & 0xffffffff)) {
+ strm.msg = 'incorrect length check';
+ state.mode = BAD;
+ break;
+ }
+ //=== INITBITS();
+ hold = 0;
+ bits = 0;
+ //===//
+ //Tracev((stderr, "inflate: length matches trailer\n"));
+ }
+ state.mode = DONE;
+ /* falls through */
+ case DONE:
+ ret = Z_STREAM_END$1;
+ break inf_leave;
+ case BAD:
+ ret = Z_DATA_ERROR$1;
+ break inf_leave;
+ case MEM:
+ return Z_MEM_ERROR$1;
+ case SYNC:
+ /* falls through */
+ default:
+ return Z_STREAM_ERROR$1;
+ }
+ }
+
+ // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave"
+
+ /*
+ Return from inflate(), updating the total counts and the check value.
+ If there was no progress during the inflate() call, return a buffer
+ error. Call updatewindow() to create and/or update the window state.
+ Note: a memory error from inflate() is non-recoverable.
+ */
+
+ //--- RESTORE() ---
+ strm.next_out = put;
+ strm.avail_out = left;
+ strm.next_in = next;
+ strm.avail_in = have;
+ state.hold = hold;
+ state.bits = bits;
+ //---
+
+ if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&
+ (state.mode < CHECK || flush !== Z_FINISH$1))) {
+ if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ;
+ }
+ _in -= strm.avail_in;
+ _out -= strm.avail_out;
+ strm.total_in += _in;
+ strm.total_out += _out;
+ state.total += _out;
+ if (state.wrap && _out) {
+ strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/
+ (state.flags ? crc32_1(state.check, output, _out, strm.next_out - _out) : adler32_1(state.check, output, _out, strm.next_out - _out));
+ }
+ strm.data_type = state.bits + (state.last ? 64 : 0) +
+ (state.mode === TYPE ? 128 : 0) +
+ (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);
+ if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) {
+ ret = Z_BUF_ERROR;
+ }
+ return ret;
+ };
+
+
+ const inflateEnd = (strm) => {
+
+ if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {
+ return Z_STREAM_ERROR$1;
+ }
+
+ let state = strm.state;
+ if (state.window) {
+ state.window = null;
+ }
+ strm.state = null;
+ return Z_OK$1;
+ };
+
+
+ const inflateGetHeader = (strm, head) => {
+
+ /* check state */
+ if (!strm || !strm.state) { return Z_STREAM_ERROR$1; }
+ const state = strm.state;
+ if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; }
+
+ /* save header structure */
+ state.head = head;
+ head.done = false;
+ return Z_OK$1;
+ };
+
+
+ const inflateSetDictionary = (strm, dictionary) => {
+ const dictLength = dictionary.length;
+
+ let state;
+ let dictid;
+ let ret;
+
+ /* check state */
+ if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR$1; }
+ state = strm.state;
+
+ if (state.wrap !== 0 && state.mode !== DICT) {
+ return Z_STREAM_ERROR$1;
+ }
+
+ /* check for correct dictionary identifier */
+ if (state.mode === DICT) {
+ dictid = 1; /* adler32(0, null, 0)*/
+ /* dictid = adler32(dictid, dictionary, dictLength); */
+ dictid = adler32_1(dictid, dictionary, dictLength, 0);
+ if (dictid !== state.check) {
+ return Z_DATA_ERROR$1;
+ }
+ }
+ /* copy dictionary to window using updatewindow(), which will amend the
+ existing dictionary if appropriate */
+ ret = updatewindow(strm, dictionary, dictLength, dictLength);
+ if (ret) {
+ state.mode = MEM;
+ return Z_MEM_ERROR$1;
+ }
+ state.havedict = 1;
+ // Tracev((stderr, "inflate: dictionary set\n"));
+ return Z_OK$1;
+ };
+
+
+ var inflateReset_1 = inflateReset;
+ var inflateReset2_1 = inflateReset2;
+ var inflateResetKeep_1 = inflateResetKeep;
+ var inflateInit_1 = inflateInit;
+ var inflateInit2_1 = inflateInit2;
+ var inflate_2$1 = inflate$2;
+ var inflateEnd_1 = inflateEnd;
+ var inflateGetHeader_1 = inflateGetHeader;
+ var inflateSetDictionary_1 = inflateSetDictionary;
+ var inflateInfo = 'pako inflate (from Nodeca project)';
+
+ /* Not implemented
+ module.exports.inflateCopy = inflateCopy;
+ module.exports.inflateGetDictionary = inflateGetDictionary;
+ module.exports.inflateMark = inflateMark;
+ module.exports.inflatePrime = inflatePrime;
+ module.exports.inflateSync = inflateSync;
+ module.exports.inflateSyncPoint = inflateSyncPoint;
+ module.exports.inflateUndermine = inflateUndermine;
+ */
+
+ var inflate_1$2 = {
+ inflateReset: inflateReset_1,
+ inflateReset2: inflateReset2_1,
+ inflateResetKeep: inflateResetKeep_1,
+ inflateInit: inflateInit_1,
+ inflateInit2: inflateInit2_1,
+ inflate: inflate_2$1,
+ inflateEnd: inflateEnd_1,
+ inflateGetHeader: inflateGetHeader_1,
+ inflateSetDictionary: inflateSetDictionary_1,
+ inflateInfo: inflateInfo
+ };
+
+ // (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin
+ //
+ // This software is provided 'as-is', without any express or implied
+ // warranty. In no event will the authors be held liable for any damages
+ // arising from the use of this software.
+ //
+ // Permission is granted to anyone to use this software for any purpose,
+ // including commercial applications, and to alter it and redistribute it
+ // freely, subject to the following restrictions:
+ //
+ // 1. The origin of this software must not be misrepresented; you must not
+ // claim that you wrote the original software. If you use this software
+ // in a product, an acknowledgment in the product documentation would be
+ // appreciated but is not required.
+ // 2. Altered source versions must be plainly marked as such, and must not be
+ // misrepresented as being the original software.
+ // 3. This notice may not be removed or altered from any source distribution.
+
+ function GZheader() {
+ /* true if compressed data believed to be text */
+ this.text = 0;
+ /* modification time */
+ this.time = 0;
+ /* extra flags (not used when writing a gzip file) */
+ this.xflags = 0;
+ /* operating system */
+ this.os = 0;
+ /* pointer to extra field or Z_NULL if none */
+ this.extra = null;
+ /* extra field length (valid if extra != Z_NULL) */
+ this.extra_len = 0; // Actually, we don't need it in JS,
+ // but leave for few code modifications
+
+ //
+ // Setup limits is not necessary because in js we should not preallocate memory
+ // for inflate use constant limit in 65536 bytes
+ //
+
+ /* space at extra (only when reading header) */
+ // this.extra_max = 0;
+ /* pointer to zero-terminated file name or Z_NULL */
+ this.name = '';
+ /* space at name (only when reading header) */
+ // this.name_max = 0;
+ /* pointer to zero-terminated comment or Z_NULL */
+ this.comment = '';
+ /* space at comment (only when reading header) */
+ // this.comm_max = 0;
+ /* true if there was or will be a header crc */
+ this.hcrc = 0;
+ /* true when done reading gzip header (not used when writing a gzip file) */
+ this.done = false;
+ }
+
+ var gzheader = GZheader;
+
+ const toString = Object.prototype.toString;
+
+ /* Public constants ==========================================================*/
+ /* ===========================================================================*/
+
+ const {
+ Z_NO_FLUSH, Z_FINISH,
+ Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR
+ } = constants$2;
+
+ /* ===========================================================================*/
+
+
+ /**
+ * class Inflate
+ *
+ * Generic JS-style wrapper for zlib calls. If you don't need
+ * streaming behaviour - use more simple functions: [[inflate]]
+ * and [[inflateRaw]].
+ **/
+
+ /* internal
+ * inflate.chunks -> Array
+ *
+ * Chunks of output data, if [[Inflate#onData]] not overridden.
+ **/
+
+ /**
+ * Inflate.result -> Uint8Array|String
+ *
+ * Uncompressed result, generated by default [[Inflate#onData]]
+ * and [[Inflate#onEnd]] handlers. Filled after you push last chunk
+ * (call [[Inflate#push]] with `Z_FINISH` / `true` param).
+ **/
+
+ /**
+ * Inflate.err -> Number
+ *
+ * Error code after inflate finished. 0 (Z_OK) on success.
+ * Should be checked if broken data possible.
+ **/
+
+ /**
+ * Inflate.msg -> String
+ *
+ * Error message, if [[Inflate.err]] != 0
+ **/
+
+
+ /**
+ * new Inflate(options)
+ * - options (Object): zlib inflate options.
+ *
+ * Creates new inflator instance with specified params. Throws exception
+ * on bad params. Supported options:
+ *
+ * - `windowBits`
+ * - `dictionary`
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information on these.
+ *
+ * Additional options, for internal needs:
+ *
+ * - `chunkSize` - size of generated data chunks (16K by default)
+ * - `raw` (Boolean) - do raw inflate
+ * - `to` (String) - if equal to 'string', then result will be converted
+ * from utf8 to utf16 (javascript) string. When string output requested,
+ * chunk length can differ from `chunkSize`, depending on content.
+ *
+ * By default, when no options set, autodetect deflate/gzip data format via
+ * wrapper header.
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * const pako = require('pako')
+ * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])
+ * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);
+ *
+ * const inflate = new pako.Inflate({ level: 3});
+ *
+ * inflate.push(chunk1, false);
+ * inflate.push(chunk2, true); // true -> last chunk
+ *
+ * if (inflate.err) { throw new Error(inflate.err); }
+ *
+ * console.log(inflate.result);
+ * ```
+ **/
+ function Inflate$1(options) {
+ this.options = common.assign({
+ chunkSize: 1024 * 64,
+ windowBits: 15,
+ to: ''
+ }, options || {});
+
+ const opt = this.options;
+
+ // Force window size for `raw` data, if not set directly,
+ // because we have no header for autodetect.
+ if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {
+ opt.windowBits = -opt.windowBits;
+ if (opt.windowBits === 0) { opt.windowBits = -15; }
+ }
+
+ // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate
+ if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&
+ !(options && options.windowBits)) {
+ opt.windowBits += 32;
+ }
+
+ // Gzip header has no info about windows size, we can do autodetect only
+ // for deflate. So, if window size not set, force it to max when gzip possible
+ if ((opt.windowBits > 15) && (opt.windowBits < 48)) {
+ // bit 3 (16) -> gzipped data
+ // bit 4 (32) -> autodetect gzip/deflate
+ if ((opt.windowBits & 15) === 0) {
+ opt.windowBits |= 15;
+ }
+ }
+
+ this.err = 0; // error code, if happens (0 = Z_OK)
+ this.msg = ''; // error message
+ this.ended = false; // used to avoid multiple onEnd() calls
+ this.chunks = []; // chunks of compressed data
+
+ this.strm = new zstream();
+ this.strm.avail_out = 0;
+
+ let status = inflate_1$2.inflateInit2(
+ this.strm,
+ opt.windowBits
+ );
+
+ if (status !== Z_OK) {
+ throw new Error(messages[status]);
+ }
+
+ this.header = new gzheader();
+
+ inflate_1$2.inflateGetHeader(this.strm, this.header);
+
+ // Setup dictionary
+ if (opt.dictionary) {
+ // Convert data if needed
+ if (typeof opt.dictionary === 'string') {
+ opt.dictionary = strings.string2buf(opt.dictionary);
+ } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {
+ opt.dictionary = new Uint8Array(opt.dictionary);
+ }
+ if (opt.raw) { //In raw mode we need to set the dictionary early
+ status = inflate_1$2.inflateSetDictionary(this.strm, opt.dictionary);
+ if (status !== Z_OK) {
+ throw new Error(messages[status]);
+ }
+ }
+ }
+ }
+
+ /**
+ * Inflate#push(data[, flush_mode]) -> Boolean
+ * - data (Uint8Array|ArrayBuffer): input data
+ * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE
+ * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,
+ * `true` means Z_FINISH.
+ *
+ * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with
+ * new output chunks. Returns `true` on success. If end of stream detected,
+ * [[Inflate#onEnd]] will be called.
+ *
+ * `flush_mode` is not needed for normal operation, because end of stream
+ * detected automatically. You may try to use it for advanced things, but
+ * this functionality was not tested.
+ *
+ * On fail call [[Inflate#onEnd]] with error code and return false.
+ *
+ * ##### Example
+ *
+ * ```javascript
+ * push(chunk, false); // push one of data chunks
+ * ...
+ * push(chunk, true); // push last chunk
+ * ```
+ **/
+ Inflate$1.prototype.push = function (data, flush_mode) {
+ const strm = this.strm;
+ const chunkSize = this.options.chunkSize;
+ const dictionary = this.options.dictionary;
+ let status, _flush_mode, last_avail_out;
+
+ if (this.ended) return false;
+
+ if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;
+ else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;
+
+ // Convert data if needed
+ if (toString.call(data) === '[object ArrayBuffer]') {
+ strm.input = new Uint8Array(data);
+ } else {
+ strm.input = data;
+ }
+
+ strm.next_in = 0;
+ strm.avail_in = strm.input.length;
+
+ for (;;) {
+ if (strm.avail_out === 0) {
+ strm.output = new Uint8Array(chunkSize);
+ strm.next_out = 0;
+ strm.avail_out = chunkSize;
+ }
+
+ status = inflate_1$2.inflate(strm, _flush_mode);
+
+ if (status === Z_NEED_DICT && dictionary) {
+ status = inflate_1$2.inflateSetDictionary(strm, dictionary);
+
+ if (status === Z_OK) {
+ status = inflate_1$2.inflate(strm, _flush_mode);
+ } else if (status === Z_DATA_ERROR) {
+ // Replace code with more verbose
+ status = Z_NEED_DICT;
+ }
+ }
+
+ // Skip snyc markers if more data follows and not raw mode
+ while (strm.avail_in > 0 &&
+ status === Z_STREAM_END &&
+ strm.state.wrap > 0 &&
+ data[strm.next_in] !== 0)
+ {
+ inflate_1$2.inflateReset(strm);
+ status = inflate_1$2.inflate(strm, _flush_mode);
+ }
+
+ switch (status) {
+ case Z_STREAM_ERROR:
+ case Z_DATA_ERROR:
+ case Z_NEED_DICT:
+ case Z_MEM_ERROR:
+ this.onEnd(status);
+ this.ended = true;
+ return false;
+ }
+
+ // Remember real `avail_out` value, because we may patch out buffer content
+ // to align utf8 strings boundaries.
+ last_avail_out = strm.avail_out;
+
+ if (strm.next_out) {
+ if (strm.avail_out === 0 || status === Z_STREAM_END) {
+
+ if (this.options.to === 'string') {
+
+ let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);
+
+ let tail = strm.next_out - next_out_utf8;
+ let utf8str = strings.buf2string(strm.output, next_out_utf8);
+
+ // move tail & realign counters
+ strm.next_out = tail;
+ strm.avail_out = chunkSize - tail;
+ if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);
+
+ this.onData(utf8str);
+
+ } else {
+ this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));
+ }
+ }
+ }
+
+ // Must repeat iteration if out buffer is full
+ if (status === Z_OK && last_avail_out === 0) continue;
+
+ // Finalize if end of stream reached.
+ if (status === Z_STREAM_END) {
+ status = inflate_1$2.inflateEnd(this.strm);
+ this.onEnd(status);
+ this.ended = true;
+ return true;
+ }
+
+ if (strm.avail_in === 0) break;
+ }
+
+ return true;
+ };
+
+
+ /**
+ * Inflate#onData(chunk) -> Void
+ * - chunk (Uint8Array|String): output data. When string output requested,
+ * each chunk will be string.
+ *
+ * By default, stores data blocks in `chunks[]` property and glue
+ * those in `onEnd`. Override this handler, if you need another behaviour.
+ **/
+ Inflate$1.prototype.onData = function (chunk) {
+ this.chunks.push(chunk);
+ };
+
+
+ /**
+ * Inflate#onEnd(status) -> Void
+ * - status (Number): inflate status. 0 (Z_OK) on success,
+ * other if not.
+ *
+ * Called either after you tell inflate that the input stream is
+ * complete (Z_FINISH). By default - join collected chunks,
+ * free memory and fill `results` / `err` properties.
+ **/
+ Inflate$1.prototype.onEnd = function (status) {
+ // On success - join
+ if (status === Z_OK) {
+ if (this.options.to === 'string') {
+ this.result = this.chunks.join('');
+ } else {
+ this.result = common.flattenChunks(this.chunks);
+ }
+ }
+ this.chunks = [];
+ this.err = status;
+ this.msg = this.strm.msg;
+ };
+
+
+ /**
+ * inflate(data[, options]) -> Uint8Array|String
+ * - data (Uint8Array): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * Decompress `data` with inflate/ungzip and `options`. Autodetect
+ * format via wrapper header by default. That's why we don't provide
+ * separate `ungzip` method.
+ *
+ * Supported options are:
+ *
+ * - windowBits
+ *
+ * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)
+ * for more information.
+ *
+ * Sugar (options):
+ *
+ * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify
+ * negative windowBits implicitly.
+ * - `to` (String) - if equal to 'string', then result will be converted
+ * from utf8 to utf16 (javascript) string. When string output requested,
+ * chunk length can differ from `chunkSize`, depending on content.
+ *
+ *
+ * ##### Example:
+ *
+ * ```javascript
+ * const pako = require('pako');
+ * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));
+ * let output;
+ *
+ * try {
+ * output = pako.inflate(input);
+ * } catch (err) {
+ * console.log(err);
+ * }
+ * ```
+ **/
+ function inflate$1(input, options) {
+ const inflator = new Inflate$1(options);
+
+ inflator.push(input);
+
+ // That will never happens, if you don't cheat with options :)
+ if (inflator.err) throw inflator.msg || messages[inflator.err];
+
+ return inflator.result;
+ }
+
+
+ /**
+ * inflateRaw(data[, options]) -> Uint8Array|String
+ * - data (Uint8Array): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * The same as [[inflate]], but creates raw data, without wrapper
+ * (header and adler32 crc).
+ **/
+ function inflateRaw$1(input, options) {
+ options = options || {};
+ options.raw = true;
+ return inflate$1(input, options);
+ }
+
+
+ /**
+ * ungzip(data[, options]) -> Uint8Array|String
+ * - data (Uint8Array): input data to decompress.
+ * - options (Object): zlib inflate options.
+ *
+ * Just shortcut to [[inflate]], because it autodetects format
+ * by header.content. Done for convenience.
+ **/
+
+
+ var Inflate_1$1 = Inflate$1;
+ var inflate_2 = inflate$1;
+ var inflateRaw_1$1 = inflateRaw$1;
+ var ungzip$1 = inflate$1;
+ var constants = constants$2;
+
+ var inflate_1$1 = {
+ Inflate: Inflate_1$1,
+ inflate: inflate_2,
+ inflateRaw: inflateRaw_1$1,
+ ungzip: ungzip$1,
+ constants: constants
+ };
+
+ const { Deflate, deflate, deflateRaw, gzip } = deflate_1$1;
+
+ const { Inflate, inflate, inflateRaw, ungzip } = inflate_1$1;
+
+
+
+ var Deflate_1 = Deflate;
+ var deflate_1 = deflate;
+ var deflateRaw_1 = deflateRaw;
+ var gzip_1 = gzip;
+ var Inflate_1 = Inflate;
+ var inflate_1 = inflate;
+ var inflateRaw_1 = inflateRaw;
+ var ungzip_1 = ungzip;
+ var constants_1 = constants$2;
+
+ var pako = {
+ Deflate: Deflate_1,
+ deflate: deflate_1,
+ deflateRaw: deflateRaw_1,
+ gzip: gzip_1,
+ Inflate: Inflate_1,
+ inflate: inflate_1,
+ inflateRaw: inflateRaw_1,
+ ungzip: ungzip_1,
+ constants: constants_1
+ };
+
+ function toInt(val) {
+ if (isNaN(val)) {
+ throw new Error("Not a number: " + val);
+ } else if (typeof val == "string") {
+ return parseInt(val);
+ } else return val;
+ }
+
+ function toFloat(val) {
+ if (typeof val == "string") {
+ return parseFloat(val);
+ } else return val;
+ }
+
+ var BufferStream = /*#__PURE__*/function () {
+ function BufferStream(sizeOrBuffer, littleEndian) {
+ _classCallCheck(this, BufferStream);
+
+ this.buffer = typeof sizeOrBuffer == "number" ? new ArrayBuffer(sizeOrBuffer) : sizeOrBuffer;
+
+ if (!this.buffer) {
+ this.buffer = new ArrayBuffer(0);
+ }
+
+ this.view = new DataView(this.buffer);
+ this.offset = 0;
+ this.isLittleEndian = littleEndian || false;
+ this.size = 0;
+ this.encoder = new TextEncoder("utf-8");
+ }
+
+ _createClass(BufferStream, [{
+ key: "setEndian",
+ value: function setEndian(isLittle) {
+ this.isLittleEndian = isLittle;
+ }
+ }, {
+ key: "writeUint8",
+ value: function writeUint8(value) {
+ this.checkSize(1);
+ this.view.setUint8(this.offset, toInt(value));
+ return this.increment(1);
+ }
+ }, {
+ key: "writeUint8Repeat",
+ value: function writeUint8Repeat(value, count) {
+ var v = toInt(value);
+ this.checkSize(count);
+
+ for (var i = 0; i < count; i++) {
+ this.view.setUint8(this.offset + i, v);
+ }
+
+ return this.increment(count);
+ }
+ }, {
+ key: "writeInt8",
+ value: function writeInt8(value) {
+ this.checkSize(1);
+ this.view.setInt8(this.offset, toInt(value));
+ return this.increment(1);
+ }
+ }, {
+ key: "writeUint16",
+ value: function writeUint16(value) {
+ this.checkSize(2);
+ this.view.setUint16(this.offset, toInt(value), this.isLittleEndian);
+ return this.increment(2);
+ }
+ }, {
+ key: "writeTwoUint16s",
+ value: function writeTwoUint16s(value) {
+ this.checkSize(4);
+ var first = value >> 16;
+ var second = value & 0xffff;
+ this.view.setUint16(this.offset, toInt(first), this.isLittleEndian);
+ this.view.setUint16(this.offset + 2, toInt(second), this.isLittleEndian);
+ return this.increment(4);
+ }
+ }, {
+ key: "writeInt16",
+ value: function writeInt16(value) {
+ this.checkSize(2);
+ this.view.setInt16(this.offset, toInt(value), this.isLittleEndian);
+ return this.increment(2);
+ }
+ }, {
+ key: "writeUint32",
+ value: function writeUint32(value) {
+ this.checkSize(4);
+ this.view.setUint32(this.offset, toInt(value), this.isLittleEndian);
+ return this.increment(4);
+ }
+ }, {
+ key: "writeInt32",
+ value: function writeInt32(value) {
+ this.checkSize(4);
+ this.view.setInt32(this.offset, toInt(value), this.isLittleEndian);
+ return this.increment(4);
+ }
+ }, {
+ key: "writeFloat",
+ value: function writeFloat(value) {
+ this.checkSize(4);
+ this.view.setFloat32(this.offset, toFloat(value), this.isLittleEndian);
+ return this.increment(4);
+ }
+ }, {
+ key: "writeDouble",
+ value: function writeDouble(value) {
+ this.checkSize(8);
+ this.view.setFloat64(this.offset, toFloat(value), this.isLittleEndian);
+ return this.increment(8);
+ }
+ }, {
+ key: "writeUTF8String",
+ value: function writeUTF8String(value) {
+ var encodedString = this.encoder.encode(value);
+ this.checkSize(encodedString.byteLength);
+ new Uint8Array(this.buffer).set(encodedString, this.offset);
+ return this.increment(encodedString.byteLength);
+ }
+ }, {
+ key: "writeAsciiString",
+ value: function writeAsciiString(value) {
+ value = value || "";
+ var len = value.length;
+ this.checkSize(len);
+ var startOffset = this.offset;
+
+ for (var i = 0; i < len; i++) {
+ var charcode = value.charCodeAt(i);
+ this.view.setUint8(startOffset + i, charcode);
+ }
+
+ return this.increment(len);
+ }
+ }, {
+ key: "readUint32",
+ value: function readUint32() {
+ var val = this.view.getUint32(this.offset, this.isLittleEndian);
+ this.increment(4);
+ return val;
+ }
+ }, {
+ key: "readUint16",
+ value: function readUint16() {
+ var val = this.view.getUint16(this.offset, this.isLittleEndian);
+ this.increment(2);
+ return val;
+ }
+ }, {
+ key: "readUint8",
+ value: function readUint8() {
+ var val = this.view.getUint8(this.offset);
+ this.increment(1);
+ return val;
+ }
+ }, {
+ key: "peekUint8",
+ value: function peekUint8(offset) {
+ return this.view.getUint8(this.offset + offset);
+ }
+ }, {
+ key: "readUint8Array",
+ value: function readUint8Array(length) {
+ var arr = new Uint8Array(this.buffer, this.offset, length);
+ this.increment(length);
+ return arr;
+ }
+ }, {
+ key: "readUint16Array",
+ value: function readUint16Array(length) {
+ var sixlen = length / 2,
+ arr = new Uint16Array(sixlen),
+ i = 0;
+
+ while (i++ < sixlen) {
+ arr[i] = this.view.getUint16(this.offset, this.isLittleEndian);
+ this.offset += 2;
+ }
+
+ return arr;
+ }
+ }, {
+ key: "readInt16",
+ value: function readInt16() {
+ var val = this.view.getInt16(this.offset, this.isLittleEndian);
+ this.increment(2);
+ return val;
+ }
+ }, {
+ key: "readInt32",
+ value: function readInt32() {
+ var val = this.view.getInt32(this.offset, this.isLittleEndian);
+ this.increment(4);
+ return val;
+ }
+ }, {
+ key: "readFloat",
+ value: function readFloat() {
+ var val = this.view.getFloat32(this.offset, this.isLittleEndian);
+ this.increment(4);
+ return val;
+ }
+ }, {
+ key: "readDouble",
+ value: function readDouble() {
+ var val = this.view.getFloat64(this.offset, this.isLittleEndian);
+ this.increment(8);
+ return val;
+ }
+ }, {
+ key: "readAsciiString",
+ value: function readAsciiString(length) {
+ var result = "";
+ var start = this.offset;
+ var end = this.offset + length;
+
+ if (end >= this.buffer.byteLength) {
+ end = this.buffer.byteLength;
+ }
+
+ for (var i = start; i < end; ++i) {
+ result += String.fromCharCode(this.view.getUint8(i));
+ }
+
+ this.increment(end - start);
+ return result;
+ }
+ }, {
+ key: "readVR",
+ value: function readVR() {
+ var vr = String.fromCharCode(this.view.getUint8(this.offset)) + String.fromCharCode(this.view.getUint8(this.offset + 1));
+ this.increment(2);
+ return vr;
+ }
+ }, {
+ key: "readEncodedString",
+ value: function readEncodedString(length) {
+ if (this.offset + length >= this.buffer.byteLength) {
+ length = this.buffer.byteLength - this.offset;
+ }
+
+ var view = new DataView(this.buffer, this.offset, length);
+ var result = this.decoder.decode(view);
+ this.increment(length);
+ return result;
+ }
+ }, {
+ key: "readHex",
+ value: function readHex(length) {
+ var hexString = "";
+
+ for (var i = 0; i < length; i++) {
+ hexString += this.readUint8().toString(16);
+ }
+
+ return hexString;
+ }
+ }, {
+ key: "checkSize",
+ value: function checkSize(step) {
+ if (this.offset + step > this.buffer.byteLength) {
+ //throw new Error("Writing exceeded the size of buffer");
+ //
+ // Resize the buffer.
+ // The idea is that when it is necessary to increase the buffer size,
+ // there will likely be more bytes which need to be written to the
+ // buffer in the future. Buffer allocation is costly.
+ // So we increase the buffer size right now
+ // by a larger amount than necessary, to reserve space for later
+ // writes which then can be done much faster. The current size of
+ // the buffer is the best estimate of the scale by which the size
+ // should increase.
+ // So approximately doubling the size of the buffer
+ // (while ensuring it fits the new data) is a simple but effective strategy.
+ var dstSize = this.offset + step + this.buffer.byteLength;
+ var dst = new ArrayBuffer(dstSize);
+ new Uint8Array(dst).set(new Uint8Array(this.buffer));
+ this.buffer = dst;
+ this.view = new DataView(this.buffer);
+ }
+ }
+ }, {
+ key: "concat",
+ value: function concat(stream) {
+ var available = this.buffer.byteLength - this.offset;
+
+ if (stream.size > available) {
+ var newbuf = new ArrayBuffer(this.offset + stream.size);
+ var int8 = new Uint8Array(newbuf);
+ int8.set(new Uint8Array(this.getBuffer(0, this.offset)));
+ int8.set(new Uint8Array(stream.getBuffer(0, stream.size)), this.offset);
+ this.buffer = newbuf;
+ this.view = new DataView(this.buffer);
+ } else {
+ var _int = new Uint8Array(this.buffer);
+
+ _int.set(new Uint8Array(stream.getBuffer(0, stream.size)), this.offset);
+ }
+
+ this.offset += stream.size;
+ this.size = this.offset;
+ return this.buffer.byteLength;
+ }
+ }, {
+ key: "increment",
+ value: function increment(step) {
+ this.offset += step;
+
+ if (this.offset > this.size) {
+ this.size = this.offset;
+ }
+
+ return step;
+ }
+ }, {
+ key: "getBuffer",
+ value: function getBuffer(start, end) {
+ if (!start && !end) {
+ start = 0;
+ end = this.size;
+ }
+
+ return this.buffer.slice(start, end);
+ }
+ }, {
+ key: "more",
+ value: function more(length) {
+ if (this.offset + length > this.endOffset) {
+ throw new Error("Request more than currently allocated buffer");
+ }
+
+ var newBuf = new ReadBufferStream(this.buffer, null, {
+ start: this.offset,
+ stop: this.offset + length
+ });
+ this.increment(length);
+ return newBuf;
+ }
+ }, {
+ key: "reset",
+ value: function reset() {
+ this.offset = 0;
+ return this;
+ }
+ }, {
+ key: "end",
+ value: function end() {
+ return this.offset >= this.buffer.byteLength;
+ }
+ }, {
+ key: "toEnd",
+ value: function toEnd() {
+ this.offset = this.buffer.byteLength;
+ }
+ }]);
+
+ return BufferStream;
+ }();
+
+ var ReadBufferStream = /*#__PURE__*/function (_BufferStream) {
+ _inherits(ReadBufferStream, _BufferStream);
+
+ var _super = _createSuper(ReadBufferStream);
+
+ function ReadBufferStream(buffer, littleEndian) {
+ var _this;
+
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
+ start: null,
+ stop: null,
+ noCopy: false
+ };
+
+ _classCallCheck(this, ReadBufferStream);
+
+ _this = _super.call(this, buffer, littleEndian);
+ _this.offset = options.start || 0;
+ _this.size = options.stop || _this.buffer.byteLength;
+ _this.noCopy = options.noCopy;
+ _this.startOffset = _this.offset;
+ _this.endOffset = _this.size;
+ _this.decoder = new TextDecoder("latin1");
+ return _this;
+ }
+
+ _createClass(ReadBufferStream, [{
+ key: "setDecoder",
+ value: function setDecoder(decoder) {
+ this.decoder = decoder;
+ }
+ }, {
+ key: "getBuffer",
+ value: function getBuffer(start, end) {
+ if (this.noCopy) {
+ return new Uint8Array(this.buffer, start, end - start);
+ }
+
+ if (!start && !end) {
+ start = 0;
+ end = this.size;
+ }
+
+ return this.buffer.slice(start, end);
+ }
+ }, {
+ key: "reset",
+ value: function reset() {
+ this.offset = this.startOffset;
+ return this;
+ }
+ }, {
+ key: "end",
+ value: function end() {
+ return this.offset >= this.endOffset;
+ }
+ }, {
+ key: "toEnd",
+ value: function toEnd() {
+ this.offset = this.endOffset;
+ }
+ }, {
+ key: "writeUint8",
+ value: function writeUint8(value) {
+ throw new Error(value, "writeUint8 not implemented");
+ }
+ }, {
+ key: "writeUint8Repeat",
+ value: function writeUint8Repeat(value, count) {
+ throw new Error(value, "writeUint8Repeat not implemented");
+ }
+ }, {
+ key: "writeInt8",
+ value: function writeInt8(value) {
+ throw new Error(value, "writeInt8 not implemented");
+ }
+ }, {
+ key: "writeUint16",
+ value: function writeUint16(value) {
+ throw new Error(value, "writeUint16 not implemented");
+ }
+ }, {
+ key: "writeTwoUint16s",
+ value: function writeTwoUint16s(value) {
+ throw new Error(value, "writeTwoUint16s not implemented");
+ }
+ }, {
+ key: "writeInt16",
+ value: function writeInt16(value) {
+ throw new Error(value, "writeInt16 not implemented");
+ }
+ }, {
+ key: "writeUint32",
+ value: function writeUint32(value) {
+ throw new Error(value, "writeUint32 not implemented");
+ }
+ }, {
+ key: "writeInt32",
+ value: function writeInt32(value) {
+ throw new Error(value, "writeInt32 not implemented");
+ }
+ }, {
+ key: "writeFloat",
+ value: function writeFloat(value) {
+ throw new Error(value, "writeFloat not implemented");
+ }
+ }, {
+ key: "writeDouble",
+ value: function writeDouble(value) {
+ throw new Error(value, "writeDouble not implemented");
+ }
+ }, {
+ key: "writeAsciiString",
+ value: function writeAsciiString(value) {
+ throw new Error(value, "writeAsciiString not implemented");
+ }
+ }, {
+ key: "writeUTF8String",
+ value: function writeUTF8String(value) {
+ throw new Error(value, "writeUTF8String not implemented");
+ }
+ }, {
+ key: "checkSize",
+ value: function checkSize(step) {
+ throw new Error(step, "checkSize not implemented");
+ }
+ }, {
+ key: "concat",
+ value: function concat(stream) {
+ throw new Error(stream, "concat not implemented");
+ }
+ }]);
+
+ return ReadBufferStream;
+ }(BufferStream);
+
+ var DeflatedReadBufferStream = /*#__PURE__*/function (_ReadBufferStream) {
+ _inherits(DeflatedReadBufferStream, _ReadBufferStream);
+
+ var _super2 = _createSuper(DeflatedReadBufferStream);
+
+ function DeflatedReadBufferStream(stream, options) {
+ _classCallCheck(this, DeflatedReadBufferStream);
+
+ var inflatedBuffer = pako.inflateRaw(stream.getBuffer(stream.offset, stream.size));
+ return _super2.call(this, inflatedBuffer.buffer, stream.littleEndian, options);
+ }
+
+ return _createClass(DeflatedReadBufferStream);
+ }(ReadBufferStream);
+
+ var WriteBufferStream = /*#__PURE__*/function (_BufferStream2) {
+ _inherits(WriteBufferStream, _BufferStream2);
+
+ var _super3 = _createSuper(WriteBufferStream);
+
+ function WriteBufferStream(buffer, littleEndian) {
+ var _this2;
+
+ _classCallCheck(this, WriteBufferStream);
+
+ _this2 = _super3.call(this, buffer, littleEndian);
+ _this2.size = 0;
+ return _this2;
+ }
+
+ return _createClass(WriteBufferStream);
+ }(BufferStream);
+
+ // TransferSyntaxUIDs
+ var IMPLICIT_LITTLE_ENDIAN = "1.2.840.10008.1.2";
+ var EXPLICIT_LITTLE_ENDIAN$1 = "1.2.840.10008.1.2.1";
+ var DEFLATED_EXPLICIT_LITTLE_ENDIAN = "1.2.840.10008.1.2.1.99";
+ var EXPLICIT_BIG_ENDIAN = "1.2.840.10008.1.2.2"; // Data Element Length
+
+ var dictionary={"(0000,0000)":{tag:"(0000,0000)",vr:"UL",name:"CommandGroupLength",vm:"1",version:"DICOM"},"(0000,0002)":{tag:"(0000,0002)",vr:"UI",name:"AffectedSOPClassUID",vm:"1",version:"DICOM"},"(0000,0003)":{tag:"(0000,0003)",vr:"UI",name:"RequestedSOPClassUID",vm:"1",version:"DICOM"},"(0000,0100)":{tag:"(0000,0100)",vr:"US",name:"CommandField",vm:"1",version:"DICOM"},"(0000,0110)":{tag:"(0000,0110)",vr:"US",name:"MessageID",vm:"1",version:"DICOM"},"(0000,0120)":{tag:"(0000,0120)",vr:"US",name:"MessageIDBeingRespondedTo",vm:"1",version:"DICOM"},"(0000,0600)":{tag:"(0000,0600)",vr:"AE",name:"MoveDestination",vm:"1",version:"DICOM"},"(0000,0700)":{tag:"(0000,0700)",vr:"US",name:"Priority",vm:"1",version:"DICOM"},"(0000,0800)":{tag:"(0000,0800)",vr:"US",name:"CommandDataSetType",vm:"1",version:"DICOM"},"(0000,0900)":{tag:"(0000,0900)",vr:"US",name:"Status",vm:"1",version:"DICOM"},"(0000,0901)":{tag:"(0000,0901)",vr:"AT",name:"OffendingElement",vm:"1-n",version:"DICOM"},"(0000,0902)":{tag:"(0000,0902)",vr:"LO",name:"ErrorComment",vm:"1",version:"DICOM"},"(0000,0903)":{tag:"(0000,0903)",vr:"US",name:"ErrorID",vm:"1",version:"DICOM"},"(0000,1000)":{tag:"(0000,1000)",vr:"UI",name:"AffectedSOPInstanceUID",vm:"1",version:"DICOM"},"(0000,1001)":{tag:"(0000,1001)",vr:"UI",name:"RequestedSOPInstanceUID",vm:"1",version:"DICOM"},"(0000,1002)":{tag:"(0000,1002)",vr:"US",name:"EventTypeID",vm:"1",version:"DICOM"},"(0000,1005)":{tag:"(0000,1005)",vr:"AT",name:"AttributeIdentifierList",vm:"1-n",version:"DICOM"},"(0000,1008)":{tag:"(0000,1008)",vr:"US",name:"ActionTypeID",vm:"1",version:"DICOM"},"(0000,1020)":{tag:"(0000,1020)",vr:"US",name:"NumberOfRemainingSuboperations",vm:"1",version:"DICOM"},"(0000,1021)":{tag:"(0000,1021)",vr:"US",name:"NumberOfCompletedSuboperations",vm:"1",version:"DICOM"},"(0000,1022)":{tag:"(0000,1022)",vr:"US",name:"NumberOfFailedSuboperations",vm:"1",version:"DICOM"},"(0000,1023)":{tag:"(0000,1023)",vr:"US",name:"NumberOfWarningSuboperations",vm:"1",version:"DICOM"},"(0000,1030)":{tag:"(0000,1030)",vr:"AE",name:"MoveOriginatorApplicationEntityTitle",vm:"1",version:"DICOM"},"(0000,1031)":{tag:"(0000,1031)",vr:"US",name:"MoveOriginatorMessageID",vm:"1",version:"DICOM"},"(0002,0000)":{tag:"(0002,0000)",vr:"UL",name:"FileMetaInformationGroupLength",vm:"1",version:"DICOM"},"(0002,0001)":{tag:"(0002,0001)",vr:"OB",name:"FileMetaInformationVersion",vm:"1",version:"DICOM"},"(0002,0002)":{tag:"(0002,0002)",vr:"UI",name:"MediaStorageSOPClassUID",vm:"1",version:"DICOM"},"(0002,0003)":{tag:"(0002,0003)",vr:"UI",name:"MediaStorageSOPInstanceUID",vm:"1",version:"DICOM"},"(0002,0010)":{tag:"(0002,0010)",vr:"UI",name:"TransferSyntaxUID",vm:"1",version:"DICOM"},"(0002,0012)":{tag:"(0002,0012)",vr:"UI",name:"ImplementationClassUID",vm:"1",version:"DICOM"},"(0002,0013)":{tag:"(0002,0013)",vr:"SH",name:"ImplementationVersionName",vm:"1",version:"DICOM"},"(0002,0016)":{tag:"(0002,0016)",vr:"AE",name:"SourceApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0017)":{tag:"(0002,0017)",vr:"AE",name:"SendingApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0018)":{tag:"(0002,0018)",vr:"AE",name:"ReceivingApplicationEntityTitle",vm:"1",version:"DICOM"},"(0002,0100)":{tag:"(0002,0100)",vr:"UI",name:"PrivateInformationCreatorUID",vm:"1",version:"DICOM"},"(0002,0102)":{tag:"(0002,0102)",vr:"OB",name:"PrivateInformation",vm:"1",version:"DICOM"},"(0004,1130)":{tag:"(0004,1130)",vr:"CS",name:"FileSetID",vm:"1",version:"DICOM"},"(0004,1141)":{tag:"(0004,1141)",vr:"CS",name:"FileSetDescriptorFileID",vm:"1-8",version:"DICOM"},"(0004,1142)":{tag:"(0004,1142)",vr:"CS",name:"SpecificCharacterSetOfFileSetDescriptorFile",vm:"1",version:"DICOM"},"(0004,1200)":{tag:"(0004,1200)",vr:"up",name:"OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1202)":{tag:"(0004,1202)",vr:"up",name:"OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1212)":{tag:"(0004,1212)",vr:"US",name:"FileSetConsistencyFlag",vm:"1",version:"DICOM"},"(0004,1220)":{tag:"(0004,1220)",vr:"SQ",name:"DirectoryRecordSequence",vm:"1",version:"DICOM"},"(0004,1400)":{tag:"(0004,1400)",vr:"up",name:"OffsetOfTheNextDirectoryRecord",vm:"1",version:"DICOM"},"(0004,1410)":{tag:"(0004,1410)",vr:"US",name:"RecordInUseFlag",vm:"1",version:"DICOM"},"(0004,1420)":{tag:"(0004,1420)",vr:"up",name:"OffsetOfReferencedLowerLevelDirectoryEntity",vm:"1",version:"DICOM"},"(0004,1430)":{tag:"(0004,1430)",vr:"CS",name:"DirectoryRecordType",vm:"1",version:"DICOM"},"(0004,1432)":{tag:"(0004,1432)",vr:"UI",name:"PrivateRecordUID",vm:"1",version:"DICOM"},"(0004,1500)":{tag:"(0004,1500)",vr:"CS",name:"ReferencedFileID",vm:"1-8",version:"DICOM"},"(0004,1510)":{tag:"(0004,1510)",vr:"UI",name:"ReferencedSOPClassUIDInFile",vm:"1",version:"DICOM"},"(0004,1511)":{tag:"(0004,1511)",vr:"UI",name:"ReferencedSOPInstanceUIDInFile",vm:"1",version:"DICOM"},"(0004,1512)":{tag:"(0004,1512)",vr:"UI",name:"ReferencedTransferSyntaxUIDInFile",vm:"1",version:"DICOM"},"(0004,151A)":{tag:"(0004,151A)",vr:"UI",name:"ReferencedRelatedGeneralSOPClassUIDInFile",vm:"1-n",version:"DICOM"},"(0008,0005)":{tag:"(0008,0005)",vr:"CS",name:"SpecificCharacterSet",vm:"1-n",version:"DICOM"},"(0008,0006)":{tag:"(0008,0006)",vr:"SQ",name:"LanguageCodeSequence",vm:"1",version:"DICOM"},"(0008,0008)":{tag:"(0008,0008)",vr:"CS",name:"ImageType",vm:"2-n",version:"DICOM"},"(0008,0012)":{tag:"(0008,0012)",vr:"DA",name:"InstanceCreationDate",vm:"1",version:"DICOM"},"(0008,0013)":{tag:"(0008,0013)",vr:"TM",name:"InstanceCreationTime",vm:"1",version:"DICOM"},"(0008,0014)":{tag:"(0008,0014)",vr:"UI",name:"InstanceCreatorUID",vm:"1",version:"DICOM"},"(0008,0015)":{tag:"(0008,0015)",vr:"DT",name:"InstanceCoercionDateTime",vm:"1",version:"DICOM"},"(0008,0016)":{tag:"(0008,0016)",vr:"UI",name:"SOPClassUID",vm:"1",version:"DICOM"},"(0008,0018)":{tag:"(0008,0018)",vr:"UI",name:"SOPInstanceUID",vm:"1",version:"DICOM"},"(0008,001A)":{tag:"(0008,001A)",vr:"UI",name:"RelatedGeneralSOPClassUID",vm:"1-n",version:"DICOM"},"(0008,001B)":{tag:"(0008,001B)",vr:"UI",name:"OriginalSpecializedSOPClassUID",vm:"1",version:"DICOM"},"(0008,0020)":{tag:"(0008,0020)",vr:"DA",name:"StudyDate",vm:"1",version:"DICOM"},"(0008,0021)":{tag:"(0008,0021)",vr:"DA",name:"SeriesDate",vm:"1",version:"DICOM"},"(0008,0022)":{tag:"(0008,0022)",vr:"DA",name:"AcquisitionDate",vm:"1",version:"DICOM"},"(0008,0023)":{tag:"(0008,0023)",vr:"DA",name:"ContentDate",vm:"1",version:"DICOM"},"(0008,002A)":{tag:"(0008,002A)",vr:"DT",name:"AcquisitionDateTime",vm:"1",version:"DICOM"},"(0008,0030)":{tag:"(0008,0030)",vr:"TM",name:"StudyTime",vm:"1",version:"DICOM"},"(0008,0031)":{tag:"(0008,0031)",vr:"TM",name:"SeriesTime",vm:"1",version:"DICOM"},"(0008,0032)":{tag:"(0008,0032)",vr:"TM",name:"AcquisitionTime",vm:"1",version:"DICOM"},"(0008,0033)":{tag:"(0008,0033)",vr:"TM",name:"ContentTime",vm:"1",version:"DICOM"},"(0008,0050)":{tag:"(0008,0050)",vr:"SH",name:"AccessionNumber",vm:"1",version:"DICOM"},"(0008,0051)":{tag:"(0008,0051)",vr:"SQ",name:"IssuerOfAccessionNumberSequence",vm:"1",version:"DICOM"},"(0008,0052)":{tag:"(0008,0052)",vr:"CS",name:"QueryRetrieveLevel",vm:"1",version:"DICOM"},"(0008,0053)":{tag:"(0008,0053)",vr:"CS",name:"QueryRetrieveView",vm:"1",version:"DICOM"},"(0008,0054)":{tag:"(0008,0054)",vr:"AE",name:"RetrieveAETitle",vm:"1-n",version:"DICOM"},"(0008,0055)":{tag:"(0008,0055)",vr:"AE",name:"StationAETitle",vm:"1",version:"DICOM"},"(0008,0056)":{tag:"(0008,0056)",vr:"CS",name:"InstanceAvailability",vm:"1",version:"DICOM"},"(0008,0058)":{tag:"(0008,0058)",vr:"UI",name:"FailedSOPInstanceUIDList",vm:"1-n",version:"DICOM"},"(0008,0060)":{tag:"(0008,0060)",vr:"CS",name:"Modality",vm:"1",version:"DICOM"},"(0008,0061)":{tag:"(0008,0061)",vr:"CS",name:"ModalitiesInStudy",vm:"1-n",version:"DICOM"},"(0008,0062)":{tag:"(0008,0062)",vr:"UI",name:"SOPClassesInStudy",vm:"1-n",version:"DICOM"},"(0008,0063)":{tag:"(0008,0063)",vr:"SQ",name:"AnatomicRegionsInStudyCodeSequence",vm:"1",version:"DICOM"},"(0008,0064)":{tag:"(0008,0064)",vr:"CS",name:"ConversionType",vm:"1",version:"DICOM"},"(0008,0068)":{tag:"(0008,0068)",vr:"CS",name:"PresentationIntentType",vm:"1",version:"DICOM"},"(0008,0070)":{tag:"(0008,0070)",vr:"LO",name:"Manufacturer",vm:"1",version:"DICOM"},"(0008,0080)":{tag:"(0008,0080)",vr:"LO",name:"InstitutionName",vm:"1",version:"DICOM"},"(0008,0081)":{tag:"(0008,0081)",vr:"ST",name:"InstitutionAddress",vm:"1",version:"DICOM"},"(0008,0082)":{tag:"(0008,0082)",vr:"SQ",name:"InstitutionCodeSequence",vm:"1",version:"DICOM"},"(0008,0090)":{tag:"(0008,0090)",vr:"PN",name:"ReferringPhysicianName",vm:"1",version:"DICOM"},"(0008,0092)":{tag:"(0008,0092)",vr:"ST",name:"ReferringPhysicianAddress",vm:"1",version:"DICOM"},"(0008,0094)":{tag:"(0008,0094)",vr:"SH",name:"ReferringPhysicianTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0008,0096)":{tag:"(0008,0096)",vr:"SQ",name:"ReferringPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,009C)":{tag:"(0008,009C)",vr:"PN",name:"ConsultingPhysicianName",vm:"1-n",version:"DICOM"},"(0008,009D)":{tag:"(0008,009D)",vr:"SQ",name:"ConsultingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0100)":{tag:"(0008,0100)",vr:"SH",name:"CodeValue",vm:"1",version:"DICOM"},"(0008,0101)":{tag:"(0008,0101)",vr:"LO",name:"ExtendedCodeValue",vm:"1",version:"DICOM/DICOS"},"(0008,0102)":{tag:"(0008,0102)",vr:"SH",name:"CodingSchemeDesignator",vm:"1",version:"DICOM"},"(0008,0103)":{tag:"(0008,0103)",vr:"SH",name:"CodingSchemeVersion",vm:"1",version:"DICOM"},"(0008,0104)":{tag:"(0008,0104)",vr:"LO",name:"CodeMeaning",vm:"1",version:"DICOM"},"(0008,0105)":{tag:"(0008,0105)",vr:"CS",name:"MappingResource",vm:"1",version:"DICOM"},"(0008,0106)":{tag:"(0008,0106)",vr:"DT",name:"ContextGroupVersion",vm:"1",version:"DICOM"},"(0008,0107)":{tag:"(0008,0107)",vr:"DT",name:"ContextGroupLocalVersion",vm:"1",version:"DICOM"},"(0008,0108)":{tag:"(0008,0108)",vr:"LT",name:"ExtendedCodeMeaning",vm:"1",version:"DICOM/DICOS"},"(0008,0109)":{tag:"(0008,0109)",vr:"SQ",name:"CodingSchemeResourcesSequence",vm:"1",version:"DICOM"},"(0008,010A)":{tag:"(0008,010A)",vr:"CS",name:"CodingSchemeURLType",vm:"1",version:"DICOM"},"(0008,010B)":{tag:"(0008,010B)",vr:"CS",name:"ContextGroupExtensionFlag",vm:"1",version:"DICOM"},"(0008,010C)":{tag:"(0008,010C)",vr:"UI",name:"CodingSchemeUID",vm:"1",version:"DICOM"},"(0008,010D)":{tag:"(0008,010D)",vr:"UI",name:"ContextGroupExtensionCreatorUID",vm:"1",version:"DICOM"},"(0008,010E)":{tag:"(0008,010E)",vr:"UR",name:"CodingSchemeURL",vm:"1",version:"DICOM"},"(0008,010F)":{tag:"(0008,010F)",vr:"CS",name:"ContextIdentifier",vm:"1",version:"DICOM"},"(0008,0110)":{tag:"(0008,0110)",vr:"SQ",name:"CodingSchemeIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0112)":{tag:"(0008,0112)",vr:"LO",name:"CodingSchemeRegistry",vm:"1",version:"DICOM"},"(0008,0114)":{tag:"(0008,0114)",vr:"ST",name:"CodingSchemeExternalID",vm:"1",version:"DICOM"},"(0008,0115)":{tag:"(0008,0115)",vr:"ST",name:"CodingSchemeName",vm:"1",version:"DICOM"},"(0008,0116)":{tag:"(0008,0116)",vr:"ST",name:"CodingSchemeResponsibleOrganization",vm:"1",version:"DICOM"},"(0008,0117)":{tag:"(0008,0117)",vr:"UI",name:"ContextUID",vm:"1",version:"DICOM"},"(0008,0118)":{tag:"(0008,0118)",vr:"UI",name:"MappingResourceUID",vm:"1",version:"DICOM"},"(0008,0119)":{tag:"(0008,0119)",vr:"UC",name:"LongCodeValue",vm:"1",version:"DICOM"},"(0008,0120)":{tag:"(0008,0120)",vr:"UR",name:"URNCodeValue",vm:"1",version:"DICOM"},"(0008,0121)":{tag:"(0008,0121)",vr:"SQ",name:"EquivalentCodeSequence",vm:"1",version:"DICOM"},"(0008,0122)":{tag:"(0008,0122)",vr:"LO",name:"MappingResourceName",vm:"1",version:"DICOM"},"(0008,0123)":{tag:"(0008,0123)",vr:"SQ",name:"ContextGroupIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0124)":{tag:"(0008,0124)",vr:"SQ",name:"MappingResourceIdentificationSequence",vm:"1",version:"DICOM"},"(0008,0201)":{tag:"(0008,0201)",vr:"SH",name:"TimezoneOffsetFromUTC",vm:"1",version:"DICOM"},"(0008,0220)":{tag:"(0008,0220)",vr:"SQ",name:"ResponsibleGroupCodeSequence",vm:"1",version:"DICOM"},"(0008,0221)":{tag:"(0008,0221)",vr:"CS",name:"EquipmentModality",vm:"1",version:"DICOM"},"(0008,0222)":{tag:"(0008,0222)",vr:"LO",name:"ManufacturerRelatedModelGroup",vm:"1",version:"DICOM"},"(0008,0300)":{tag:"(0008,0300)",vr:"SQ",name:"PrivateDataElementCharacteristicsSequence",vm:"1",version:"DICOM"},"(0008,0301)":{tag:"(0008,0301)",vr:"US",name:"PrivateGroupReference",vm:"1",version:"DICOM"},"(0008,0302)":{tag:"(0008,0302)",vr:"LO",name:"PrivateCreatorReference",vm:"1",version:"DICOM"},"(0008,0303)":{tag:"(0008,0303)",vr:"CS",name:"BlockIdentifyingInformationStatus",vm:"1",version:"DICOM"},"(0008,0304)":{tag:"(0008,0304)",vr:"US",name:"NonidentifyingPrivateElements",vm:"1-n",version:"DICOM"},"(0008,0305)":{tag:"(0008,0305)",vr:"SQ",name:"DeidentificationActionSequence",vm:"1",version:"DICOM"},"(0008,0306)":{tag:"(0008,0306)",vr:"US",name:"IdentifyingPrivateElements",vm:"1-n",version:"DICOM"},"(0008,0307)":{tag:"(0008,0307)",vr:"CS",name:"DeidentificationAction",vm:"1",version:"DICOM"},"(0008,0308)":{tag:"(0008,0308)",vr:"US",name:"PrivateDataElement",vm:"1",version:"DICOM"},"(0008,0309)":{tag:"(0008,0309)",vr:"UL",name:"PrivateDataElementValueMultiplicity",vm:"1-3",version:"DICOM"},"(0008,030A)":{tag:"(0008,030A)",vr:"CS",name:"PrivateDataElementValueRepresentation",vm:"1",version:"DICOM"},"(0008,030B)":{tag:"(0008,030B)",vr:"UL",name:"PrivateDataElementNumberOfItems",vm:"1-2",version:"DICOM"},"(0008,030C)":{tag:"(0008,030C)",vr:"UC",name:"PrivateDataElementName",vm:"1",version:"DICOM"},"(0008,030D)":{tag:"(0008,030D)",vr:"UC",name:"PrivateDataElementKeyword",vm:"1",version:"DICOM"},"(0008,030E)":{tag:"(0008,030E)",vr:"UT",name:"PrivateDataElementDescription",vm:"1",version:"DICOM"},"(0008,030F)":{tag:"(0008,030F)",vr:"UT",name:"PrivateDataElementEncoding",vm:"1",version:"DICOM"},"(0008,0310)":{tag:"(0008,0310)",vr:"SQ",name:"PrivateDataElementDefinitionSequence",vm:"1",version:"DICOM"},"(0008,1010)":{tag:"(0008,1010)",vr:"SH",name:"StationName",vm:"1",version:"DICOM"},"(0008,1030)":{tag:"(0008,1030)",vr:"LO",name:"StudyDescription",vm:"1",version:"DICOM"},"(0008,1032)":{tag:"(0008,1032)",vr:"SQ",name:"ProcedureCodeSequence",vm:"1",version:"DICOM"},"(0008,103E)":{tag:"(0008,103E)",vr:"LO",name:"SeriesDescription",vm:"1",version:"DICOM"},"(0008,103F)":{tag:"(0008,103F)",vr:"SQ",name:"SeriesDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0008,1040)":{tag:"(0008,1040)",vr:"LO",name:"InstitutionalDepartmentName",vm:"1",version:"DICOM"},"(0008,1041)":{tag:"(0008,1041)",vr:"SQ",name:"InstitutionalDepartmentTypeCodeSequence",vm:"1",version:"DICOM"},"(0008,1048)":{tag:"(0008,1048)",vr:"PN",name:"PhysiciansOfRecord",vm:"1-n",version:"DICOM"},"(0008,1049)":{tag:"(0008,1049)",vr:"SQ",name:"PhysiciansOfRecordIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1050)":{tag:"(0008,1050)",vr:"PN",name:"PerformingPhysicianName",vm:"1-n",version:"DICOM"},"(0008,1052)":{tag:"(0008,1052)",vr:"SQ",name:"PerformingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1060)":{tag:"(0008,1060)",vr:"PN",name:"NameOfPhysiciansReadingStudy",vm:"1-n",version:"DICOM"},"(0008,1062)":{tag:"(0008,1062)",vr:"SQ",name:"PhysiciansReadingStudyIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1070)":{tag:"(0008,1070)",vr:"PN",name:"OperatorsName",vm:"1-n",version:"DICOM"},"(0008,1072)":{tag:"(0008,1072)",vr:"SQ",name:"OperatorIdentificationSequence",vm:"1",version:"DICOM"},"(0008,1080)":{tag:"(0008,1080)",vr:"LO",name:"AdmittingDiagnosesDescription",vm:"1-n",version:"DICOM"},"(0008,1084)":{tag:"(0008,1084)",vr:"SQ",name:"AdmittingDiagnosesCodeSequence",vm:"1",version:"DICOM"},"(0008,1090)":{tag:"(0008,1090)",vr:"LO",name:"ManufacturerModelName",vm:"1",version:"DICOM"},"(0008,1110)":{tag:"(0008,1110)",vr:"SQ",name:"ReferencedStudySequence",vm:"1",version:"DICOM"},"(0008,1111)":{tag:"(0008,1111)",vr:"SQ",name:"ReferencedPerformedProcedureStepSequence",vm:"1",version:"DICOM"},"(0008,1115)":{tag:"(0008,1115)",vr:"SQ",name:"ReferencedSeriesSequence",vm:"1",version:"DICOM"},"(0008,1120)":{tag:"(0008,1120)",vr:"SQ",name:"ReferencedPatientSequence",vm:"1",version:"DICOM"},"(0008,1125)":{tag:"(0008,1125)",vr:"SQ",name:"ReferencedVisitSequence",vm:"1",version:"DICOM"},"(0008,1134)":{tag:"(0008,1134)",vr:"SQ",name:"ReferencedStereometricInstanceSequence",vm:"1",version:"DICOM"},"(0008,113A)":{tag:"(0008,113A)",vr:"SQ",name:"ReferencedWaveformSequence",vm:"1",version:"DICOM"},"(0008,1140)":{tag:"(0008,1140)",vr:"SQ",name:"ReferencedImageSequence",vm:"1",version:"DICOM"},"(0008,114A)":{tag:"(0008,114A)",vr:"SQ",name:"ReferencedInstanceSequence",vm:"1",version:"DICOM"},"(0008,114B)":{tag:"(0008,114B)",vr:"SQ",name:"ReferencedRealWorldValueMappingInstanceSequence",vm:"1",version:"DICOM"},"(0008,1150)":{tag:"(0008,1150)",vr:"UI",name:"ReferencedSOPClassUID",vm:"1",version:"DICOM"},"(0008,1155)":{tag:"(0008,1155)",vr:"UI",name:"ReferencedSOPInstanceUID",vm:"1",version:"DICOM"},"(0008,1156)":{tag:"(0008,1156)",vr:"SQ",name:"DefinitionSourceSequence",vm:"1",version:"DICOM"},"(0008,115A)":{tag:"(0008,115A)",vr:"UI",name:"SOPClassesSupported",vm:"1-n",version:"DICOM"},"(0008,1160)":{tag:"(0008,1160)",vr:"IS",name:"ReferencedFrameNumber",vm:"1-n",version:"DICOM"},"(0008,1161)":{tag:"(0008,1161)",vr:"UL",name:"SimpleFrameList",vm:"1-n",version:"DICOM"},"(0008,1162)":{tag:"(0008,1162)",vr:"UL",name:"CalculatedFrameList",vm:"3-3n",version:"DICOM"},"(0008,1163)":{tag:"(0008,1163)",vr:"FD",name:"TimeRange",vm:"2",version:"DICOM"},"(0008,1164)":{tag:"(0008,1164)",vr:"SQ",name:"FrameExtractionSequence",vm:"1",version:"DICOM"},"(0008,1167)":{tag:"(0008,1167)",vr:"UI",name:"MultiFrameSourceSOPInstanceUID",vm:"1",version:"DICOM"},"(0008,1190)":{tag:"(0008,1190)",vr:"UR",name:"RetrieveURL",vm:"1",version:"DICOM"},"(0008,1195)":{tag:"(0008,1195)",vr:"UI",name:"TransactionUID",vm:"1",version:"DICOM"},"(0008,1196)":{tag:"(0008,1196)",vr:"US",name:"WarningReason",vm:"1",version:"DICOM"},"(0008,1197)":{tag:"(0008,1197)",vr:"US",name:"FailureReason",vm:"1",version:"DICOM"},"(0008,1198)":{tag:"(0008,1198)",vr:"SQ",name:"FailedSOPSequence",vm:"1",version:"DICOM"},"(0008,1199)":{tag:"(0008,1199)",vr:"SQ",name:"ReferencedSOPSequence",vm:"1",version:"DICOM"},"(0008,119A)":{tag:"(0008,119A)",vr:"SQ",name:"OtherFailuresSequence",vm:"1",version:"DICOM"},"(0008,1200)":{tag:"(0008,1200)",vr:"SQ",name:"StudiesContainingOtherReferencedInstancesSequence",vm:"1",version:"DICOM"},"(0008,1250)":{tag:"(0008,1250)",vr:"SQ",name:"RelatedSeriesSequence",vm:"1",version:"DICOM"},"(0008,2111)":{tag:"(0008,2111)",vr:"ST",name:"DerivationDescription",vm:"1",version:"DICOM"},"(0008,2112)":{tag:"(0008,2112)",vr:"SQ",name:"SourceImageSequence",vm:"1",version:"DICOM"},"(0008,2120)":{tag:"(0008,2120)",vr:"SH",name:"StageName",vm:"1",version:"DICOM"},"(0008,2122)":{tag:"(0008,2122)",vr:"IS",name:"StageNumber",vm:"1",version:"DICOM"},"(0008,2124)":{tag:"(0008,2124)",vr:"IS",name:"NumberOfStages",vm:"1",version:"DICOM"},"(0008,2127)":{tag:"(0008,2127)",vr:"SH",name:"ViewName",vm:"1",version:"DICOM"},"(0008,2128)":{tag:"(0008,2128)",vr:"IS",name:"ViewNumber",vm:"1",version:"DICOM"},"(0008,2129)":{tag:"(0008,2129)",vr:"IS",name:"NumberOfEventTimers",vm:"1",version:"DICOM"},"(0008,212A)":{tag:"(0008,212A)",vr:"IS",name:"NumberOfViewsInStage",vm:"1",version:"DICOM"},"(0008,2130)":{tag:"(0008,2130)",vr:"DS",name:"EventElapsedTimes",vm:"1-n",version:"DICOM"},"(0008,2132)":{tag:"(0008,2132)",vr:"LO",name:"EventTimerNames",vm:"1-n",version:"DICOM"},"(0008,2133)":{tag:"(0008,2133)",vr:"SQ",name:"EventTimerSequence",vm:"1",version:"DICOM"},"(0008,2134)":{tag:"(0008,2134)",vr:"FD",name:"EventTimeOffset",vm:"1",version:"DICOM"},"(0008,2135)":{tag:"(0008,2135)",vr:"SQ",name:"EventCodeSequence",vm:"1",version:"DICOM"},"(0008,2142)":{tag:"(0008,2142)",vr:"IS",name:"StartTrim",vm:"1",version:"DICOM"},"(0008,2143)":{tag:"(0008,2143)",vr:"IS",name:"StopTrim",vm:"1",version:"DICOM"},"(0008,2144)":{tag:"(0008,2144)",vr:"IS",name:"RecommendedDisplayFrameRate",vm:"1",version:"DICOM"},"(0008,2218)":{tag:"(0008,2218)",vr:"SQ",name:"AnatomicRegionSequence",vm:"1",version:"DICOM"},"(0008,2220)":{tag:"(0008,2220)",vr:"SQ",name:"AnatomicRegionModifierSequence",vm:"1",version:"DICOM"},"(0008,2228)":{tag:"(0008,2228)",vr:"SQ",name:"PrimaryAnatomicStructureSequence",vm:"1",version:"DICOM"},"(0008,2229)":{tag:"(0008,2229)",vr:"SQ",name:"AnatomicStructureSpaceOrRegionSequence",vm:"1",version:"DICOM"},"(0008,2230)":{tag:"(0008,2230)",vr:"SQ",name:"PrimaryAnatomicStructureModifierSequence",vm:"1",version:"DICOM"},"(0008,3001)":{tag:"(0008,3001)",vr:"SQ",name:"AlternateRepresentationSequence",vm:"1",version:"DICOM"},"(0008,3002)":{tag:"(0008,3002)",vr:"UI",name:"AvailableTransferSyntaxUID",vm:"1-n",version:"DICOM"},"(0008,3010)":{tag:"(0008,3010)",vr:"UI",name:"IrradiationEventUID",vm:"1-n",version:"DICOM"},"(0008,3011)":{tag:"(0008,3011)",vr:"SQ",name:"SourceIrradiationEventSequence",vm:"1",version:"DICOM"},"(0008,3012)":{tag:"(0008,3012)",vr:"UI",name:"RadiopharmaceuticalAdministrationEventUID",vm:"1",version:"DICOM"},"(0008,9007)":{tag:"(0008,9007)",vr:"CS",name:"FrameType",vm:"4",version:"DICOM"},"(0008,9092)":{tag:"(0008,9092)",vr:"SQ",name:"ReferencedImageEvidenceSequence",vm:"1",version:"DICOM"},"(0008,9121)":{tag:"(0008,9121)",vr:"SQ",name:"ReferencedRawDataSequence",vm:"1",version:"DICOM"},"(0008,9123)":{tag:"(0008,9123)",vr:"UI",name:"CreatorVersionUID",vm:"1",version:"DICOM"},"(0008,9124)":{tag:"(0008,9124)",vr:"SQ",name:"DerivationImageSequence",vm:"1",version:"DICOM"},"(0008,9154)":{tag:"(0008,9154)",vr:"SQ",name:"SourceImageEvidenceSequence",vm:"1",version:"DICOM"},"(0008,9205)":{tag:"(0008,9205)",vr:"CS",name:"PixelPresentation",vm:"1",version:"DICOM"},"(0008,9206)":{tag:"(0008,9206)",vr:"CS",name:"VolumetricProperties",vm:"1",version:"DICOM"},"(0008,9207)":{tag:"(0008,9207)",vr:"CS",name:"VolumeBasedCalculationTechnique",vm:"1",version:"DICOM"},"(0008,9208)":{tag:"(0008,9208)",vr:"CS",name:"ComplexImageComponent",vm:"1",version:"DICOM"},"(0008,9209)":{tag:"(0008,9209)",vr:"CS",name:"AcquisitionContrast",vm:"1",version:"DICOM"},"(0008,9215)":{tag:"(0008,9215)",vr:"SQ",name:"DerivationCodeSequence",vm:"1",version:"DICOM"},"(0008,9237)":{tag:"(0008,9237)",vr:"SQ",name:"ReferencedPresentationStateSequence",vm:"1",version:"DICOM"},"(0008,9410)":{tag:"(0008,9410)",vr:"SQ",name:"ReferencedOtherPlaneSequence",vm:"1",version:"DICOM"},"(0008,9458)":{tag:"(0008,9458)",vr:"SQ",name:"FrameDisplaySequence",vm:"1",version:"DICOM"},"(0008,9459)":{tag:"(0008,9459)",vr:"FL",name:"RecommendedDisplayFrameRateInFloat",vm:"1",version:"DICOM"},"(0008,9460)":{tag:"(0008,9460)",vr:"CS",name:"SkipFrameRangeFlag",vm:"1",version:"DICOM"},"(0010,0010)":{tag:"(0010,0010)",vr:"PN",name:"PatientName",vm:"1",version:"DICOM"},"(0010,0020)":{tag:"(0010,0020)",vr:"LO",name:"PatientID",vm:"1",version:"DICOM"},"(0010,0021)":{tag:"(0010,0021)",vr:"LO",name:"IssuerOfPatientID",vm:"1",version:"DICOM"},"(0010,0022)":{tag:"(0010,0022)",vr:"CS",name:"TypeOfPatientID",vm:"1",version:"DICOM"},"(0010,0024)":{tag:"(0010,0024)",vr:"SQ",name:"IssuerOfPatientIDQualifiersSequence",vm:"1",version:"DICOM"},"(0010,0026)":{tag:"(0010,0026)",vr:"SQ",name:"SourcePatientGroupIdentificationSequence",vm:"1",version:"DICOM"},"(0010,0027)":{tag:"(0010,0027)",vr:"SQ",name:"GroupOfPatientsIdentificationSequence",vm:"1",version:"DICOM"},"(0010,0028)":{tag:"(0010,0028)",vr:"US",name:"SubjectRelativePositionInImage",vm:"3",version:"DICOM"},"(0010,0030)":{tag:"(0010,0030)",vr:"DA",name:"PatientBirthDate",vm:"1",version:"DICOM"},"(0010,0032)":{tag:"(0010,0032)",vr:"TM",name:"PatientBirthTime",vm:"1",version:"DICOM"},"(0010,0033)":{tag:"(0010,0033)",vr:"LO",name:"PatientBirthDateInAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0034)":{tag:"(0010,0034)",vr:"LO",name:"PatientDeathDateInAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0035)":{tag:"(0010,0035)",vr:"CS",name:"PatientAlternativeCalendar",vm:"1",version:"DICOM"},"(0010,0040)":{tag:"(0010,0040)",vr:"CS",name:"PatientSex",vm:"1",version:"DICOM"},"(0010,0050)":{tag:"(0010,0050)",vr:"SQ",name:"PatientInsurancePlanCodeSequence",vm:"1",version:"DICOM"},"(0010,0101)":{tag:"(0010,0101)",vr:"SQ",name:"PatientPrimaryLanguageCodeSequence",vm:"1",version:"DICOM"},"(0010,0102)":{tag:"(0010,0102)",vr:"SQ",name:"PatientPrimaryLanguageModifierCodeSequence",vm:"1",version:"DICOM"},"(0010,0200)":{tag:"(0010,0200)",vr:"CS",name:"QualityControlSubject",vm:"1",version:"DICOM"},"(0010,0201)":{tag:"(0010,0201)",vr:"SQ",name:"QualityControlSubjectTypeCodeSequence",vm:"1",version:"DICOM"},"(0010,0212)":{tag:"(0010,0212)",vr:"UC",name:"StrainDescription",vm:"1",version:"DICOM"},"(0010,0213)":{tag:"(0010,0213)",vr:"LO",name:"StrainNomenclature",vm:"1",version:"DICOM"},"(0010,0214)":{tag:"(0010,0214)",vr:"LO",name:"StrainStockNumber",vm:"1",version:"DICOM"},"(0010,0215)":{tag:"(0010,0215)",vr:"SQ",name:"StrainSourceRegistryCodeSequence",vm:"1",version:"DICOM"},"(0010,0216)":{tag:"(0010,0216)",vr:"SQ",name:"StrainStockSequence",vm:"1",version:"DICOM"},"(0010,0217)":{tag:"(0010,0217)",vr:"LO",name:"StrainSource",vm:"1",version:"DICOM"},"(0010,0218)":{tag:"(0010,0218)",vr:"UT",name:"StrainAdditionalInformation",vm:"1",version:"DICOM"},"(0010,0219)":{tag:"(0010,0219)",vr:"SQ",name:"StrainCodeSequence",vm:"1",version:"DICOM"},"(0010,0221)":{tag:"(0010,0221)",vr:"SQ",name:"GeneticModificationsSequence",vm:"1",version:"DICOM"},"(0010,0222)":{tag:"(0010,0222)",vr:"UC",name:"GeneticModificationsDescription",vm:"1",version:"DICOM"},"(0010,0223)":{tag:"(0010,0223)",vr:"LO",name:"GeneticModificationsNomenclature",vm:"1",version:"DICOM"},"(0010,0229)":{tag:"(0010,0229)",vr:"SQ",name:"GeneticModificationsCodeSequence",vm:"1",version:"DICOM"},"(0010,1000)":{tag:"(0010,1000)",vr:"LO",name:"OtherPatientIDs",vm:"1-n",version:"DICOM"},"(0010,1001)":{tag:"(0010,1001)",vr:"PN",name:"OtherPatientNames",vm:"1-n",version:"DICOM"},"(0010,1002)":{tag:"(0010,1002)",vr:"SQ",name:"OtherPatientIDsSequence",vm:"1",version:"DICOM"},"(0010,1005)":{tag:"(0010,1005)",vr:"PN",name:"PatientBirthName",vm:"1",version:"DICOM"},"(0010,1010)":{tag:"(0010,1010)",vr:"AS",name:"PatientAge",vm:"1",version:"DICOM"},"(0010,1020)":{tag:"(0010,1020)",vr:"DS",name:"PatientSize",vm:"1",version:"DICOM"},"(0010,1021)":{tag:"(0010,1021)",vr:"SQ",name:"PatientSizeCodeSequence",vm:"1",version:"DICOM"},"(0010,1022)":{tag:"(0010,1022)",vr:"DS",name:"PatientBodyMassIndex",vm:"1",version:"DICOM"},"(0010,1023)":{tag:"(0010,1023)",vr:"DS",name:"MeasuredAPDimension",vm:"1",version:"DICOM"},"(0010,1024)":{tag:"(0010,1024)",vr:"DS",name:"MeasuredLateralDimension",vm:"1",version:"DICOM"},"(0010,1030)":{tag:"(0010,1030)",vr:"DS",name:"PatientWeight",vm:"1",version:"DICOM"},"(0010,1040)":{tag:"(0010,1040)",vr:"LO",name:"PatientAddress",vm:"1",version:"DICOM"},"(0010,1060)":{tag:"(0010,1060)",vr:"PN",name:"PatientMotherBirthName",vm:"1",version:"DICOM"},"(0010,1080)":{tag:"(0010,1080)",vr:"LO",name:"MilitaryRank",vm:"1",version:"DICOM"},"(0010,1081)":{tag:"(0010,1081)",vr:"LO",name:"BranchOfService",vm:"1",version:"DICOM"},"(0010,1090)":{tag:"(0010,1090)",vr:"LO",name:"MedicalRecordLocator",vm:"1",version:"DICOM"},"(0010,1100)":{tag:"(0010,1100)",vr:"SQ",name:"ReferencedPatientPhotoSequence",vm:"1",version:"DICOM"},"(0010,2000)":{tag:"(0010,2000)",vr:"LO",name:"MedicalAlerts",vm:"1-n",version:"DICOM"},"(0010,2110)":{tag:"(0010,2110)",vr:"LO",name:"Allergies",vm:"1-n",version:"DICOM"},"(0010,2150)":{tag:"(0010,2150)",vr:"LO",name:"CountryOfResidence",vm:"1",version:"DICOM"},"(0010,2152)":{tag:"(0010,2152)",vr:"LO",name:"RegionOfResidence",vm:"1",version:"DICOM"},"(0010,2154)":{tag:"(0010,2154)",vr:"SH",name:"PatientTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0010,2155)":{tag:"(0010,2155)",vr:"LT",name:"PatientTelecomInformation",vm:"1",version:"DICOM"},"(0010,2160)":{tag:"(0010,2160)",vr:"SH",name:"EthnicGroup",vm:"1",version:"DICOM"},"(0010,2180)":{tag:"(0010,2180)",vr:"SH",name:"Occupation",vm:"1",version:"DICOM"},"(0010,21A0)":{tag:"(0010,21A0)",vr:"CS",name:"SmokingStatus",vm:"1",version:"DICOM"},"(0010,21B0)":{tag:"(0010,21B0)",vr:"LT",name:"AdditionalPatientHistory",vm:"1",version:"DICOM"},"(0010,21C0)":{tag:"(0010,21C0)",vr:"US",name:"PregnancyStatus",vm:"1",version:"DICOM"},"(0010,21D0)":{tag:"(0010,21D0)",vr:"DA",name:"LastMenstrualDate",vm:"1",version:"DICOM"},"(0010,21F0)":{tag:"(0010,21F0)",vr:"LO",name:"PatientReligiousPreference",vm:"1",version:"DICOM"},"(0010,2201)":{tag:"(0010,2201)",vr:"LO",name:"PatientSpeciesDescription",vm:"1",version:"DICOM"},"(0010,2202)":{tag:"(0010,2202)",vr:"SQ",name:"PatientSpeciesCodeSequence",vm:"1",version:"DICOM"},"(0010,2203)":{tag:"(0010,2203)",vr:"CS",name:"PatientSexNeutered",vm:"1",version:"DICOM"},"(0010,2210)":{tag:"(0010,2210)",vr:"CS",name:"AnatomicalOrientationType",vm:"1",version:"DICOM"},"(0010,2292)":{tag:"(0010,2292)",vr:"LO",name:"PatientBreedDescription",vm:"1",version:"DICOM"},"(0010,2293)":{tag:"(0010,2293)",vr:"SQ",name:"PatientBreedCodeSequence",vm:"1",version:"DICOM"},"(0010,2294)":{tag:"(0010,2294)",vr:"SQ",name:"BreedRegistrationSequence",vm:"1",version:"DICOM"},"(0010,2295)":{tag:"(0010,2295)",vr:"LO",name:"BreedRegistrationNumber",vm:"1",version:"DICOM"},"(0010,2296)":{tag:"(0010,2296)",vr:"SQ",name:"BreedRegistryCodeSequence",vm:"1",version:"DICOM"},"(0010,2297)":{tag:"(0010,2297)",vr:"PN",name:"ResponsiblePerson",vm:"1",version:"DICOM"},"(0010,2298)":{tag:"(0010,2298)",vr:"CS",name:"ResponsiblePersonRole",vm:"1",version:"DICOM"},"(0010,2299)":{tag:"(0010,2299)",vr:"LO",name:"ResponsibleOrganization",vm:"1",version:"DICOM"},"(0010,4000)":{tag:"(0010,4000)",vr:"LT",name:"PatientComments",vm:"1",version:"DICOM"},"(0010,9431)":{tag:"(0010,9431)",vr:"FL",name:"ExaminedBodyThickness",vm:"1",version:"DICOM"},"(0012,0010)":{tag:"(0012,0010)",vr:"LO",name:"ClinicalTrialSponsorName",vm:"1",version:"DICOM"},"(0012,0020)":{tag:"(0012,0020)",vr:"LO",name:"ClinicalTrialProtocolID",vm:"1",version:"DICOM"},"(0012,0021)":{tag:"(0012,0021)",vr:"LO",name:"ClinicalTrialProtocolName",vm:"1",version:"DICOM"},"(0012,0030)":{tag:"(0012,0030)",vr:"LO",name:"ClinicalTrialSiteID",vm:"1",version:"DICOM"},"(0012,0031)":{tag:"(0012,0031)",vr:"LO",name:"ClinicalTrialSiteName",vm:"1",version:"DICOM"},"(0012,0040)":{tag:"(0012,0040)",vr:"LO",name:"ClinicalTrialSubjectID",vm:"1",version:"DICOM"},"(0012,0042)":{tag:"(0012,0042)",vr:"LO",name:"ClinicalTrialSubjectReadingID",vm:"1",version:"DICOM"},"(0012,0050)":{tag:"(0012,0050)",vr:"LO",name:"ClinicalTrialTimePointID",vm:"1",version:"DICOM"},"(0012,0051)":{tag:"(0012,0051)",vr:"ST",name:"ClinicalTrialTimePointDescription",vm:"1",version:"DICOM"},"(0012,0052)":{tag:"(0012,0052)",vr:"FD",name:"LongitudinalTemporalOffsetFromEvent",vm:"1",version:"DICOM"},"(0012,0053)":{tag:"(0012,0053)",vr:"CS",name:"LongitudinalTemporalEventType",vm:"1",version:"DICOM"},"(0012,0060)":{tag:"(0012,0060)",vr:"LO",name:"ClinicalTrialCoordinatingCenterName",vm:"1",version:"DICOM"},"(0012,0062)":{tag:"(0012,0062)",vr:"CS",name:"PatientIdentityRemoved",vm:"1",version:"DICOM"},"(0012,0063)":{tag:"(0012,0063)",vr:"LO",name:"DeidentificationMethod",vm:"1-n",version:"DICOM"},"(0012,0064)":{tag:"(0012,0064)",vr:"SQ",name:"DeidentificationMethodCodeSequence",vm:"1",version:"DICOM"},"(0012,0071)":{tag:"(0012,0071)",vr:"LO",name:"ClinicalTrialSeriesID",vm:"1",version:"DICOM"},"(0012,0072)":{tag:"(0012,0072)",vr:"LO",name:"ClinicalTrialSeriesDescription",vm:"1",version:"DICOM"},"(0012,0081)":{tag:"(0012,0081)",vr:"LO",name:"ClinicalTrialProtocolEthicsCommitteeName",vm:"1",version:"DICOM"},"(0012,0082)":{tag:"(0012,0082)",vr:"LO",name:"ClinicalTrialProtocolEthicsCommitteeApprovalNumber",vm:"1",version:"DICOM"},"(0012,0083)":{tag:"(0012,0083)",vr:"SQ",name:"ConsentForClinicalTrialUseSequence",vm:"1",version:"DICOM"},"(0012,0084)":{tag:"(0012,0084)",vr:"CS",name:"DistributionType",vm:"1",version:"DICOM"},"(0012,0085)":{tag:"(0012,0085)",vr:"CS",name:"ConsentForDistributionFlag",vm:"1",version:"DICOM"},"(0014,0025)":{tag:"(0014,0025)",vr:"ST",name:"ComponentManufacturingProcedure",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0028)":{tag:"(0014,0028)",vr:"ST",name:"ComponentManufacturer",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0030)":{tag:"(0014,0030)",vr:"DS",name:"MaterialThickness",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0032)":{tag:"(0014,0032)",vr:"DS",name:"MaterialPipeDiameter",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0034)":{tag:"(0014,0034)",vr:"DS",name:"MaterialIsolationDiameter",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0042)":{tag:"(0014,0042)",vr:"ST",name:"MaterialGrade",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0044)":{tag:"(0014,0044)",vr:"ST",name:"MaterialPropertiesDescription",vm:"1-n",version:"DICOM/DICONDE"},"(0014,0046)":{tag:"(0014,0046)",vr:"LT",name:"MaterialNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,0050)":{tag:"(0014,0050)",vr:"CS",name:"ComponentShape",vm:"1",version:"DICOM/DICONDE"},"(0014,0052)":{tag:"(0014,0052)",vr:"CS",name:"CurvatureType",vm:"1",version:"DICOM/DICONDE"},"(0014,0054)":{tag:"(0014,0054)",vr:"DS",name:"OuterDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,0056)":{tag:"(0014,0056)",vr:"DS",name:"InnerDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,1010)":{tag:"(0014,1010)",vr:"ST",name:"ActualEnvironmentalConditions",vm:"1",version:"DICOM/DICONDE"},"(0014,1020)":{tag:"(0014,1020)",vr:"DA",name:"ExpiryDate",vm:"1",version:"DICOM/DICONDE"},"(0014,1040)":{tag:"(0014,1040)",vr:"ST",name:"EnvironmentalConditions",vm:"1",version:"DICOM/DICONDE"},"(0014,2002)":{tag:"(0014,2002)",vr:"SQ",name:"EvaluatorSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2004)":{tag:"(0014,2004)",vr:"IS",name:"EvaluatorNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,2006)":{tag:"(0014,2006)",vr:"PN",name:"EvaluatorName",vm:"1",version:"DICOM/DICONDE"},"(0014,2008)":{tag:"(0014,2008)",vr:"IS",name:"EvaluationAttempt",vm:"1",version:"DICOM/DICONDE"},"(0014,2012)":{tag:"(0014,2012)",vr:"SQ",name:"IndicationSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2014)":{tag:"(0014,2014)",vr:"IS",name:"IndicationNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,2016)":{tag:"(0014,2016)",vr:"SH",name:"IndicationLabel",vm:"1",version:"DICOM/DICONDE"},"(0014,2018)":{tag:"(0014,2018)",vr:"ST",name:"IndicationDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,201A)":{tag:"(0014,201A)",vr:"CS",name:"IndicationType",vm:"1-n",version:"DICOM/DICONDE"},"(0014,201C)":{tag:"(0014,201C)",vr:"CS",name:"IndicationDisposition",vm:"1",version:"DICOM/DICONDE"},"(0014,201E)":{tag:"(0014,201E)",vr:"SQ",name:"IndicationROISequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2030)":{tag:"(0014,2030)",vr:"SQ",name:"IndicationPhysicalPropertySequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2032)":{tag:"(0014,2032)",vr:"SH",name:"PropertyLabel",vm:"1",version:"DICOM/DICONDE"},"(0014,2202)":{tag:"(0014,2202)",vr:"IS",name:"CoordinateSystemNumberOfAxes",vm:"1",version:"DICOM/DICONDE"},"(0014,2204)":{tag:"(0014,2204)",vr:"SQ",name:"CoordinateSystemAxesSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2206)":{tag:"(0014,2206)",vr:"ST",name:"CoordinateSystemAxisDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,2208)":{tag:"(0014,2208)",vr:"CS",name:"CoordinateSystemDataSetMapping",vm:"1",version:"DICOM/DICONDE"},"(0014,220A)":{tag:"(0014,220A)",vr:"IS",name:"CoordinateSystemAxisNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,220C)":{tag:"(0014,220C)",vr:"CS",name:"CoordinateSystemAxisType",vm:"1",version:"DICOM/DICONDE"},"(0014,220E)":{tag:"(0014,220E)",vr:"CS",name:"CoordinateSystemAxisUnits",vm:"1",version:"DICOM/DICONDE"},"(0014,2210)":{tag:"(0014,2210)",vr:"OB",name:"CoordinateSystemAxisValues",vm:"1",version:"DICOM/DICONDE"},"(0014,2220)":{tag:"(0014,2220)",vr:"SQ",name:"CoordinateSystemTransformSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,2222)":{tag:"(0014,2222)",vr:"ST",name:"TransformDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,2224)":{tag:"(0014,2224)",vr:"IS",name:"TransformNumberOfAxes",vm:"1",version:"DICOM/DICONDE"},"(0014,2226)":{tag:"(0014,2226)",vr:"IS",name:"TransformOrderOfAxes",vm:"1-n",version:"DICOM/DICONDE"},"(0014,2228)":{tag:"(0014,2228)",vr:"CS",name:"TransformedAxisUnits",vm:"1",version:"DICOM/DICONDE"},"(0014,222A)":{tag:"(0014,222A)",vr:"DS",name:"CoordinateSystemTransformRotationAndScaleMatrix",vm:"1-n",version:"DICOM/DICONDE"},"(0014,222C)":{tag:"(0014,222C)",vr:"DS",name:"CoordinateSystemTransformTranslationMatrix",vm:"1-n",version:"DICOM/DICONDE"},"(0014,3011)":{tag:"(0014,3011)",vr:"DS",name:"InternalDetectorFrameTime",vm:"1",version:"DICOM/DICONDE"},"(0014,3012)":{tag:"(0014,3012)",vr:"DS",name:"NumberOfFramesIntegrated",vm:"1",version:"DICOM/DICONDE"},"(0014,3020)":{tag:"(0014,3020)",vr:"SQ",name:"DetectorTemperatureSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3022)":{tag:"(0014,3022)",vr:"ST",name:"SensorName",vm:"1",version:"DICOM/DICONDE"},"(0014,3024)":{tag:"(0014,3024)",vr:"DS",name:"HorizontalOffsetOfSensor",vm:"1",version:"DICOM/DICONDE"},"(0014,3026)":{tag:"(0014,3026)",vr:"DS",name:"VerticalOffsetOfSensor",vm:"1",version:"DICOM/DICONDE"},"(0014,3028)":{tag:"(0014,3028)",vr:"DS",name:"SensorTemperature",vm:"1",version:"DICOM/DICONDE"},"(0014,3040)":{tag:"(0014,3040)",vr:"SQ",name:"DarkCurrentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3050)":{tag:"(0014,3050)",vr:"ox",name:"DarkCurrentCounts",vm:"1",version:"DICOM/DICONDE"},"(0014,3060)":{tag:"(0014,3060)",vr:"SQ",name:"GainCorrectionReferenceSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,3070)":{tag:"(0014,3070)",vr:"ox",name:"AirCounts",vm:"1",version:"DICOM/DICONDE"},"(0014,3071)":{tag:"(0014,3071)",vr:"DS",name:"KVUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3072)":{tag:"(0014,3072)",vr:"DS",name:"MAUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3073)":{tag:"(0014,3073)",vr:"DS",name:"NumberOfFramesUsedForIntegration",vm:"1",version:"DICOM/DICONDE"},"(0014,3074)":{tag:"(0014,3074)",vr:"LO",name:"FilterMaterialUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3075)":{tag:"(0014,3075)",vr:"DS",name:"FilterThicknessUsedInGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3076)":{tag:"(0014,3076)",vr:"DA",name:"DateOfGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3077)":{tag:"(0014,3077)",vr:"TM",name:"TimeOfGainCalibration",vm:"1",version:"DICOM/DICONDE"},"(0014,3080)":{tag:"(0014,3080)",vr:"OB",name:"BadPixelImage",vm:"1",version:"DICOM/DICONDE"},"(0014,3099)":{tag:"(0014,3099)",vr:"LT",name:"CalibrationNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4002)":{tag:"(0014,4002)",vr:"SQ",name:"PulserEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4004)":{tag:"(0014,4004)",vr:"CS",name:"PulserType",vm:"1",version:"DICOM/DICONDE"},"(0014,4006)":{tag:"(0014,4006)",vr:"LT",name:"PulserNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4008)":{tag:"(0014,4008)",vr:"SQ",name:"ReceiverEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,400A)":{tag:"(0014,400A)",vr:"CS",name:"AmplifierType",vm:"1",version:"DICOM/DICONDE"},"(0014,400C)":{tag:"(0014,400C)",vr:"LT",name:"ReceiverNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,400E)":{tag:"(0014,400E)",vr:"SQ",name:"PreAmplifierEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,400F)":{tag:"(0014,400F)",vr:"LT",name:"PreAmplifierNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4010)":{tag:"(0014,4010)",vr:"SQ",name:"TransmitTransducerSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4011)":{tag:"(0014,4011)",vr:"SQ",name:"ReceiveTransducerSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4012)":{tag:"(0014,4012)",vr:"US",name:"NumberOfElements",vm:"1",version:"DICOM/DICONDE"},"(0014,4013)":{tag:"(0014,4013)",vr:"CS",name:"ElementShape",vm:"1",version:"DICOM/DICONDE"},"(0014,4014)":{tag:"(0014,4014)",vr:"DS",name:"ElementDimensionA",vm:"1",version:"DICOM/DICONDE"},"(0014,4015)":{tag:"(0014,4015)",vr:"DS",name:"ElementDimensionB",vm:"1",version:"DICOM/DICONDE"},"(0014,4016)":{tag:"(0014,4016)",vr:"DS",name:"ElementPitchA",vm:"1",version:"DICOM/DICONDE"},"(0014,4017)":{tag:"(0014,4017)",vr:"DS",name:"MeasuredBeamDimensionA",vm:"1",version:"DICOM/DICONDE"},"(0014,4018)":{tag:"(0014,4018)",vr:"DS",name:"MeasuredBeamDimensionB",vm:"1",version:"DICOM/DICONDE"},"(0014,4019)":{tag:"(0014,4019)",vr:"DS",name:"LocationOfMeasuredBeamDiameter",vm:"1",version:"DICOM/DICONDE"},"(0014,401A)":{tag:"(0014,401A)",vr:"DS",name:"NominalFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,401B)":{tag:"(0014,401B)",vr:"DS",name:"MeasuredCenterFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,401C)":{tag:"(0014,401C)",vr:"DS",name:"MeasuredBandwidth",vm:"1",version:"DICOM/DICONDE"},"(0014,401D)":{tag:"(0014,401D)",vr:"DS",name:"ElementPitchB",vm:"1",version:"DICOM/DICONDE"},"(0014,4020)":{tag:"(0014,4020)",vr:"SQ",name:"PulserSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4022)":{tag:"(0014,4022)",vr:"DS",name:"PulseWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,4024)":{tag:"(0014,4024)",vr:"DS",name:"ExcitationFrequency",vm:"1",version:"DICOM/DICONDE"},"(0014,4026)":{tag:"(0014,4026)",vr:"CS",name:"ModulationType",vm:"1",version:"DICOM/DICONDE"},"(0014,4028)":{tag:"(0014,4028)",vr:"DS",name:"Damping",vm:"1",version:"DICOM/DICONDE"},"(0014,4030)":{tag:"(0014,4030)",vr:"SQ",name:"ReceiverSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4031)":{tag:"(0014,4031)",vr:"DS",name:"AcquiredSoundpathLength",vm:"1",version:"DICOM/DICONDE"},"(0014,4032)":{tag:"(0014,4032)",vr:"CS",name:"AcquisitionCompressionType",vm:"1",version:"DICOM/DICONDE"},"(0014,4033)":{tag:"(0014,4033)",vr:"IS",name:"AcquisitionSampleSize",vm:"1",version:"DICOM/DICONDE"},"(0014,4034)":{tag:"(0014,4034)",vr:"DS",name:"RectifierSmoothing",vm:"1",version:"DICOM/DICONDE"},"(0014,4035)":{tag:"(0014,4035)",vr:"SQ",name:"DACSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4036)":{tag:"(0014,4036)",vr:"CS",name:"DACType",vm:"1",version:"DICOM/DICONDE"},"(0014,4038)":{tag:"(0014,4038)",vr:"DS",name:"DACGainPoints",vm:"1-n",version:"DICOM/DICONDE"},"(0014,403A)":{tag:"(0014,403A)",vr:"DS",name:"DACTimePoints",vm:"1-n",version:"DICOM/DICONDE"},"(0014,403C)":{tag:"(0014,403C)",vr:"DS",name:"DACAmplitude",vm:"1-n",version:"DICOM/DICONDE"},"(0014,4040)":{tag:"(0014,4040)",vr:"SQ",name:"PreAmplifierSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4050)":{tag:"(0014,4050)",vr:"SQ",name:"TransmitTransducerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4051)":{tag:"(0014,4051)",vr:"SQ",name:"ReceiveTransducerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4052)":{tag:"(0014,4052)",vr:"DS",name:"IncidentAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,4054)":{tag:"(0014,4054)",vr:"ST",name:"CouplingTechnique",vm:"1",version:"DICOM/DICONDE"},"(0014,4056)":{tag:"(0014,4056)",vr:"ST",name:"CouplingMedium",vm:"1",version:"DICOM/DICONDE"},"(0014,4057)":{tag:"(0014,4057)",vr:"DS",name:"CouplingVelocity",vm:"1",version:"DICOM/DICONDE"},"(0014,4058)":{tag:"(0014,4058)",vr:"DS",name:"ProbeCenterLocationX",vm:"1",version:"DICOM/DICONDE"},"(0014,4059)":{tag:"(0014,4059)",vr:"DS",name:"ProbeCenterLocationZ",vm:"1",version:"DICOM/DICONDE"},"(0014,405A)":{tag:"(0014,405A)",vr:"DS",name:"SoundPathLength",vm:"1",version:"DICOM/DICONDE"},"(0014,405C)":{tag:"(0014,405C)",vr:"ST",name:"DelayLawIdentifier",vm:"1",version:"DICOM/DICONDE"},"(0014,4060)":{tag:"(0014,4060)",vr:"SQ",name:"GateSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4062)":{tag:"(0014,4062)",vr:"DS",name:"GateThreshold",vm:"1",version:"DICOM/DICONDE"},"(0014,4064)":{tag:"(0014,4064)",vr:"DS",name:"VelocityOfSound",vm:"1",version:"DICOM/DICONDE"},"(0014,4070)":{tag:"(0014,4070)",vr:"SQ",name:"CalibrationSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4072)":{tag:"(0014,4072)",vr:"ST",name:"CalibrationProcedure",vm:"1",version:"DICOM/DICONDE"},"(0014,4074)":{tag:"(0014,4074)",vr:"SH",name:"ProcedureVersion",vm:"1",version:"DICOM/DICONDE"},"(0014,4076)":{tag:"(0014,4076)",vr:"DA",name:"ProcedureCreationDate",vm:"1",version:"DICOM/DICONDE"},"(0014,4078)":{tag:"(0014,4078)",vr:"DA",name:"ProcedureExpirationDate",vm:"1",version:"DICOM/DICONDE"},"(0014,407A)":{tag:"(0014,407A)",vr:"DA",name:"ProcedureLastModifiedDate",vm:"1",version:"DICOM/DICONDE"},"(0014,407C)":{tag:"(0014,407C)",vr:"TM",name:"CalibrationTime",vm:"1-n",version:"DICOM/DICONDE"},"(0014,407E)":{tag:"(0014,407E)",vr:"DA",name:"CalibrationDate",vm:"1-n",version:"DICOM/DICONDE"},"(0014,4080)":{tag:"(0014,4080)",vr:"SQ",name:"ProbeDriveEquipmentSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4081)":{tag:"(0014,4081)",vr:"CS",name:"DriveType",vm:"1",version:"DICOM/DICONDE"},"(0014,4082)":{tag:"(0014,4082)",vr:"LT",name:"ProbeDriveNotes",vm:"1",version:"DICOM/DICONDE"},"(0014,4083)":{tag:"(0014,4083)",vr:"SQ",name:"DriveProbeSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4084)":{tag:"(0014,4084)",vr:"DS",name:"ProbeInductance",vm:"1",version:"DICOM/DICONDE"},"(0014,4085)":{tag:"(0014,4085)",vr:"DS",name:"ProbeResistance",vm:"1",version:"DICOM/DICONDE"},"(0014,4086)":{tag:"(0014,4086)",vr:"SQ",name:"ReceiveProbeSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4087)":{tag:"(0014,4087)",vr:"SQ",name:"ProbeDriveSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4088)":{tag:"(0014,4088)",vr:"DS",name:"BridgeResistors",vm:"1",version:"DICOM/DICONDE"},"(0014,4089)":{tag:"(0014,4089)",vr:"DS",name:"ProbeOrientationAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,408B)":{tag:"(0014,408B)",vr:"DS",name:"UserSelectedGainY",vm:"1",version:"DICOM/DICONDE"},"(0014,408C)":{tag:"(0014,408C)",vr:"DS",name:"UserSelectedPhase",vm:"1",version:"DICOM/DICONDE"},"(0014,408D)":{tag:"(0014,408D)",vr:"DS",name:"UserSelectedOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,408E)":{tag:"(0014,408E)",vr:"DS",name:"UserSelectedOffsetY",vm:"1",version:"DICOM/DICONDE"},"(0014,4091)":{tag:"(0014,4091)",vr:"SQ",name:"ChannelSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,4092)":{tag:"(0014,4092)",vr:"DS",name:"ChannelThreshold",vm:"1",version:"DICOM/DICONDE"},"(0014,409A)":{tag:"(0014,409A)",vr:"SQ",name:"ScannerSettingsSequence",vm:"1",version:"DICOM/DICONDE"},"(0014,409B)":{tag:"(0014,409B)",vr:"ST",name:"ScanProcedure",vm:"1",version:"DICOM/DICONDE"},"(0014,409C)":{tag:"(0014,409C)",vr:"DS",name:"TranslationRateX",vm:"1",version:"DICOM/DICONDE"},"(0014,409D)":{tag:"(0014,409D)",vr:"DS",name:"TranslationRateY",vm:"1",version:"DICOM/DICONDE"},"(0014,409F)":{tag:"(0014,409F)",vr:"DS",name:"ChannelOverlap",vm:"1",version:"DICOM/DICONDE"},"(0014,40A0)":{tag:"(0014,40A0)",vr:"LO",name:"ImageQualityIndicatorType",vm:"1",version:"DICOM/DICONDE"},"(0014,40A1)":{tag:"(0014,40A1)",vr:"LO",name:"ImageQualityIndicatorMaterial",vm:"1",version:"DICOM/DICONDE"},"(0014,40A2)":{tag:"(0014,40A2)",vr:"LO",name:"ImageQualityIndicatorSize",vm:"1",version:"DICOM/DICONDE"},"(0014,5002)":{tag:"(0014,5002)",vr:"IS",name:"LINACEnergy",vm:"1",version:"DICOM/DICONDE"},"(0014,5004)":{tag:"(0014,5004)",vr:"IS",name:"LINACOutput",vm:"1",version:"DICOM/DICONDE"},"(0014,5100)":{tag:"(0014,5100)",vr:"US",name:"ActiveAperture",vm:"1",version:"DICOM/DICONDE"},"(0014,5101)":{tag:"(0014,5101)",vr:"DS",name:"TotalAperture",vm:"1",version:"DICOM/DICONDE"},"(0014,5102)":{tag:"(0014,5102)",vr:"DS",name:"ApertureElevation",vm:"1",version:"DICOM/DICONDE"},"(0014,5103)":{tag:"(0014,5103)",vr:"DS",name:"MainLobeAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5104)":{tag:"(0014,5104)",vr:"DS",name:"MainRoofAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5105)":{tag:"(0014,5105)",vr:"CS",name:"ConnectorType",vm:"1",version:"DICOM/DICONDE"},"(0014,5106)":{tag:"(0014,5106)",vr:"SH",name:"WedgeModelNumber",vm:"1",version:"DICOM/DICONDE"},"(0014,5107)":{tag:"(0014,5107)",vr:"DS",name:"WedgeAngleFloat",vm:"1",version:"DICOM/DICONDE"},"(0014,5108)":{tag:"(0014,5108)",vr:"DS",name:"WedgeRoofAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5109)":{tag:"(0014,5109)",vr:"CS",name:"WedgeElement1Position",vm:"1",version:"DICOM/DICONDE"},"(0014,510A)":{tag:"(0014,510A)",vr:"DS",name:"WedgeMaterialVelocity",vm:"1",version:"DICOM/DICONDE"},"(0014,510B)":{tag:"(0014,510B)",vr:"SH",name:"WedgeMaterial",vm:"1",version:"DICOM/DICONDE"},"(0014,510C)":{tag:"(0014,510C)",vr:"DS",name:"WedgeOffsetZ",vm:"1",version:"DICOM/DICONDE"},"(0014,510D)":{tag:"(0014,510D)",vr:"DS",name:"WedgeOriginOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,510E)":{tag:"(0014,510E)",vr:"DS",name:"WedgeTimeDelay",vm:"1",version:"DICOM/DICONDE"},"(0014,510F)":{tag:"(0014,510F)",vr:"SH",name:"WedgeName",vm:"1",version:"DICOM/DICONDE"},"(0014,5110)":{tag:"(0014,5110)",vr:"SH",name:"WedgeManufacturerName",vm:"1",version:"DICOM/DICONDE"},"(0014,5111)":{tag:"(0014,5111)",vr:"LO",name:"WedgeDescription",vm:"1",version:"DICOM/DICONDE"},"(0014,5112)":{tag:"(0014,5112)",vr:"DS",name:"NominalBeamAngle",vm:"1",version:"DICOM/DICONDE"},"(0014,5113)":{tag:"(0014,5113)",vr:"DS",name:"WedgeOffsetX",vm:"1",version:"DICOM/DICONDE"},"(0014,5114)":{tag:"(0014,5114)",vr:"DS",name:"WedgeOffsetY",vm:"1",version:"DICOM/DICONDE"},"(0014,5115)":{tag:"(0014,5115)",vr:"DS",name:"WedgeTotalLength",vm:"1",version:"DICOM/DICONDE"},"(0014,5116)":{tag:"(0014,5116)",vr:"DS",name:"WedgeInContactLength",vm:"1",version:"DICOM/DICONDE"},"(0014,5117)":{tag:"(0014,5117)",vr:"DS",name:"WedgeFrontGap",vm:"1",version:"DICOM/DICONDE"},"(0014,5118)":{tag:"(0014,5118)",vr:"DS",name:"WedgeTotalHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,5119)":{tag:"(0014,5119)",vr:"DS",name:"WedgeFrontHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511A)":{tag:"(0014,511A)",vr:"DS",name:"WedgeRearHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511B)":{tag:"(0014,511B)",vr:"DS",name:"WedgeTotalWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,511C)":{tag:"(0014,511C)",vr:"DS",name:"WedgeInContactWidth",vm:"1",version:"DICOM/DICONDE"},"(0014,511D)":{tag:"(0014,511D)",vr:"DS",name:"WedgeChamferHeight",vm:"1",version:"DICOM/DICONDE"},"(0014,511E)":{tag:"(0014,511E)",vr:"CS",name:"WedgeCurve",vm:"1",version:"DICOM/DICONDE"},"(0014,511F)":{tag:"(0014,511F)",vr:"DS",name:"RadiusAlongWedge",vm:"1",version:"DICOM/DICONDE"},"(0012,0086)":{tag:"(0012,0086)",vr:"DA",name:"EthicsCommitteeApprovalEffectivenessStartDate",vm:"1",version:"DICOM"},"(0012,0087)":{tag:"(0012,0087)",vr:"DA",name:"EthicsCommitteeApprovalEffectivenessEndDate",vm:"1",version:"DICOM"},"(0014,0100)":{tag:"(0014,0100)",vr:"LO",name:"ComponentWelderIDs",vm:"1-n",version:"DICOM"},"(0014,0101)":{tag:"(0014,0101)",vr:"CS",name:"SecondaryApprovalStatus",vm:"1",version:"DICOM"},"(0014,0102)":{tag:"(0014,0102)",vr:"DA",name:"SecondaryReviewDate",vm:"1",version:"DICOM"},"(0014,0103)":{tag:"(0014,0103)",vr:"TM",name:"SecondaryReviewTime",vm:"1",version:"DICOM"},"(0014,0104)":{tag:"(0014,0104)",vr:"PN",name:"SecondaryReviewerName",vm:"1",version:"DICOM"},"(0014,0105)":{tag:"(0014,0105)",vr:"ST",name:"RepairID",vm:"1",version:"DICOM"},"(0014,0106)":{tag:"(0014,0106)",vr:"SQ",name:"MultipleComponentApprovalSequence",vm:"1",version:"DICOM"},"(0014,0107)":{tag:"(0014,0107)",vr:"CS",name:"OtherApprovalStatus",vm:"1-n",version:"DICOM"},"(0014,0108)":{tag:"(0014,0108)",vr:"CS",name:"OtherSecondaryApprovalStatus",vm:"1-n",version:"DICOM"},"(0016,0001)":{tag:"(0016,0001)",vr:"DS",name:"WhitePoint",vm:"1",version:"DICOM"},"(0016,0002)":{tag:"(0016,0002)",vr:"DS",name:"PrimaryChromaticities",vm:"3",version:"DICOM"},"(0016,0003)":{tag:"(0016,0003)",vr:"UT",name:"BatteryLevel",vm:"1",version:"DICOM"},"(0016,0004)":{tag:"(0016,0004)",vr:"DS",name:"ExposureTimeInSeconds",vm:"1",version:"DICOM"},"(0016,0005)":{tag:"(0016,0005)",vr:"DS",name:"FNumber",vm:"1",version:"DICOM"},"(0016,0006)":{tag:"(0016,0006)",vr:"IS",name:"OECFRows",vm:"1",version:"DICOM"},"(0016,0007)":{tag:"(0016,0007)",vr:"IS",name:"OECFColumns",vm:"1",version:"DICOM"},"(0016,0008)":{tag:"(0016,0008)",vr:"UC",name:"OECFColumnNames",vm:"1-n",version:"DICOM"},"(0016,0009)":{tag:"(0016,0009)",vr:"DS",name:"OECFValues",vm:"1-n",version:"DICOM"},"(0016,000A)":{tag:"(0016,000A)",vr:"IS",name:"SpatialFrequencyResponseRows",vm:"1",version:"DICOM"},"(0016,000B)":{tag:"(0016,000B)",vr:"IS",name:"SpatialFrequencyResponseColumns",vm:"1",version:"DICOM"},"(0016,000C)":{tag:"(0016,000C)",vr:"UC",name:"SpatialFrequencyResponseColumnNames",vm:"1-n",version:"DICOM"},"(0016,000D)":{tag:"(0016,000D)",vr:"DS",name:"SpatialFrequencyResponseValues",vm:"1-n",version:"DICOM"},"(0016,000E)":{tag:"(0016,000E)",vr:"IS",name:"ColorFilterArrayPatternRows",vm:"1",version:"DICOM"},"(0016,000F)":{tag:"(0016,000F)",vr:"IS",name:"ColorFilterArrayPatternColumns",vm:"1",version:"DICOM"},"(0016,0010)":{tag:"(0016,0010)",vr:"DS",name:"ColorFilterArrayPatternValues",vm:"1-n",version:"DICOM"},"(0016,0011)":{tag:"(0016,0011)",vr:"US",name:"FlashFiringStatus",vm:"1",version:"DICOM"},"(0016,0012)":{tag:"(0016,0012)",vr:"US",name:"FlashReturnStatus",vm:"1",version:"DICOM"},"(0016,0013)":{tag:"(0016,0013)",vr:"US",name:"FlashMode",vm:"1",version:"DICOM"},"(0016,0014)":{tag:"(0016,0014)",vr:"US",name:"FlashFunctionPresent",vm:"1",version:"DICOM"},"(0016,0015)":{tag:"(0016,0015)",vr:"US",name:"FlashRedEyeMode",vm:"1",version:"DICOM"},"(0016,0016)":{tag:"(0016,0016)",vr:"US",name:"ExposureProgram",vm:"1",version:"DICOM"},"(0016,0017)":{tag:"(0016,0017)",vr:"UT",name:"SpectralSensitivity",vm:"1",version:"DICOM"},"(0016,0018)":{tag:"(0016,0018)",vr:"IS",name:"PhotographicSensitivity",vm:"1",version:"DICOM"},"(0016,0019)":{tag:"(0016,0019)",vr:"IS",name:"SelfTimerMode",vm:"1",version:"DICOM"},"(0016,001A)":{tag:"(0016,001A)",vr:"US",name:"SensitivityType",vm:"1",version:"DICOM"},"(0016,001B)":{tag:"(0016,001B)",vr:"IS",name:"StandardOutputSensitivity",vm:"1",version:"DICOM"},"(0016,001C)":{tag:"(0016,001C)",vr:"IS",name:"RecommendedExposureIndex",vm:"1",version:"DICOM"},"(0016,001D)":{tag:"(0016,001D)",vr:"IS",name:"ISOSpeed",vm:"1",version:"DICOM"},"(0016,001E)":{tag:"(0016,001E)",vr:"IS",name:"ISOSpeedLatitudeyyy",vm:"1",version:"DICOM"},"(0016,001F)":{tag:"(0016,001F)",vr:"IS",name:"ISOSpeedLatitudezzz",vm:"1",version:"DICOM"},"(0016,0020)":{tag:"(0016,0020)",vr:"UT",name:"EXIFVersion",vm:"1",version:"DICOM"},"(0016,0021)":{tag:"(0016,0021)",vr:"DS",name:"ShutterSpeedValue",vm:"1",version:"DICOM"},"(0016,0022)":{tag:"(0016,0022)",vr:"DS",name:"ApertureValue",vm:"1",version:"DICOM"},"(0016,0023)":{tag:"(0016,0023)",vr:"DS",name:"BrightnessValue",vm:"1",version:"DICOM"},"(0016,0024)":{tag:"(0016,0024)",vr:"DS",name:"ExposureBiasValue",vm:"1",version:"DICOM"},"(0016,0025)":{tag:"(0016,0025)",vr:"DS",name:"MaxApertureValue",vm:"1",version:"DICOM"},"(0016,0026)":{tag:"(0016,0026)",vr:"DS",name:"SubjectDistance",vm:"1",version:"DICOM"},"(0016,0027)":{tag:"(0016,0027)",vr:"US",name:"MeteringMode",vm:"1",version:"DICOM"},"(0016,0028)":{tag:"(0016,0028)",vr:"US",name:"LightSource",vm:"1",version:"DICOM"},"(0016,0029)":{tag:"(0016,0029)",vr:"DS",name:"FocalLength",vm:"1",version:"DICOM"},"(0016,002A)":{tag:"(0016,002A)",vr:"IS",name:"SubjectArea",vm:"2-4",version:"DICOM"},"(0016,002B)":{tag:"(0016,002B)",vr:"OB",name:"MakerNote",vm:"1",version:"DICOM"},"(0016,0030)":{tag:"(0016,0030)",vr:"DS",name:"Temperature",vm:"1",version:"DICOM"},"(0016,0031)":{tag:"(0016,0031)",vr:"DS",name:"Humidity",vm:"1",version:"DICOM"},"(0016,0032)":{tag:"(0016,0032)",vr:"DS",name:"Pressure",vm:"1",version:"DICOM"},"(0016,0033)":{tag:"(0016,0033)",vr:"DS",name:"WaterDepth",vm:"1",version:"DICOM"},"(0016,0034)":{tag:"(0016,0034)",vr:"DS",name:"Acceleration",vm:"1",version:"DICOM"},"(0016,0035)":{tag:"(0016,0035)",vr:"DS",name:"CameraElevationAngle",vm:"1",version:"DICOM"},"(0016,0036)":{tag:"(0016,0036)",vr:"DS",name:"FlashEnergy",vm:"1-2",version:"DICOM"},"(0016,0037)":{tag:"(0016,0037)",vr:"IS",name:"SubjectLocation",vm:"2",version:"DICOM"},"(0016,0038)":{tag:"(0016,0038)",vr:"DS",name:"PhotographicExposureIndex",vm:"1",version:"DICOM"},"(0016,0039)":{tag:"(0016,0039)",vr:"US",name:"SensingMethod",vm:"1",version:"DICOM"},"(0016,003A)":{tag:"(0016,003A)",vr:"US",name:"FileSource",vm:"1",version:"DICOM"},"(0016,003B)":{tag:"(0016,003B)",vr:"US",name:"SceneType",vm:"1",version:"DICOM"},"(0016,0041)":{tag:"(0016,0041)",vr:"US",name:"CustomRendered",vm:"1",version:"DICOM"},"(0016,0042)":{tag:"(0016,0042)",vr:"US",name:"ExposureMode",vm:"1",version:"DICOM"},"(0016,0043)":{tag:"(0016,0043)",vr:"US",name:"WhiteBalance",vm:"1",version:"DICOM"},"(0016,0044)":{tag:"(0016,0044)",vr:"DS",name:"DigitalZoomRatio",vm:"1",version:"DICOM"},"(0016,0045)":{tag:"(0016,0045)",vr:"IS",name:"FocalLengthIn35mmFilm",vm:"1",version:"DICOM"},"(0016,0046)":{tag:"(0016,0046)",vr:"US",name:"SceneCaptureType",vm:"1",version:"DICOM"},"(0016,0047)":{tag:"(0016,0047)",vr:"US",name:"GainControl",vm:"1",version:"DICOM"},"(0016,0048)":{tag:"(0016,0048)",vr:"US",name:"Contrast",vm:"1",version:"DICOM"},"(0016,0049)":{tag:"(0016,0049)",vr:"US",name:"Saturation",vm:"1",version:"DICOM"},"(0016,004A)":{tag:"(0016,004A)",vr:"US",name:"Sharpness",vm:"1",version:"DICOM"},"(0016,004B)":{tag:"(0016,004B)",vr:"OB",name:"DeviceSettingDescription",vm:"1",version:"DICOM"},"(0016,004C)":{tag:"(0016,004C)",vr:"US",name:"SubjectDistanceRange",vm:"1",version:"DICOM"},"(0016,004D)":{tag:"(0016,004D)",vr:"UT",name:"CameraOwnerName",vm:"1",version:"DICOM"},"(0016,004E)":{tag:"(0016,004E)",vr:"DS",name:"LensSpecification",vm:"4",version:"DICOM"},"(0016,004F)":{tag:"(0016,004F)",vr:"UT",name:"LensMake",vm:"1",version:"DICOM"},"(0016,0050)":{tag:"(0016,0050)",vr:"UT",name:"LensModel",vm:"1",version:"DICOM"},"(0016,0051)":{tag:"(0016,0051)",vr:"UT",name:"LensSerialNumber",vm:"1",version:"DICOM"},"(0016,0061)":{tag:"(0016,0061)",vr:"CS",name:"InteroperabilityIndex",vm:"1",version:"DICOM"},"(0016,0062)":{tag:"(0016,0062)",vr:"OB",name:"InteroperabilityVersion",vm:"1",version:"DICOM"},"(0016,0070)":{tag:"(0016,0070)",vr:"OB",name:"GPSVersionID",vm:"1",version:"DICOM"},"(0016,0071)":{tag:"(0016,0071)",vr:"CS",name:"GPSLatitudeRef",vm:"1",version:"DICOM"},"(0016,0072)":{tag:"(0016,0072)",vr:"DS",name:"GPSLatitude",vm:"3",version:"DICOM"},"(0016,0073)":{tag:"(0016,0073)",vr:"CS",name:"GPSLongitudeRef",vm:"1",version:"DICOM"},"(0016,0074)":{tag:"(0016,0074)",vr:"DS",name:"GPSLongitude",vm:"3",version:"DICOM"},"(0016,0075)":{tag:"(0016,0075)",vr:"US",name:"GPSAltitudeRef",vm:"1",version:"DICOM"},"(0016,0076)":{tag:"(0016,0076)",vr:"DS",name:"GPSAltitude",vm:"1",version:"DICOM"},"(0016,0077)":{tag:"(0016,0077)",vr:"DT",name:"GPSTimeStamp",vm:"1",version:"DICOM"},"(0016,0078)":{tag:"(0016,0078)",vr:"UT",name:"GPSSatellites",vm:"1",version:"DICOM"},"(0016,0079)":{tag:"(0016,0079)",vr:"CS",name:"GPSStatus",vm:"1",version:"DICOM"},"(0016,007A)":{tag:"(0016,007A)",vr:"CS",name:"GPSMeasureMode",vm:"1",version:"DICOM"},"(0016,007B)":{tag:"(0016,007B)",vr:"DS",name:"GPSDOP",vm:"1",version:"DICOM"},"(0016,007C)":{tag:"(0016,007C)",vr:"CS",name:"GPSSpeedRef",vm:"1",version:"DICOM"},"(0016,007D)":{tag:"(0016,007D)",vr:"DS",name:"GPSSpeed",vm:"1",version:"DICOM"},"(0016,007E)":{tag:"(0016,007E)",vr:"CS",name:"GPSTrackRef",vm:"1",version:"DICOM"},"(0016,007F)":{tag:"(0016,007F)",vr:"DS",name:"GPSTrack",vm:"1",version:"DICOM"},"(0016,0080)":{tag:"(0016,0080)",vr:"CS",name:"GPSImgDirectionRef",vm:"1",version:"DICOM"},"(0016,0081)":{tag:"(0016,0081)",vr:"DS",name:"GPSImgDirection",vm:"1",version:"DICOM"},"(0016,0082)":{tag:"(0016,0082)",vr:"UT",name:"GPSMapDatum",vm:"1",version:"DICOM"},"(0016,0083)":{tag:"(0016,0083)",vr:"CS",name:"GPSDestLatitudeRef",vm:"1",version:"DICOM"},"(0016,0084)":{tag:"(0016,0084)",vr:"DS",name:"GPSDestLatitude",vm:"3",version:"DICOM"},"(0016,0085)":{tag:"(0016,0085)",vr:"CS",name:"GPSDestLongitudeRef",vm:"1",version:"DICOM"},"(0016,0086)":{tag:"(0016,0086)",vr:"DS",name:"GPSDestLongitude",vm:"3",version:"DICOM"},"(0016,0087)":{tag:"(0016,0087)",vr:"CS",name:"GPSDestBearingRef",vm:"1",version:"DICOM"},"(0016,0088)":{tag:"(0016,0088)",vr:"DS",name:"GPSDestBearing",vm:"1",version:"DICOM"},"(0016,0089)":{tag:"(0016,0089)",vr:"CS",name:"GPSDestDistanceRef",vm:"1",version:"DICOM"},"(0016,008A)":{tag:"(0016,008A)",vr:"DS",name:"GPSDestDistance",vm:"1",version:"DICOM"},"(0016,008B)":{tag:"(0016,008B)",vr:"OB",name:"GPSProcessingMethod",vm:"1",version:"DICOM"},"(0016,008C)":{tag:"(0016,008C)",vr:"OB",name:"GPSAreaInformation",vm:"1",version:"DICOM"},"(0016,008D)":{tag:"(0016,008D)",vr:"DT",name:"GPSDateStamp",vm:"1",version:"DICOM"},"(0016,008E)":{tag:"(0016,008E)",vr:"IS",name:"GPSDifferential",vm:"1",version:"DICOM"},"(0016,1001)":{tag:"(0016,1001)",vr:"CS",name:"LightSourcePolarization",vm:"1",version:"DICOM"},"(0016,1002)":{tag:"(0016,1002)",vr:"DS",name:"EmitterColorTemperature",vm:"1",version:"DICOM"},"(0016,1003)":{tag:"(0016,1003)",vr:"CS",name:"ContactMethod",vm:"1",version:"DICOM"},"(0016,1004)":{tag:"(0016,1004)",vr:"CS",name:"ImmersionMedia",vm:"1-n",version:"DICOM"},"(0016,1005)":{tag:"(0016,1005)",vr:"DS",name:"OpticalMagnificationFactor",vm:"1",version:"DICOM"},"(0018,0010)":{tag:"(0018,0010)",vr:"LO",name:"ContrastBolusAgent",vm:"1",version:"DICOM"},"(0018,0012)":{tag:"(0018,0012)",vr:"SQ",name:"ContrastBolusAgentSequence",vm:"1",version:"DICOM"},"(0018,0013)":{tag:"(0018,0013)",vr:"FL",name:"ContrastBolusT1Relaxivity",vm:"1",version:"DICOM"},"(0018,0014)":{tag:"(0018,0014)",vr:"SQ",name:"ContrastBolusAdministrationRouteSequence",vm:"1",version:"DICOM"},"(0018,0015)":{tag:"(0018,0015)",vr:"CS",name:"BodyPartExamined",vm:"1",version:"DICOM"},"(0018,0020)":{tag:"(0018,0020)",vr:"CS",name:"ScanningSequence",vm:"1-n",version:"DICOM"},"(0018,0021)":{tag:"(0018,0021)",vr:"CS",name:"SequenceVariant",vm:"1-n",version:"DICOM"},"(0018,0022)":{tag:"(0018,0022)",vr:"CS",name:"ScanOptions",vm:"1-n",version:"DICOM"},"(0018,0023)":{tag:"(0018,0023)",vr:"CS",name:"MRAcquisitionType",vm:"1",version:"DICOM"},"(0018,0024)":{tag:"(0018,0024)",vr:"SH",name:"SequenceName",vm:"1",version:"DICOM"},"(0018,0025)":{tag:"(0018,0025)",vr:"CS",name:"AngioFlag",vm:"1",version:"DICOM"},"(0018,0026)":{tag:"(0018,0026)",vr:"SQ",name:"InterventionDrugInformationSequence",vm:"1",version:"DICOM"},"(0018,0027)":{tag:"(0018,0027)",vr:"TM",name:"InterventionDrugStopTime",vm:"1",version:"DICOM"},"(0018,0028)":{tag:"(0018,0028)",vr:"DS",name:"InterventionDrugDose",vm:"1",version:"DICOM"},"(0018,0029)":{tag:"(0018,0029)",vr:"SQ",name:"InterventionDrugCodeSequence",vm:"1",version:"DICOM"},"(0018,002A)":{tag:"(0018,002A)",vr:"SQ",name:"AdditionalDrugSequence",vm:"1",version:"DICOM"},"(0018,0031)":{tag:"(0018,0031)",vr:"LO",name:"Radiopharmaceutical",vm:"1",version:"DICOM"},"(0018,0034)":{tag:"(0018,0034)",vr:"LO",name:"InterventionDrugName",vm:"1",version:"DICOM"},"(0018,0035)":{tag:"(0018,0035)",vr:"TM",name:"InterventionDrugStartTime",vm:"1",version:"DICOM"},"(0018,0036)":{tag:"(0018,0036)",vr:"SQ",name:"InterventionSequence",vm:"1",version:"DICOM"},"(0018,0038)":{tag:"(0018,0038)",vr:"CS",name:"InterventionStatus",vm:"1",version:"DICOM"},"(0018,003A)":{tag:"(0018,003A)",vr:"ST",name:"InterventionDescription",vm:"1",version:"DICOM"},"(0018,0040)":{tag:"(0018,0040)",vr:"IS",name:"CineRate",vm:"1",version:"DICOM"},"(0018,0042)":{tag:"(0018,0042)",vr:"CS",name:"InitialCineRunState",vm:"1",version:"DICOM"},"(0018,0050)":{tag:"(0018,0050)",vr:"DS",name:"SliceThickness",vm:"1",version:"DICOM"},"(0018,0060)":{tag:"(0018,0060)",vr:"DS",name:"KVP",vm:"1",version:"DICOM"},"(0018,0070)":{tag:"(0018,0070)",vr:"IS",name:"CountsAccumulated",vm:"1",version:"DICOM"},"(0018,0071)":{tag:"(0018,0071)",vr:"CS",name:"AcquisitionTerminationCondition",vm:"1",version:"DICOM"},"(0018,0072)":{tag:"(0018,0072)",vr:"DS",name:"EffectiveDuration",vm:"1",version:"DICOM"},"(0018,0073)":{tag:"(0018,0073)",vr:"CS",name:"AcquisitionStartCondition",vm:"1",version:"DICOM"},"(0018,0074)":{tag:"(0018,0074)",vr:"IS",name:"AcquisitionStartConditionData",vm:"1",version:"DICOM"},"(0018,0075)":{tag:"(0018,0075)",vr:"IS",name:"AcquisitionTerminationConditionData",vm:"1",version:"DICOM"},"(0018,0080)":{tag:"(0018,0080)",vr:"DS",name:"RepetitionTime",vm:"1",version:"DICOM"},"(0018,0081)":{tag:"(0018,0081)",vr:"DS",name:"EchoTime",vm:"1",version:"DICOM"},"(0018,0082)":{tag:"(0018,0082)",vr:"DS",name:"InversionTime",vm:"1",version:"DICOM"},"(0018,0083)":{tag:"(0018,0083)",vr:"DS",name:"NumberOfAverages",vm:"1",version:"DICOM"},"(0018,0084)":{tag:"(0018,0084)",vr:"DS",name:"ImagingFrequency",vm:"1",version:"DICOM"},"(0018,0085)":{tag:"(0018,0085)",vr:"SH",name:"ImagedNucleus",vm:"1",version:"DICOM"},"(0018,0086)":{tag:"(0018,0086)",vr:"IS",name:"EchoNumbers",vm:"1-n",version:"DICOM"},"(0018,0087)":{tag:"(0018,0087)",vr:"DS",name:"MagneticFieldStrength",vm:"1",version:"DICOM"},"(0018,0088)":{tag:"(0018,0088)",vr:"DS",name:"SpacingBetweenSlices",vm:"1",version:"DICOM"},"(0018,0089)":{tag:"(0018,0089)",vr:"IS",name:"NumberOfPhaseEncodingSteps",vm:"1",version:"DICOM"},"(0018,0090)":{tag:"(0018,0090)",vr:"DS",name:"DataCollectionDiameter",vm:"1",version:"DICOM"},"(0018,0091)":{tag:"(0018,0091)",vr:"IS",name:"EchoTrainLength",vm:"1",version:"DICOM"},"(0018,0093)":{tag:"(0018,0093)",vr:"DS",name:"PercentSampling",vm:"1",version:"DICOM"},"(0018,0094)":{tag:"(0018,0094)",vr:"DS",name:"PercentPhaseFieldOfView",vm:"1",version:"DICOM"},"(0018,0095)":{tag:"(0018,0095)",vr:"DS",name:"PixelBandwidth",vm:"1",version:"DICOM"},"(0018,1000)":{tag:"(0018,1000)",vr:"LO",name:"DeviceSerialNumber",vm:"1",version:"DICOM"},"(0018,1002)":{tag:"(0018,1002)",vr:"UI",name:"DeviceUID",vm:"1",version:"DICOM"},"(0018,1003)":{tag:"(0018,1003)",vr:"LO",name:"DeviceID",vm:"1",version:"DICOM"},"(0018,1004)":{tag:"(0018,1004)",vr:"LO",name:"PlateID",vm:"1",version:"DICOM"},"(0018,1005)":{tag:"(0018,1005)",vr:"LO",name:"GeneratorID",vm:"1",version:"DICOM"},"(0018,1006)":{tag:"(0018,1006)",vr:"LO",name:"GridID",vm:"1",version:"DICOM"},"(0018,1007)":{tag:"(0018,1007)",vr:"LO",name:"CassetteID",vm:"1",version:"DICOM"},"(0018,1008)":{tag:"(0018,1008)",vr:"LO",name:"GantryID",vm:"1",version:"DICOM"},"(0018,1009)":{tag:"(0018,1009)",vr:"UT",name:"UniqueDeviceIdentifier",vm:"1",version:"DICOM"},"(0018,100A)":{tag:"(0018,100A)",vr:"SQ",name:"UDISequence",vm:"1",version:"DICOM"},"(0018,100B)":{tag:"(0018,100B)",vr:"UI",name:"ManufacturerDeviceClassUID",vm:"1-n",version:"DICOM"},"(0018,1010)":{tag:"(0018,1010)",vr:"LO",name:"SecondaryCaptureDeviceID",vm:"1",version:"DICOM"},"(0018,1012)":{tag:"(0018,1012)",vr:"DA",name:"DateOfSecondaryCapture",vm:"1",version:"DICOM"},"(0018,1014)":{tag:"(0018,1014)",vr:"TM",name:"TimeOfSecondaryCapture",vm:"1",version:"DICOM"},"(0018,1016)":{tag:"(0018,1016)",vr:"LO",name:"SecondaryCaptureDeviceManufacturer",vm:"1",version:"DICOM"},"(0018,1018)":{tag:"(0018,1018)",vr:"LO",name:"SecondaryCaptureDeviceManufacturerModelName",vm:"1",version:"DICOM"},"(0018,1019)":{tag:"(0018,1019)",vr:"LO",name:"SecondaryCaptureDeviceSoftwareVersions",vm:"1-n",version:"DICOM"},"(0018,1020)":{tag:"(0018,1020)",vr:"LO",name:"SoftwareVersions",vm:"1-n",version:"DICOM"},"(0018,1022)":{tag:"(0018,1022)",vr:"SH",name:"VideoImageFormatAcquired",vm:"1",version:"DICOM"},"(0018,1023)":{tag:"(0018,1023)",vr:"LO",name:"DigitalImageFormatAcquired",vm:"1",version:"DICOM"},"(0018,1030)":{tag:"(0018,1030)",vr:"LO",name:"ProtocolName",vm:"1",version:"DICOM"},"(0018,1040)":{tag:"(0018,1040)",vr:"LO",name:"ContrastBolusRoute",vm:"1",version:"DICOM"},"(0018,1041)":{tag:"(0018,1041)",vr:"DS",name:"ContrastBolusVolume",vm:"1",version:"DICOM"},"(0018,1042)":{tag:"(0018,1042)",vr:"TM",name:"ContrastBolusStartTime",vm:"1",version:"DICOM"},"(0018,1043)":{tag:"(0018,1043)",vr:"TM",name:"ContrastBolusStopTime",vm:"1",version:"DICOM"},"(0018,1044)":{tag:"(0018,1044)",vr:"DS",name:"ContrastBolusTotalDose",vm:"1",version:"DICOM"},"(0018,1045)":{tag:"(0018,1045)",vr:"IS",name:"SyringeCounts",vm:"1",version:"DICOM"},"(0018,1046)":{tag:"(0018,1046)",vr:"DS",name:"ContrastFlowRate",vm:"1-n",version:"DICOM"},"(0018,1047)":{tag:"(0018,1047)",vr:"DS",name:"ContrastFlowDuration",vm:"1-n",version:"DICOM"},"(0018,1048)":{tag:"(0018,1048)",vr:"CS",name:"ContrastBolusIngredient",vm:"1",version:"DICOM"},"(0018,1049)":{tag:"(0018,1049)",vr:"DS",name:"ContrastBolusIngredientConcentration",vm:"1",version:"DICOM"},"(0018,1050)":{tag:"(0018,1050)",vr:"DS",name:"SpatialResolution",vm:"1",version:"DICOM"},"(0018,1060)":{tag:"(0018,1060)",vr:"DS",name:"TriggerTime",vm:"1",version:"DICOM"},"(0018,1061)":{tag:"(0018,1061)",vr:"LO",name:"TriggerSourceOrType",vm:"1",version:"DICOM"},"(0018,1062)":{tag:"(0018,1062)",vr:"IS",name:"NominalInterval",vm:"1",version:"DICOM"},"(0018,1063)":{tag:"(0018,1063)",vr:"DS",name:"FrameTime",vm:"1",version:"DICOM"},"(0018,1064)":{tag:"(0018,1064)",vr:"LO",name:"CardiacFramingType",vm:"1",version:"DICOM"},"(0018,1065)":{tag:"(0018,1065)",vr:"DS",name:"FrameTimeVector",vm:"1-n",version:"DICOM"},"(0018,1066)":{tag:"(0018,1066)",vr:"DS",name:"FrameDelay",vm:"1",version:"DICOM"},"(0018,1067)":{tag:"(0018,1067)",vr:"DS",name:"ImageTriggerDelay",vm:"1",version:"DICOM"},"(0018,1068)":{tag:"(0018,1068)",vr:"DS",name:"MultiplexGroupTimeOffset",vm:"1",version:"DICOM"},"(0018,1069)":{tag:"(0018,1069)",vr:"DS",name:"TriggerTimeOffset",vm:"1",version:"DICOM"},"(0018,106A)":{tag:"(0018,106A)",vr:"CS",name:"SynchronizationTrigger",vm:"1",version:"DICOM"},"(0018,106C)":{tag:"(0018,106C)",vr:"US",name:"SynchronizationChannel",vm:"2",version:"DICOM"},"(0018,106E)":{tag:"(0018,106E)",vr:"UL",name:"TriggerSamplePosition",vm:"1",version:"DICOM"},"(0018,1070)":{tag:"(0018,1070)",vr:"LO",name:"RadiopharmaceuticalRoute",vm:"1",version:"DICOM"},"(0018,1071)":{tag:"(0018,1071)",vr:"DS",name:"RadiopharmaceuticalVolume",vm:"1",version:"DICOM"},"(0018,1072)":{tag:"(0018,1072)",vr:"TM",name:"RadiopharmaceuticalStartTime",vm:"1",version:"DICOM"},"(0018,1073)":{tag:"(0018,1073)",vr:"TM",name:"RadiopharmaceuticalStopTime",vm:"1",version:"DICOM"},"(0018,1074)":{tag:"(0018,1074)",vr:"DS",name:"RadionuclideTotalDose",vm:"1",version:"DICOM"},"(0018,1075)":{tag:"(0018,1075)",vr:"DS",name:"RadionuclideHalfLife",vm:"1",version:"DICOM"},"(0018,1076)":{tag:"(0018,1076)",vr:"DS",name:"RadionuclidePositronFraction",vm:"1",version:"DICOM"},"(0018,1077)":{tag:"(0018,1077)",vr:"DS",name:"RadiopharmaceuticalSpecificActivity",vm:"1",version:"DICOM"},"(0018,1078)":{tag:"(0018,1078)",vr:"DT",name:"RadiopharmaceuticalStartDateTime",vm:"1",version:"DICOM"},"(0018,1079)":{tag:"(0018,1079)",vr:"DT",name:"RadiopharmaceuticalStopDateTime",vm:"1",version:"DICOM"},"(0018,1080)":{tag:"(0018,1080)",vr:"CS",name:"BeatRejectionFlag",vm:"1",version:"DICOM"},"(0018,1081)":{tag:"(0018,1081)",vr:"IS",name:"LowRRValue",vm:"1",version:"DICOM"},"(0018,1082)":{tag:"(0018,1082)",vr:"IS",name:"HighRRValue",vm:"1",version:"DICOM"},"(0018,1083)":{tag:"(0018,1083)",vr:"IS",name:"IntervalsAcquired",vm:"1",version:"DICOM"},"(0018,1084)":{tag:"(0018,1084)",vr:"IS",name:"IntervalsRejected",vm:"1",version:"DICOM"},"(0018,1085)":{tag:"(0018,1085)",vr:"LO",name:"PVCRejection",vm:"1",version:"DICOM"},"(0018,1086)":{tag:"(0018,1086)",vr:"IS",name:"SkipBeats",vm:"1",version:"DICOM"},"(0018,1088)":{tag:"(0018,1088)",vr:"IS",name:"HeartRate",vm:"1",version:"DICOM"},"(0018,1090)":{tag:"(0018,1090)",vr:"IS",name:"CardiacNumberOfImages",vm:"1",version:"DICOM"},"(0018,1094)":{tag:"(0018,1094)",vr:"IS",name:"TriggerWindow",vm:"1",version:"DICOM"},"(0018,1100)":{tag:"(0018,1100)",vr:"DS",name:"ReconstructionDiameter",vm:"1",version:"DICOM"},"(0018,1110)":{tag:"(0018,1110)",vr:"DS",name:"DistanceSourceToDetector",vm:"1",version:"DICOM"},"(0018,1111)":{tag:"(0018,1111)",vr:"DS",name:"DistanceSourceToPatient",vm:"1",version:"DICOM"},"(0018,1114)":{tag:"(0018,1114)",vr:"DS",name:"EstimatedRadiographicMagnificationFactor",vm:"1",version:"DICOM"},"(0018,1120)":{tag:"(0018,1120)",vr:"DS",name:"GantryDetectorTilt",vm:"1",version:"DICOM"},"(0018,1121)":{tag:"(0018,1121)",vr:"DS",name:"GantryDetectorSlew",vm:"1",version:"DICOM"},"(0018,1130)":{tag:"(0018,1130)",vr:"DS",name:"TableHeight",vm:"1",version:"DICOM"},"(0018,1131)":{tag:"(0018,1131)",vr:"DS",name:"TableTraverse",vm:"1",version:"DICOM"},"(0018,1134)":{tag:"(0018,1134)",vr:"CS",name:"TableMotion",vm:"1",version:"DICOM"},"(0018,1135)":{tag:"(0018,1135)",vr:"DS",name:"TableVerticalIncrement",vm:"1-n",version:"DICOM"},"(0018,1136)":{tag:"(0018,1136)",vr:"DS",name:"TableLateralIncrement",vm:"1-n",version:"DICOM"},"(0018,1137)":{tag:"(0018,1137)",vr:"DS",name:"TableLongitudinalIncrement",vm:"1-n",version:"DICOM"},"(0018,1138)":{tag:"(0018,1138)",vr:"DS",name:"TableAngle",vm:"1",version:"DICOM"},"(0018,113A)":{tag:"(0018,113A)",vr:"CS",name:"TableType",vm:"1",version:"DICOM"},"(0018,1140)":{tag:"(0018,1140)",vr:"CS",name:"RotationDirection",vm:"1",version:"DICOM"},"(0018,1142)":{tag:"(0018,1142)",vr:"DS",name:"RadialPosition",vm:"1-n",version:"DICOM"},"(0018,1143)":{tag:"(0018,1143)",vr:"DS",name:"ScanArc",vm:"1",version:"DICOM"},"(0018,1144)":{tag:"(0018,1144)",vr:"DS",name:"AngularStep",vm:"1",version:"DICOM"},"(0018,1145)":{tag:"(0018,1145)",vr:"DS",name:"CenterOfRotationOffset",vm:"1",version:"DICOM"},"(0018,1147)":{tag:"(0018,1147)",vr:"CS",name:"FieldOfViewShape",vm:"1",version:"DICOM"},"(0018,1149)":{tag:"(0018,1149)",vr:"IS",name:"FieldOfViewDimensions",vm:"1-2",version:"DICOM"},"(0018,1150)":{tag:"(0018,1150)",vr:"IS",name:"ExposureTime",vm:"1",version:"DICOM"},"(0018,1151)":{tag:"(0018,1151)",vr:"IS",name:"XRayTubeCurrent",vm:"1",version:"DICOM"},"(0018,1152)":{tag:"(0018,1152)",vr:"IS",name:"Exposure",vm:"1",version:"DICOM"},"(0018,1153)":{tag:"(0018,1153)",vr:"IS",name:"ExposureInuAs",vm:"1",version:"DICOM"},"(0018,1154)":{tag:"(0018,1154)",vr:"DS",name:"AveragePulseWidth",vm:"1",version:"DICOM"},"(0018,1155)":{tag:"(0018,1155)",vr:"CS",name:"RadiationSetting",vm:"1",version:"DICOM"},"(0018,1156)":{tag:"(0018,1156)",vr:"CS",name:"RectificationType",vm:"1",version:"DICOM"},"(0018,115A)":{tag:"(0018,115A)",vr:"CS",name:"RadiationMode",vm:"1",version:"DICOM"},"(0018,115E)":{tag:"(0018,115E)",vr:"DS",name:"ImageAndFluoroscopyAreaDoseProduct",vm:"1",version:"DICOM"},"(0018,1160)":{tag:"(0018,1160)",vr:"SH",name:"FilterType",vm:"1",version:"DICOM"},"(0018,1161)":{tag:"(0018,1161)",vr:"LO",name:"TypeOfFilters",vm:"1-n",version:"DICOM"},"(0018,1162)":{tag:"(0018,1162)",vr:"DS",name:"IntensifierSize",vm:"1",version:"DICOM"},"(0018,1164)":{tag:"(0018,1164)",vr:"DS",name:"ImagerPixelSpacing",vm:"2",version:"DICOM"},"(0018,1166)":{tag:"(0018,1166)",vr:"CS",name:"Grid",vm:"1-n",version:"DICOM"},"(0018,1170)":{tag:"(0018,1170)",vr:"IS",name:"GeneratorPower",vm:"1",version:"DICOM"},"(0018,1180)":{tag:"(0018,1180)",vr:"SH",name:"CollimatorGridName",vm:"1",version:"DICOM"},"(0018,1181)":{tag:"(0018,1181)",vr:"CS",name:"CollimatorType",vm:"1",version:"DICOM"},"(0018,1182)":{tag:"(0018,1182)",vr:"IS",name:"FocalDistance",vm:"1-2",version:"DICOM"},"(0018,1183)":{tag:"(0018,1183)",vr:"DS",name:"XFocusCenter",vm:"1-2",version:"DICOM"},"(0018,1184)":{tag:"(0018,1184)",vr:"DS",name:"YFocusCenter",vm:"1-2",version:"DICOM"},"(0018,1190)":{tag:"(0018,1190)",vr:"DS",name:"FocalSpots",vm:"1-n",version:"DICOM"},"(0018,1191)":{tag:"(0018,1191)",vr:"CS",name:"AnodeTargetMaterial",vm:"1",version:"DICOM"},"(0018,11A0)":{tag:"(0018,11A0)",vr:"DS",name:"BodyPartThickness",vm:"1",version:"DICOM"},"(0018,11A2)":{tag:"(0018,11A2)",vr:"DS",name:"CompressionForce",vm:"1",version:"DICOM"},"(0018,11A3)":{tag:"(0018,11A3)",vr:"DS",name:"CompressionPressure",vm:"1",version:"DICOM"},"(0018,11A4)":{tag:"(0018,11A4)",vr:"LO",name:"PaddleDescription",vm:"1",version:"DICOM"},"(0018,11A5)":{tag:"(0018,11A5)",vr:"DS",name:"CompressionContactArea",vm:"1",version:"DICOM"},"(0018,11B0)":{tag:"(0018,11B0)",vr:"LO",name:"AcquisitionMode",vm:"1",version:"DICOM"},"(0018,11B1)":{tag:"(0018,11B1)",vr:"LO",name:"DoseModeName",vm:"1",version:"DICOM"},"(0018,11B2)":{tag:"(0018,11B2)",vr:"CS",name:"AcquiredSubtractionMaskFlag",vm:"1",version:"DICOM"},"(0018,11B3)":{tag:"(0018,11B3)",vr:"CS",name:"FluoroscopyPersistenceFlag",vm:"1",version:"DICOM"},"(0018,11B4)":{tag:"(0018,11B4)",vr:"CS",name:"FluoroscopyLastImageHoldPersistenceFlag",vm:"1",version:"DICOM"},"(0018,11B5)":{tag:"(0018,11B5)",vr:"IS",name:"UpperLimitNumberOfPersistentFluoroscopyFrames",vm:"1",version:"DICOM"},"(0018,11B6)":{tag:"(0018,11B6)",vr:"CS",name:"ContrastBolusAutoInjectionTriggerFlag",vm:"1",version:"DICOM"},"(0018,11B7)":{tag:"(0018,11B7)",vr:"FD",name:"ContrastBolusInjectionDelay",vm:"1",version:"DICOM"},"(0018,11B8)":{tag:"(0018,11B8)",vr:"SQ",name:"XAAcquisitionPhaseDetailsSequence",vm:"1",version:"DICOM"},"(0018,11B9)":{tag:"(0018,11B9)",vr:"FD",name:"XAAcquisitionFrameRate",vm:"1",version:"DICOM"},"(0018,11BA)":{tag:"(0018,11BA)",vr:"SQ",name:"XAPlaneDetailsSequence",vm:"1",version:"DICOM"},"(0018,11BB)":{tag:"(0018,11BB)",vr:"LO",name:"AcquisitionFieldOfViewLabel",vm:"1",version:"DICOM"},"(0018,11BC)":{tag:"(0018,11BC)",vr:"SQ",name:"XRayFilterDetailsSequence",vm:"1",version:"DICOM"},"(0018,11BD)":{tag:"(0018,11BD)",vr:"FD",name:"XAAcquisitionDuration",vm:"1",version:"DICOM"},"(0018,11BE)":{tag:"(0018,11BE)",vr:"CS",name:"ReconstructionPipelineType",vm:"1",version:"DICOM"},"(0018,11BF)":{tag:"(0018,11BF)",vr:"SQ",name:"ImageFilterDetailsSequence",vm:"1",version:"DICOM"},"(0018,11C0)":{tag:"(0018,11C0)",vr:"CS",name:"AppliedMaskSubtractionFlag",vm:"1",version:"DICOM"},"(0018,11C1)":{tag:"(0018,11C1)",vr:"SQ",name:"RequestedSeriesDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0018,1200)":{tag:"(0018,1200)",vr:"DA",name:"DateOfLastCalibration",vm:"1-n",version:"DICOM"},"(0018,1201)":{tag:"(0018,1201)",vr:"TM",name:"TimeOfLastCalibration",vm:"1-n",version:"DICOM"},"(0018,1202)":{tag:"(0018,1202)",vr:"DT",name:"DateTimeOfLastCalibration",vm:"1",version:"DICOM"},"(0018,1210)":{tag:"(0018,1210)",vr:"SH",name:"ConvolutionKernel",vm:"1-n",version:"DICOM"},"(0018,1242)":{tag:"(0018,1242)",vr:"IS",name:"ActualFrameDuration",vm:"1",version:"DICOM"},"(0018,1243)":{tag:"(0018,1243)",vr:"IS",name:"CountRate",vm:"1",version:"DICOM"},"(0018,1244)":{tag:"(0018,1244)",vr:"US",name:"PreferredPlaybackSequencing",vm:"1",version:"DICOM"},"(0018,1250)":{tag:"(0018,1250)",vr:"SH",name:"ReceiveCoilName",vm:"1",version:"DICOM"},"(0018,1251)":{tag:"(0018,1251)",vr:"SH",name:"TransmitCoilName",vm:"1",version:"DICOM"},"(0018,1260)":{tag:"(0018,1260)",vr:"SH",name:"PlateType",vm:"1",version:"DICOM"},"(0018,1261)":{tag:"(0018,1261)",vr:"LO",name:"PhosphorType",vm:"1",version:"DICOM"},"(0018,1271)":{tag:"(0018,1271)",vr:"FD",name:"WaterEquivalentDiameter",vm:"1",version:"DICOM"},"(0018,1272)":{tag:"(0018,1272)",vr:"SQ",name:"WaterEquivalentDiameterCalculationMethodCodeSequence",vm:"1",version:"DICOM"},"(0018,1300)":{tag:"(0018,1300)",vr:"DS",name:"ScanVelocity",vm:"1",version:"DICOM"},"(0018,1301)":{tag:"(0018,1301)",vr:"CS",name:"WholeBodyTechnique",vm:"1-n",version:"DICOM"},"(0018,1302)":{tag:"(0018,1302)",vr:"IS",name:"ScanLength",vm:"1",version:"DICOM"},"(0018,1310)":{tag:"(0018,1310)",vr:"US",name:"AcquisitionMatrix",vm:"4",version:"DICOM"},"(0018,1312)":{tag:"(0018,1312)",vr:"CS",name:"InPlanePhaseEncodingDirection",vm:"1",version:"DICOM"},"(0018,1314)":{tag:"(0018,1314)",vr:"DS",name:"FlipAngle",vm:"1",version:"DICOM"},"(0018,1315)":{tag:"(0018,1315)",vr:"CS",name:"VariableFlipAngleFlag",vm:"1",version:"DICOM"},"(0018,1316)":{tag:"(0018,1316)",vr:"DS",name:"SAR",vm:"1",version:"DICOM"},"(0018,1318)":{tag:"(0018,1318)",vr:"DS",name:"dBdt",vm:"1",version:"DICOM"},"(0018,1400)":{tag:"(0018,1400)",vr:"LO",name:"AcquisitionDeviceProcessingDescription",vm:"1",version:"DICOM"},"(0018,1401)":{tag:"(0018,1401)",vr:"LO",name:"AcquisitionDeviceProcessingCode",vm:"1",version:"DICOM"},"(0018,1402)":{tag:"(0018,1402)",vr:"CS",name:"CassetteOrientation",vm:"1",version:"DICOM"},"(0018,1403)":{tag:"(0018,1403)",vr:"CS",name:"CassetteSize",vm:"1",version:"DICOM"},"(0018,1404)":{tag:"(0018,1404)",vr:"US",name:"ExposuresOnPlate",vm:"1",version:"DICOM"},"(0018,1405)":{tag:"(0018,1405)",vr:"IS",name:"RelativeXRayExposure",vm:"1",version:"DICOM"},"(0018,1411)":{tag:"(0018,1411)",vr:"DS",name:"ExposureIndex",vm:"1",version:"DICOM"},"(0018,1412)":{tag:"(0018,1412)",vr:"DS",name:"TargetExposureIndex",vm:"1",version:"DICOM"},"(0018,1413)":{tag:"(0018,1413)",vr:"DS",name:"DeviationIndex",vm:"1",version:"DICOM"},"(0018,1450)":{tag:"(0018,1450)",vr:"DS",name:"ColumnAngulation",vm:"1",version:"DICOM"},"(0018,1460)":{tag:"(0018,1460)",vr:"DS",name:"TomoLayerHeight",vm:"1",version:"DICOM"},"(0018,1470)":{tag:"(0018,1470)",vr:"DS",name:"TomoAngle",vm:"1",version:"DICOM"},"(0018,1480)":{tag:"(0018,1480)",vr:"DS",name:"TomoTime",vm:"1",version:"DICOM"},"(0018,1490)":{tag:"(0018,1490)",vr:"CS",name:"TomoType",vm:"1",version:"DICOM"},"(0018,1491)":{tag:"(0018,1491)",vr:"CS",name:"TomoClass",vm:"1",version:"DICOM"},"(0018,1495)":{tag:"(0018,1495)",vr:"IS",name:"NumberOfTomosynthesisSourceImages",vm:"1",version:"DICOM"},"(0018,1500)":{tag:"(0018,1500)",vr:"CS",name:"PositionerMotion",vm:"1",version:"DICOM"},"(0018,1508)":{tag:"(0018,1508)",vr:"CS",name:"PositionerType",vm:"1",version:"DICOM"},"(0018,1510)":{tag:"(0018,1510)",vr:"DS",name:"PositionerPrimaryAngle",vm:"1",version:"DICOM"},"(0018,1511)":{tag:"(0018,1511)",vr:"DS",name:"PositionerSecondaryAngle",vm:"1",version:"DICOM"},"(0018,1520)":{tag:"(0018,1520)",vr:"DS",name:"PositionerPrimaryAngleIncrement",vm:"1-n",version:"DICOM"},"(0018,1521)":{tag:"(0018,1521)",vr:"DS",name:"PositionerSecondaryAngleIncrement",vm:"1-n",version:"DICOM"},"(0018,1530)":{tag:"(0018,1530)",vr:"DS",name:"DetectorPrimaryAngle",vm:"1",version:"DICOM"},"(0018,1531)":{tag:"(0018,1531)",vr:"DS",name:"DetectorSecondaryAngle",vm:"1",version:"DICOM"},"(0018,1600)":{tag:"(0018,1600)",vr:"CS",name:"ShutterShape",vm:"1-3",version:"DICOM"},"(0018,1602)":{tag:"(0018,1602)",vr:"IS",name:"ShutterLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1604)":{tag:"(0018,1604)",vr:"IS",name:"ShutterRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1606)":{tag:"(0018,1606)",vr:"IS",name:"ShutterUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1608)":{tag:"(0018,1608)",vr:"IS",name:"ShutterLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1610)":{tag:"(0018,1610)",vr:"IS",name:"CenterOfCircularShutter",vm:"2",version:"DICOM"},"(0018,1612)":{tag:"(0018,1612)",vr:"IS",name:"RadiusOfCircularShutter",vm:"1",version:"DICOM"},"(0018,1620)":{tag:"(0018,1620)",vr:"IS",name:"VerticesOfThePolygonalShutter",vm:"2-2n",version:"DICOM"},"(0018,1622)":{tag:"(0018,1622)",vr:"US",name:"ShutterPresentationValue",vm:"1",version:"DICOM"},"(0018,1623)":{tag:"(0018,1623)",vr:"US",name:"ShutterOverlayGroup",vm:"1",version:"DICOM"},"(0018,1624)":{tag:"(0018,1624)",vr:"US",name:"ShutterPresentationColorCIELabValue",vm:"3",version:"DICOM"},"(0018,1630)":{tag:"(0018,1630)",vr:"CS",name:"OutlineShapeType",vm:"1",version:"DICOM"},"(0018,1631)":{tag:"(0018,1631)",vr:"FD",name:"OutlineLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1632)":{tag:"(0018,1632)",vr:"FD",name:"OutlineRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1633)":{tag:"(0018,1633)",vr:"FD",name:"OutlineUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1634)":{tag:"(0018,1634)",vr:"FD",name:"OutlineLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1635)":{tag:"(0018,1635)",vr:"FD",name:"CenterOfCircularOutline",vm:"2",version:"DICOM"},"(0018,1636)":{tag:"(0018,1636)",vr:"FD",name:"DiameterOfCircularOutline",vm:"1",version:"DICOM"},"(0018,1637)":{tag:"(0018,1637)",vr:"UL",name:"NumberOfPolygonalVertices",vm:"1",version:"DICOM"},"(0018,1638)":{tag:"(0018,1638)",vr:"OF",name:"VerticesOfThePolygonalOutline",vm:"1",version:"DICOM"},"(0018,1700)":{tag:"(0018,1700)",vr:"CS",name:"CollimatorShape",vm:"1-3",version:"DICOM"},"(0018,1702)":{tag:"(0018,1702)",vr:"IS",name:"CollimatorLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,1704)":{tag:"(0018,1704)",vr:"IS",name:"CollimatorRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,1706)":{tag:"(0018,1706)",vr:"IS",name:"CollimatorUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1708)":{tag:"(0018,1708)",vr:"IS",name:"CollimatorLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,1710)":{tag:"(0018,1710)",vr:"IS",name:"CenterOfCircularCollimator",vm:"2",version:"DICOM"},"(0018,1712)":{tag:"(0018,1712)",vr:"IS",name:"RadiusOfCircularCollimator",vm:"1",version:"DICOM"},"(0018,1720)":{tag:"(0018,1720)",vr:"IS",name:"VerticesOfThePolygonalCollimator",vm:"2-2n",version:"DICOM"},"(0018,1800)":{tag:"(0018,1800)",vr:"CS",name:"AcquisitionTimeSynchronized",vm:"1",version:"DICOM"},"(0018,1801)":{tag:"(0018,1801)",vr:"SH",name:"TimeSource",vm:"1",version:"DICOM"},"(0018,1802)":{tag:"(0018,1802)",vr:"CS",name:"TimeDistributionProtocol",vm:"1",version:"DICOM"},"(0018,1803)":{tag:"(0018,1803)",vr:"LO",name:"NTPSourceAddress",vm:"1",version:"DICOM"},"(0018,2001)":{tag:"(0018,2001)",vr:"IS",name:"PageNumberVector",vm:"1-n",version:"DICOM"},"(0018,2002)":{tag:"(0018,2002)",vr:"SH",name:"FrameLabelVector",vm:"1-n",version:"DICOM"},"(0018,2003)":{tag:"(0018,2003)",vr:"DS",name:"FramePrimaryAngleVector",vm:"1-n",version:"DICOM"},"(0018,2004)":{tag:"(0018,2004)",vr:"DS",name:"FrameSecondaryAngleVector",vm:"1-n",version:"DICOM"},"(0018,2005)":{tag:"(0018,2005)",vr:"DS",name:"SliceLocationVector",vm:"1-n",version:"DICOM"},"(0018,2006)":{tag:"(0018,2006)",vr:"SH",name:"DisplayWindowLabelVector",vm:"1-n",version:"DICOM"},"(0018,2010)":{tag:"(0018,2010)",vr:"DS",name:"NominalScannedPixelSpacing",vm:"2",version:"DICOM"},"(0018,2020)":{tag:"(0018,2020)",vr:"CS",name:"DigitizingDeviceTransportDirection",vm:"1",version:"DICOM"},"(0018,2030)":{tag:"(0018,2030)",vr:"DS",name:"RotationOfScannedFilm",vm:"1",version:"DICOM"},"(0018,2041)":{tag:"(0018,2041)",vr:"SQ",name:"BiopsyTargetSequence",vm:"1",version:"DICOM"},"(0018,2042)":{tag:"(0018,2042)",vr:"UI",name:"TargetUID",vm:"1",version:"DICOM"},"(0018,2043)":{tag:"(0018,2043)",vr:"FL",name:"LocalizingCursorPosition",vm:"2",version:"DICOM"},"(0018,2044)":{tag:"(0018,2044)",vr:"FL",name:"CalculatedTargetPosition",vm:"3",version:"DICOM"},"(0018,2045)":{tag:"(0018,2045)",vr:"SH",name:"TargetLabel",vm:"1",version:"DICOM"},"(0018,2046)":{tag:"(0018,2046)",vr:"FL",name:"DisplayedZValue",vm:"1",version:"DICOM"},"(0018,3100)":{tag:"(0018,3100)",vr:"CS",name:"IVUSAcquisition",vm:"1",version:"DICOM"},"(0018,3101)":{tag:"(0018,3101)",vr:"DS",name:"IVUSPullbackRate",vm:"1",version:"DICOM"},"(0018,3102)":{tag:"(0018,3102)",vr:"DS",name:"IVUSGatedRate",vm:"1",version:"DICOM"},"(0018,3103)":{tag:"(0018,3103)",vr:"IS",name:"IVUSPullbackStartFrameNumber",vm:"1",version:"DICOM"},"(0018,3104)":{tag:"(0018,3104)",vr:"IS",name:"IVUSPullbackStopFrameNumber",vm:"1",version:"DICOM"},"(0018,3105)":{tag:"(0018,3105)",vr:"IS",name:"LesionNumber",vm:"1-n",version:"DICOM"},"(0018,5000)":{tag:"(0018,5000)",vr:"SH",name:"OutputPower",vm:"1-n",version:"DICOM"},"(0018,5010)":{tag:"(0018,5010)",vr:"LO",name:"TransducerData",vm:"1-n",version:"DICOM"},"(0018,5011)":{tag:"(0018,5011)",vr:"SQ",name:"TransducerIdentificationSequence",vm:"1",version:"DICOM"},"(0018,5012)":{tag:"(0018,5012)",vr:"DS",name:"FocusDepth",vm:"1",version:"DICOM"},"(0018,5020)":{tag:"(0018,5020)",vr:"LO",name:"ProcessingFunction",vm:"1",version:"DICOM"},"(0018,5022)":{tag:"(0018,5022)",vr:"DS",name:"MechanicalIndex",vm:"1",version:"DICOM"},"(0018,5024)":{tag:"(0018,5024)",vr:"DS",name:"BoneThermalIndex",vm:"1",version:"DICOM"},"(0018,5026)":{tag:"(0018,5026)",vr:"DS",name:"CranialThermalIndex",vm:"1",version:"DICOM"},"(0018,5027)":{tag:"(0018,5027)",vr:"DS",name:"SoftTissueThermalIndex",vm:"1",version:"DICOM"},"(0018,5028)":{tag:"(0018,5028)",vr:"DS",name:"SoftTissueFocusThermalIndex",vm:"1",version:"DICOM"},"(0018,5029)":{tag:"(0018,5029)",vr:"DS",name:"SoftTissueSurfaceThermalIndex",vm:"1",version:"DICOM"},"(0018,5050)":{tag:"(0018,5050)",vr:"IS",name:"DepthOfScanField",vm:"1",version:"DICOM"},"(0018,5100)":{tag:"(0018,5100)",vr:"CS",name:"PatientPosition",vm:"1",version:"DICOM"},"(0018,5101)":{tag:"(0018,5101)",vr:"CS",name:"ViewPosition",vm:"1",version:"DICOM"},"(0018,5104)":{tag:"(0018,5104)",vr:"SQ",name:"ProjectionEponymousNameCodeSequence",vm:"1",version:"DICOM"},"(0018,6000)":{tag:"(0018,6000)",vr:"DS",name:"Sensitivity",vm:"1",version:"DICOM"},"(0018,6011)":{tag:"(0018,6011)",vr:"SQ",name:"SequenceOfUltrasoundRegions",vm:"1",version:"DICOM"},"(0018,6012)":{tag:"(0018,6012)",vr:"US",name:"RegionSpatialFormat",vm:"1",version:"DICOM"},"(0018,6014)":{tag:"(0018,6014)",vr:"US",name:"RegionDataType",vm:"1",version:"DICOM"},"(0018,6016)":{tag:"(0018,6016)",vr:"UL",name:"RegionFlags",vm:"1",version:"DICOM"},"(0018,6018)":{tag:"(0018,6018)",vr:"UL",name:"RegionLocationMinX0",vm:"1",version:"DICOM"},"(0018,601A)":{tag:"(0018,601A)",vr:"UL",name:"RegionLocationMinY0",vm:"1",version:"DICOM"},"(0018,601C)":{tag:"(0018,601C)",vr:"UL",name:"RegionLocationMaxX1",vm:"1",version:"DICOM"},"(0018,601E)":{tag:"(0018,601E)",vr:"UL",name:"RegionLocationMaxY1",vm:"1",version:"DICOM"},"(0018,6020)":{tag:"(0018,6020)",vr:"SL",name:"ReferencePixelX0",vm:"1",version:"DICOM"},"(0018,6022)":{tag:"(0018,6022)",vr:"SL",name:"ReferencePixelY0",vm:"1",version:"DICOM"},"(0018,6024)":{tag:"(0018,6024)",vr:"US",name:"PhysicalUnitsXDirection",vm:"1",version:"DICOM"},"(0018,6026)":{tag:"(0018,6026)",vr:"US",name:"PhysicalUnitsYDirection",vm:"1",version:"DICOM"},"(0018,6028)":{tag:"(0018,6028)",vr:"FD",name:"ReferencePixelPhysicalValueX",vm:"1",version:"DICOM"},"(0018,602A)":{tag:"(0018,602A)",vr:"FD",name:"ReferencePixelPhysicalValueY",vm:"1",version:"DICOM"},"(0018,602C)":{tag:"(0018,602C)",vr:"FD",name:"PhysicalDeltaX",vm:"1",version:"DICOM"},"(0018,602E)":{tag:"(0018,602E)",vr:"FD",name:"PhysicalDeltaY",vm:"1",version:"DICOM"},"(0018,6030)":{tag:"(0018,6030)",vr:"UL",name:"TransducerFrequency",vm:"1",version:"DICOM"},"(0018,6031)":{tag:"(0018,6031)",vr:"CS",name:"TransducerType",vm:"1",version:"DICOM"},"(0018,6032)":{tag:"(0018,6032)",vr:"UL",name:"PulseRepetitionFrequency",vm:"1",version:"DICOM"},"(0018,6034)":{tag:"(0018,6034)",vr:"FD",name:"DopplerCorrectionAngle",vm:"1",version:"DICOM"},"(0018,6036)":{tag:"(0018,6036)",vr:"FD",name:"SteeringAngle",vm:"1",version:"DICOM"},"(0018,6039)":{tag:"(0018,6039)",vr:"SL",name:"DopplerSampleVolumeXPosition",vm:"1",version:"DICOM"},"(0018,603B)":{tag:"(0018,603B)",vr:"SL",name:"DopplerSampleVolumeYPosition",vm:"1",version:"DICOM"},"(0018,603D)":{tag:"(0018,603D)",vr:"SL",name:"TMLinePositionX0",vm:"1",version:"DICOM"},"(0018,603F)":{tag:"(0018,603F)",vr:"SL",name:"TMLinePositionY0",vm:"1",version:"DICOM"},"(0018,6041)":{tag:"(0018,6041)",vr:"SL",name:"TMLinePositionX1",vm:"1",version:"DICOM"},"(0018,6043)":{tag:"(0018,6043)",vr:"SL",name:"TMLinePositionY1",vm:"1",version:"DICOM"},"(0018,6044)":{tag:"(0018,6044)",vr:"US",name:"PixelComponentOrganization",vm:"1",version:"DICOM"},"(0018,6046)":{tag:"(0018,6046)",vr:"UL",name:"PixelComponentMask",vm:"1",version:"DICOM"},"(0018,6048)":{tag:"(0018,6048)",vr:"UL",name:"PixelComponentRangeStart",vm:"1",version:"DICOM"},"(0018,604A)":{tag:"(0018,604A)",vr:"UL",name:"PixelComponentRangeStop",vm:"1",version:"DICOM"},"(0018,604C)":{tag:"(0018,604C)",vr:"US",name:"PixelComponentPhysicalUnits",vm:"1",version:"DICOM"},"(0018,604E)":{tag:"(0018,604E)",vr:"US",name:"PixelComponentDataType",vm:"1",version:"DICOM"},"(0018,6050)":{tag:"(0018,6050)",vr:"UL",name:"NumberOfTableBreakPoints",vm:"1",version:"DICOM"},"(0018,6052)":{tag:"(0018,6052)",vr:"UL",name:"TableOfXBreakPoints",vm:"1-n",version:"DICOM"},"(0018,6054)":{tag:"(0018,6054)",vr:"FD",name:"TableOfYBreakPoints",vm:"1-n",version:"DICOM"},"(0018,6056)":{tag:"(0018,6056)",vr:"UL",name:"NumberOfTableEntries",vm:"1",version:"DICOM"},"(0018,6058)":{tag:"(0018,6058)",vr:"UL",name:"TableOfPixelValues",vm:"1-n",version:"DICOM"},"(0018,605A)":{tag:"(0018,605A)",vr:"FL",name:"TableOfParameterValues",vm:"1-n",version:"DICOM"},"(0018,6060)":{tag:"(0018,6060)",vr:"FL",name:"RWaveTimeVector",vm:"1-n",version:"DICOM"},"(0018,6070)":{tag:"(0018,6070)",vr:"US",name:"ActiveImageAreaOverlayGroup",vm:"1",version:"DICOM"},"(0018,7000)":{tag:"(0018,7000)",vr:"CS",name:"DetectorConditionsNominalFlag",vm:"1",version:"DICOM"},"(0018,7001)":{tag:"(0018,7001)",vr:"DS",name:"DetectorTemperature",vm:"1",version:"DICOM"},"(0018,7004)":{tag:"(0018,7004)",vr:"CS",name:"DetectorType",vm:"1",version:"DICOM"},"(0018,7005)":{tag:"(0018,7005)",vr:"CS",name:"DetectorConfiguration",vm:"1",version:"DICOM"},"(0018,7006)":{tag:"(0018,7006)",vr:"LT",name:"DetectorDescription",vm:"1",version:"DICOM"},"(0018,7008)":{tag:"(0018,7008)",vr:"LT",name:"DetectorMode",vm:"1",version:"DICOM"},"(0018,700A)":{tag:"(0018,700A)",vr:"SH",name:"DetectorID",vm:"1",version:"DICOM"},"(0018,700C)":{tag:"(0018,700C)",vr:"DA",name:"DateOfLastDetectorCalibration",vm:"1",version:"DICOM"},"(0018,700E)":{tag:"(0018,700E)",vr:"TM",name:"TimeOfLastDetectorCalibration",vm:"1",version:"DICOM"},"(0018,7010)":{tag:"(0018,7010)",vr:"IS",name:"ExposuresOnDetectorSinceLastCalibration",vm:"1",version:"DICOM"},"(0018,7011)":{tag:"(0018,7011)",vr:"IS",name:"ExposuresOnDetectorSinceManufactured",vm:"1",version:"DICOM"},"(0018,7012)":{tag:"(0018,7012)",vr:"DS",name:"DetectorTimeSinceLastExposure",vm:"1",version:"DICOM"},"(0018,7014)":{tag:"(0018,7014)",vr:"DS",name:"DetectorActiveTime",vm:"1",version:"DICOM"},"(0018,7016)":{tag:"(0018,7016)",vr:"DS",name:"DetectorActivationOffsetFromExposure",vm:"1",version:"DICOM"},"(0018,701A)":{tag:"(0018,701A)",vr:"DS",name:"DetectorBinning",vm:"2",version:"DICOM"},"(0018,7020)":{tag:"(0018,7020)",vr:"DS",name:"DetectorElementPhysicalSize",vm:"2",version:"DICOM"},"(0018,7022)":{tag:"(0018,7022)",vr:"DS",name:"DetectorElementSpacing",vm:"2",version:"DICOM"},"(0018,7024)":{tag:"(0018,7024)",vr:"CS",name:"DetectorActiveShape",vm:"1",version:"DICOM"},"(0018,7026)":{tag:"(0018,7026)",vr:"DS",name:"DetectorActiveDimensions",vm:"1-2",version:"DICOM"},"(0018,7028)":{tag:"(0018,7028)",vr:"DS",name:"DetectorActiveOrigin",vm:"2",version:"DICOM"},"(0018,702A)":{tag:"(0018,702A)",vr:"LO",name:"DetectorManufacturerName",vm:"1",version:"DICOM"},"(0018,702B)":{tag:"(0018,702B)",vr:"LO",name:"DetectorManufacturerModelName",vm:"1",version:"DICOM"},"(0018,7030)":{tag:"(0018,7030)",vr:"DS",name:"FieldOfViewOrigin",vm:"2",version:"DICOM"},"(0018,7032)":{tag:"(0018,7032)",vr:"DS",name:"FieldOfViewRotation",vm:"1",version:"DICOM"},"(0018,7034)":{tag:"(0018,7034)",vr:"CS",name:"FieldOfViewHorizontalFlip",vm:"1",version:"DICOM"},"(0018,7036)":{tag:"(0018,7036)",vr:"FL",name:"PixelDataAreaOriginRelativeToFOV",vm:"2",version:"DICOM"},"(0018,7038)":{tag:"(0018,7038)",vr:"FL",name:"PixelDataAreaRotationAngleRelativeToFOV",vm:"1",version:"DICOM"},"(0018,7040)":{tag:"(0018,7040)",vr:"LT",name:"GridAbsorbingMaterial",vm:"1",version:"DICOM"},"(0018,7041)":{tag:"(0018,7041)",vr:"LT",name:"GridSpacingMaterial",vm:"1",version:"DICOM"},"(0018,7042)":{tag:"(0018,7042)",vr:"DS",name:"GridThickness",vm:"1",version:"DICOM"},"(0018,7044)":{tag:"(0018,7044)",vr:"DS",name:"GridPitch",vm:"1",version:"DICOM"},"(0018,7046)":{tag:"(0018,7046)",vr:"IS",name:"GridAspectRatio",vm:"2",version:"DICOM"},"(0018,7048)":{tag:"(0018,7048)",vr:"DS",name:"GridPeriod",vm:"1",version:"DICOM"},"(0018,704C)":{tag:"(0018,704C)",vr:"DS",name:"GridFocalDistance",vm:"1",version:"DICOM"},"(0018,7050)":{tag:"(0018,7050)",vr:"CS",name:"FilterMaterial",vm:"1-n",version:"DICOM"},"(0018,7052)":{tag:"(0018,7052)",vr:"DS",name:"FilterThicknessMinimum",vm:"1-n",version:"DICOM"},"(0018,7054)":{tag:"(0018,7054)",vr:"DS",name:"FilterThicknessMaximum",vm:"1-n",version:"DICOM"},"(0018,7056)":{tag:"(0018,7056)",vr:"FL",name:"FilterBeamPathLengthMinimum",vm:"1-n",version:"DICOM"},"(0018,7058)":{tag:"(0018,7058)",vr:"FL",name:"FilterBeamPathLengthMaximum",vm:"1-n",version:"DICOM"},"(0018,7060)":{tag:"(0018,7060)",vr:"CS",name:"ExposureControlMode",vm:"1",version:"DICOM"},"(0018,7062)":{tag:"(0018,7062)",vr:"LT",name:"ExposureControlModeDescription",vm:"1",version:"DICOM"},"(0018,7064)":{tag:"(0018,7064)",vr:"CS",name:"ExposureStatus",vm:"1",version:"DICOM"},"(0018,7065)":{tag:"(0018,7065)",vr:"DS",name:"PhototimerSetting",vm:"1",version:"DICOM"},"(0018,8150)":{tag:"(0018,8150)",vr:"DS",name:"ExposureTimeInuS",vm:"1",version:"DICOM"},"(0018,8151)":{tag:"(0018,8151)",vr:"DS",name:"XRayTubeCurrentInuA",vm:"1",version:"DICOM"},"(0018,9004)":{tag:"(0018,9004)",vr:"CS",name:"ContentQualification",vm:"1",version:"DICOM"},"(0018,9005)":{tag:"(0018,9005)",vr:"SH",name:"PulseSequenceName",vm:"1",version:"DICOM"},"(0018,9006)":{tag:"(0018,9006)",vr:"SQ",name:"MRImagingModifierSequence",vm:"1",version:"DICOM"},"(0018,9008)":{tag:"(0018,9008)",vr:"CS",name:"EchoPulseSequence",vm:"1",version:"DICOM"},"(0018,9009)":{tag:"(0018,9009)",vr:"CS",name:"InversionRecovery",vm:"1",version:"DICOM"},"(0018,9010)":{tag:"(0018,9010)",vr:"CS",name:"FlowCompensation",vm:"1",version:"DICOM"},"(0018,9011)":{tag:"(0018,9011)",vr:"CS",name:"MultipleSpinEcho",vm:"1",version:"DICOM"},"(0018,9012)":{tag:"(0018,9012)",vr:"CS",name:"MultiPlanarExcitation",vm:"1",version:"DICOM"},"(0018,9014)":{tag:"(0018,9014)",vr:"CS",name:"PhaseContrast",vm:"1",version:"DICOM"},"(0018,9015)":{tag:"(0018,9015)",vr:"CS",name:"TimeOfFlightContrast",vm:"1",version:"DICOM"},"(0018,9016)":{tag:"(0018,9016)",vr:"CS",name:"Spoiling",vm:"1",version:"DICOM"},"(0018,9017)":{tag:"(0018,9017)",vr:"CS",name:"SteadyStatePulseSequence",vm:"1",version:"DICOM"},"(0018,9018)":{tag:"(0018,9018)",vr:"CS",name:"EchoPlanarPulseSequence",vm:"1",version:"DICOM"},"(0018,9019)":{tag:"(0018,9019)",vr:"FD",name:"TagAngleFirstAxis",vm:"1",version:"DICOM"},"(0018,9020)":{tag:"(0018,9020)",vr:"CS",name:"MagnetizationTransfer",vm:"1",version:"DICOM"},"(0018,9021)":{tag:"(0018,9021)",vr:"CS",name:"T2Preparation",vm:"1",version:"DICOM"},"(0018,9022)":{tag:"(0018,9022)",vr:"CS",name:"BloodSignalNulling",vm:"1",version:"DICOM"},"(0018,9024)":{tag:"(0018,9024)",vr:"CS",name:"SaturationRecovery",vm:"1",version:"DICOM"},"(0018,9025)":{tag:"(0018,9025)",vr:"CS",name:"SpectrallySelectedSuppression",vm:"1",version:"DICOM"},"(0018,9026)":{tag:"(0018,9026)",vr:"CS",name:"SpectrallySelectedExcitation",vm:"1",version:"DICOM"},"(0018,9027)":{tag:"(0018,9027)",vr:"CS",name:"SpatialPresaturation",vm:"1",version:"DICOM"},"(0018,9028)":{tag:"(0018,9028)",vr:"CS",name:"Tagging",vm:"1",version:"DICOM"},"(0018,9029)":{tag:"(0018,9029)",vr:"CS",name:"OversamplingPhase",vm:"1",version:"DICOM"},"(0018,9030)":{tag:"(0018,9030)",vr:"FD",name:"TagSpacingFirstDimension",vm:"1",version:"DICOM"},"(0018,9032)":{tag:"(0018,9032)",vr:"CS",name:"GeometryOfKSpaceTraversal",vm:"1",version:"DICOM"},"(0018,9033)":{tag:"(0018,9033)",vr:"CS",name:"SegmentedKSpaceTraversal",vm:"1",version:"DICOM"},"(0018,9034)":{tag:"(0018,9034)",vr:"CS",name:"RectilinearPhaseEncodeReordering",vm:"1",version:"DICOM"},"(0018,9035)":{tag:"(0018,9035)",vr:"FD",name:"TagThickness",vm:"1",version:"DICOM"},"(0018,9036)":{tag:"(0018,9036)",vr:"CS",name:"PartialFourierDirection",vm:"1",version:"DICOM"},"(0018,9037)":{tag:"(0018,9037)",vr:"CS",name:"CardiacSynchronizationTechnique",vm:"1",version:"DICOM"},"(0018,9041)":{tag:"(0018,9041)",vr:"LO",name:"ReceiveCoilManufacturerName",vm:"1",version:"DICOM"},"(0018,9042)":{tag:"(0018,9042)",vr:"SQ",name:"MRReceiveCoilSequence",vm:"1",version:"DICOM"},"(0018,9043)":{tag:"(0018,9043)",vr:"CS",name:"ReceiveCoilType",vm:"1",version:"DICOM"},"(0018,9044)":{tag:"(0018,9044)",vr:"CS",name:"QuadratureReceiveCoil",vm:"1",version:"DICOM"},"(0018,9045)":{tag:"(0018,9045)",vr:"SQ",name:"MultiCoilDefinitionSequence",vm:"1",version:"DICOM"},"(0018,9046)":{tag:"(0018,9046)",vr:"LO",name:"MultiCoilConfiguration",vm:"1",version:"DICOM"},"(0018,9047)":{tag:"(0018,9047)",vr:"SH",name:"MultiCoilElementName",vm:"1",version:"DICOM"},"(0018,9048)":{tag:"(0018,9048)",vr:"CS",name:"MultiCoilElementUsed",vm:"1",version:"DICOM"},"(0018,9049)":{tag:"(0018,9049)",vr:"SQ",name:"MRTransmitCoilSequence",vm:"1",version:"DICOM"},"(0018,9050)":{tag:"(0018,9050)",vr:"LO",name:"TransmitCoilManufacturerName",vm:"1",version:"DICOM"},"(0018,9051)":{tag:"(0018,9051)",vr:"CS",name:"TransmitCoilType",vm:"1",version:"DICOM"},"(0018,9052)":{tag:"(0018,9052)",vr:"FD",name:"SpectralWidth",vm:"1-2",version:"DICOM"},"(0018,9053)":{tag:"(0018,9053)",vr:"FD",name:"ChemicalShiftReference",vm:"1-2",version:"DICOM"},"(0018,9054)":{tag:"(0018,9054)",vr:"CS",name:"VolumeLocalizationTechnique",vm:"1",version:"DICOM"},"(0018,9058)":{tag:"(0018,9058)",vr:"US",name:"MRAcquisitionFrequencyEncodingSteps",vm:"1",version:"DICOM"},"(0018,9059)":{tag:"(0018,9059)",vr:"CS",name:"Decoupling",vm:"1",version:"DICOM"},"(0018,9060)":{tag:"(0018,9060)",vr:"CS",name:"DecoupledNucleus",vm:"1-2",version:"DICOM"},"(0018,9061)":{tag:"(0018,9061)",vr:"FD",name:"DecouplingFrequency",vm:"1-2",version:"DICOM"},"(0018,9062)":{tag:"(0018,9062)",vr:"CS",name:"DecouplingMethod",vm:"1",version:"DICOM"},"(0018,9063)":{tag:"(0018,9063)",vr:"FD",name:"DecouplingChemicalShiftReference",vm:"1-2",version:"DICOM"},"(0018,9064)":{tag:"(0018,9064)",vr:"CS",name:"KSpaceFiltering",vm:"1",version:"DICOM"},"(0018,9065)":{tag:"(0018,9065)",vr:"CS",name:"TimeDomainFiltering",vm:"1-2",version:"DICOM"},"(0018,9066)":{tag:"(0018,9066)",vr:"US",name:"NumberOfZeroFills",vm:"1-2",version:"DICOM"},"(0018,9067)":{tag:"(0018,9067)",vr:"CS",name:"BaselineCorrection",vm:"1",version:"DICOM"},"(0018,9069)":{tag:"(0018,9069)",vr:"FD",name:"ParallelReductionFactorInPlane",vm:"1",version:"DICOM"},"(0018,9070)":{tag:"(0018,9070)",vr:"FD",name:"CardiacRRIntervalSpecified",vm:"1",version:"DICOM"},"(0018,9073)":{tag:"(0018,9073)",vr:"FD",name:"AcquisitionDuration",vm:"1",version:"DICOM"},"(0018,9074)":{tag:"(0018,9074)",vr:"DT",name:"FrameAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9075)":{tag:"(0018,9075)",vr:"CS",name:"DiffusionDirectionality",vm:"1",version:"DICOM"},"(0018,9076)":{tag:"(0018,9076)",vr:"SQ",name:"DiffusionGradientDirectionSequence",vm:"1",version:"DICOM"},"(0018,9077)":{tag:"(0018,9077)",vr:"CS",name:"ParallelAcquisition",vm:"1",version:"DICOM"},"(0018,9078)":{tag:"(0018,9078)",vr:"CS",name:"ParallelAcquisitionTechnique",vm:"1",version:"DICOM"},"(0018,9079)":{tag:"(0018,9079)",vr:"FD",name:"InversionTimes",vm:"1-n",version:"DICOM"},"(0018,9080)":{tag:"(0018,9080)",vr:"ST",name:"MetaboliteMapDescription",vm:"1",version:"DICOM"},"(0018,9081)":{tag:"(0018,9081)",vr:"CS",name:"PartialFourier",vm:"1",version:"DICOM"},"(0018,9082)":{tag:"(0018,9082)",vr:"FD",name:"EffectiveEchoTime",vm:"1",version:"DICOM"},"(0018,9083)":{tag:"(0018,9083)",vr:"SQ",name:"MetaboliteMapCodeSequence",vm:"1",version:"DICOM"},"(0018,9084)":{tag:"(0018,9084)",vr:"SQ",name:"ChemicalShiftSequence",vm:"1",version:"DICOM"},"(0018,9085)":{tag:"(0018,9085)",vr:"CS",name:"CardiacSignalSource",vm:"1",version:"DICOM"},"(0018,9087)":{tag:"(0018,9087)",vr:"FD",name:"DiffusionBValue",vm:"1",version:"DICOM"},"(0018,9089)":{tag:"(0018,9089)",vr:"FD",name:"DiffusionGradientOrientation",vm:"3",version:"DICOM"},"(0018,9090)":{tag:"(0018,9090)",vr:"FD",name:"VelocityEncodingDirection",vm:"3",version:"DICOM"},"(0018,9091)":{tag:"(0018,9091)",vr:"FD",name:"VelocityEncodingMinimumValue",vm:"1",version:"DICOM"},"(0018,9092)":{tag:"(0018,9092)",vr:"SQ",name:"VelocityEncodingAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9093)":{tag:"(0018,9093)",vr:"US",name:"NumberOfKSpaceTrajectories",vm:"1",version:"DICOM"},"(0018,9094)":{tag:"(0018,9094)",vr:"CS",name:"CoverageOfKSpace",vm:"1",version:"DICOM"},"(0018,9095)":{tag:"(0018,9095)",vr:"UL",name:"SpectroscopyAcquisitionPhaseRows",vm:"1",version:"DICOM"},"(0018,9098)":{tag:"(0018,9098)",vr:"FD",name:"TransmitterFrequency",vm:"1-2",version:"DICOM"},"(0018,9100)":{tag:"(0018,9100)",vr:"CS",name:"ResonantNucleus",vm:"1-2",version:"DICOM"},"(0018,9101)":{tag:"(0018,9101)",vr:"CS",name:"FrequencyCorrection",vm:"1",version:"DICOM"},"(0018,9103)":{tag:"(0018,9103)",vr:"SQ",name:"MRSpectroscopyFOVGeometrySequence",vm:"1",version:"DICOM"},"(0018,9104)":{tag:"(0018,9104)",vr:"FD",name:"SlabThickness",vm:"1",version:"DICOM"},"(0018,9105)":{tag:"(0018,9105)",vr:"FD",name:"SlabOrientation",vm:"3",version:"DICOM"},"(0018,9106)":{tag:"(0018,9106)",vr:"FD",name:"MidSlabPosition",vm:"3",version:"DICOM"},"(0018,9107)":{tag:"(0018,9107)",vr:"SQ",name:"MRSpatialSaturationSequence",vm:"1",version:"DICOM"},"(0018,9112)":{tag:"(0018,9112)",vr:"SQ",name:"MRTimingAndRelatedParametersSequence",vm:"1",version:"DICOM"},"(0018,9114)":{tag:"(0018,9114)",vr:"SQ",name:"MREchoSequence",vm:"1",version:"DICOM"},"(0018,9115)":{tag:"(0018,9115)",vr:"SQ",name:"MRModifierSequence",vm:"1",version:"DICOM"},"(0018,9117)":{tag:"(0018,9117)",vr:"SQ",name:"MRDiffusionSequence",vm:"1",version:"DICOM"},"(0018,9118)":{tag:"(0018,9118)",vr:"SQ",name:"CardiacSynchronizationSequence",vm:"1",version:"DICOM"},"(0018,9119)":{tag:"(0018,9119)",vr:"SQ",name:"MRAveragesSequence",vm:"1",version:"DICOM"},"(0018,9125)":{tag:"(0018,9125)",vr:"SQ",name:"MRFOVGeometrySequence",vm:"1",version:"DICOM"},"(0018,9126)":{tag:"(0018,9126)",vr:"SQ",name:"VolumeLocalizationSequence",vm:"1",version:"DICOM"},"(0018,9127)":{tag:"(0018,9127)",vr:"UL",name:"SpectroscopyAcquisitionDataColumns",vm:"1",version:"DICOM"},"(0018,9147)":{tag:"(0018,9147)",vr:"CS",name:"DiffusionAnisotropyType",vm:"1",version:"DICOM"},"(0018,9151)":{tag:"(0018,9151)",vr:"DT",name:"FrameReferenceDateTime",vm:"1",version:"DICOM"},"(0018,9152)":{tag:"(0018,9152)",vr:"SQ",name:"MRMetaboliteMapSequence",vm:"1",version:"DICOM"},"(0018,9155)":{tag:"(0018,9155)",vr:"FD",name:"ParallelReductionFactorOutOfPlane",vm:"1",version:"DICOM"},"(0018,9159)":{tag:"(0018,9159)",vr:"UL",name:"SpectroscopyAcquisitionOutOfPlanePhaseSteps",vm:"1",version:"DICOM"},"(0018,9168)":{tag:"(0018,9168)",vr:"FD",name:"ParallelReductionFactorSecondInPlane",vm:"1",version:"DICOM"},"(0018,9169)":{tag:"(0018,9169)",vr:"CS",name:"CardiacBeatRejectionTechnique",vm:"1",version:"DICOM"},"(0018,9170)":{tag:"(0018,9170)",vr:"CS",name:"RespiratoryMotionCompensationTechnique",vm:"1",version:"DICOM"},"(0018,9171)":{tag:"(0018,9171)",vr:"CS",name:"RespiratorySignalSource",vm:"1",version:"DICOM"},"(0018,9172)":{tag:"(0018,9172)",vr:"CS",name:"BulkMotionCompensationTechnique",vm:"1",version:"DICOM"},"(0018,9173)":{tag:"(0018,9173)",vr:"CS",name:"BulkMotionSignalSource",vm:"1",version:"DICOM"},"(0018,9174)":{tag:"(0018,9174)",vr:"CS",name:"ApplicableSafetyStandardAgency",vm:"1",version:"DICOM"},"(0018,9175)":{tag:"(0018,9175)",vr:"LO",name:"ApplicableSafetyStandardDescription",vm:"1",version:"DICOM"},"(0018,9176)":{tag:"(0018,9176)",vr:"SQ",name:"OperatingModeSequence",vm:"1",version:"DICOM"},"(0018,9177)":{tag:"(0018,9177)",vr:"CS",name:"OperatingModeType",vm:"1",version:"DICOM"},"(0018,9178)":{tag:"(0018,9178)",vr:"CS",name:"OperatingMode",vm:"1",version:"DICOM"},"(0018,9179)":{tag:"(0018,9179)",vr:"CS",name:"SpecificAbsorptionRateDefinition",vm:"1",version:"DICOM"},"(0018,9180)":{tag:"(0018,9180)",vr:"CS",name:"GradientOutputType",vm:"1",version:"DICOM"},"(0018,9181)":{tag:"(0018,9181)",vr:"FD",name:"SpecificAbsorptionRateValue",vm:"1",version:"DICOM"},"(0018,9182)":{tag:"(0018,9182)",vr:"FD",name:"GradientOutput",vm:"1",version:"DICOM"},"(0018,9183)":{tag:"(0018,9183)",vr:"CS",name:"FlowCompensationDirection",vm:"1",version:"DICOM"},"(0018,9184)":{tag:"(0018,9184)",vr:"FD",name:"TaggingDelay",vm:"1",version:"DICOM"},"(0018,9185)":{tag:"(0018,9185)",vr:"ST",name:"RespiratoryMotionCompensationTechniqueDescription",vm:"1",version:"DICOM"},"(0018,9186)":{tag:"(0018,9186)",vr:"SH",name:"RespiratorySignalSourceID",vm:"1",version:"DICOM"},"(0018,9197)":{tag:"(0018,9197)",vr:"SQ",name:"MRVelocityEncodingSequence",vm:"1",version:"DICOM"},"(0018,9198)":{tag:"(0018,9198)",vr:"CS",name:"FirstOrderPhaseCorrection",vm:"1",version:"DICOM"},"(0018,9199)":{tag:"(0018,9199)",vr:"CS",name:"WaterReferencedPhaseCorrection",vm:"1",version:"DICOM"},"(0018,9200)":{tag:"(0018,9200)",vr:"CS",name:"MRSpectroscopyAcquisitionType",vm:"1",version:"DICOM"},"(0018,9214)":{tag:"(0018,9214)",vr:"CS",name:"RespiratoryCyclePosition",vm:"1",version:"DICOM"},"(0018,9217)":{tag:"(0018,9217)",vr:"FD",name:"VelocityEncodingMaximumValue",vm:"1",version:"DICOM"},"(0018,9218)":{tag:"(0018,9218)",vr:"FD",name:"TagSpacingSecondDimension",vm:"1",version:"DICOM"},"(0018,9219)":{tag:"(0018,9219)",vr:"SS",name:"TagAngleSecondAxis",vm:"1",version:"DICOM"},"(0018,9220)":{tag:"(0018,9220)",vr:"FD",name:"FrameAcquisitionDuration",vm:"1",version:"DICOM"},"(0018,9226)":{tag:"(0018,9226)",vr:"SQ",name:"MRImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9227)":{tag:"(0018,9227)",vr:"SQ",name:"MRSpectroscopyFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9231)":{tag:"(0018,9231)",vr:"US",name:"MRAcquisitionPhaseEncodingStepsInPlane",vm:"1",version:"DICOM"},"(0018,9232)":{tag:"(0018,9232)",vr:"US",name:"MRAcquisitionPhaseEncodingStepsOutOfPlane",vm:"1",version:"DICOM"},"(0018,9234)":{tag:"(0018,9234)",vr:"UL",name:"SpectroscopyAcquisitionPhaseColumns",vm:"1",version:"DICOM"},"(0018,9236)":{tag:"(0018,9236)",vr:"CS",name:"CardiacCyclePosition",vm:"1",version:"DICOM"},"(0018,9239)":{tag:"(0018,9239)",vr:"SQ",name:"SpecificAbsorptionRateSequence",vm:"1",version:"DICOM"},"(0018,9240)":{tag:"(0018,9240)",vr:"US",name:"RFEchoTrainLength",vm:"1",version:"DICOM"},"(0018,9241)":{tag:"(0018,9241)",vr:"US",name:"GradientEchoTrainLength",vm:"1",version:"DICOM"},"(0018,9250)":{tag:"(0018,9250)",vr:"CS",name:"ArterialSpinLabelingContrast",vm:"1",version:"DICOM"},"(0018,9251)":{tag:"(0018,9251)",vr:"SQ",name:"MRArterialSpinLabelingSequence",vm:"1",version:"DICOM"},"(0018,9252)":{tag:"(0018,9252)",vr:"LO",name:"ASLTechniqueDescription",vm:"1",version:"DICOM"},"(0018,9253)":{tag:"(0018,9253)",vr:"US",name:"ASLSlabNumber",vm:"1",version:"DICOM"},"(0018,9254)":{tag:"(0018,9254)",vr:"FD",name:"ASLSlabThickness",vm:"1",version:"DICOM"},"(0018,9255)":{tag:"(0018,9255)",vr:"FD",name:"ASLSlabOrientation",vm:"3",version:"DICOM"},"(0018,9256)":{tag:"(0018,9256)",vr:"FD",name:"ASLMidSlabPosition",vm:"3",version:"DICOM"},"(0018,9257)":{tag:"(0018,9257)",vr:"CS",name:"ASLContext",vm:"1",version:"DICOM"},"(0018,9258)":{tag:"(0018,9258)",vr:"UL",name:"ASLPulseTrainDuration",vm:"1",version:"DICOM"},"(0018,9259)":{tag:"(0018,9259)",vr:"CS",name:"ASLCrusherFlag",vm:"1",version:"DICOM"},"(0018,925A)":{tag:"(0018,925A)",vr:"FD",name:"ASLCrusherFlowLimit",vm:"1",version:"DICOM"},"(0018,925B)":{tag:"(0018,925B)",vr:"LO",name:"ASLCrusherDescription",vm:"1",version:"DICOM"},"(0018,925C)":{tag:"(0018,925C)",vr:"CS",name:"ASLBolusCutoffFlag",vm:"1",version:"DICOM"},"(0018,925D)":{tag:"(0018,925D)",vr:"SQ",name:"ASLBolusCutoffTimingSequence",vm:"1",version:"DICOM"},"(0018,925E)":{tag:"(0018,925E)",vr:"LO",name:"ASLBolusCutoffTechnique",vm:"1",version:"DICOM"},"(0018,925F)":{tag:"(0018,925F)",vr:"UL",name:"ASLBolusCutoffDelayTime",vm:"1",version:"DICOM"},"(0018,9260)":{tag:"(0018,9260)",vr:"SQ",name:"ASLSlabSequence",vm:"1",version:"DICOM"},"(0018,9295)":{tag:"(0018,9295)",vr:"FD",name:"ChemicalShiftMinimumIntegrationLimitInppm",vm:"1",version:"DICOM"},"(0018,9296)":{tag:"(0018,9296)",vr:"FD",name:"ChemicalShiftMaximumIntegrationLimitInppm",vm:"1",version:"DICOM"},"(0018,9297)":{tag:"(0018,9297)",vr:"CS",name:"WaterReferenceAcquisition",vm:"1",version:"DICOM"},"(0018,9298)":{tag:"(0018,9298)",vr:"IS",name:"EchoPeakPosition",vm:"1",version:"DICOM"},"(0018,9301)":{tag:"(0018,9301)",vr:"SQ",name:"CTAcquisitionTypeSequence",vm:"1",version:"DICOM"},"(0018,9302)":{tag:"(0018,9302)",vr:"CS",name:"AcquisitionType",vm:"1",version:"DICOM"},"(0018,9303)":{tag:"(0018,9303)",vr:"FD",name:"TubeAngle",vm:"1",version:"DICOM"},"(0018,9304)":{tag:"(0018,9304)",vr:"SQ",name:"CTAcquisitionDetailsSequence",vm:"1",version:"DICOM"},"(0018,9305)":{tag:"(0018,9305)",vr:"FD",name:"RevolutionTime",vm:"1",version:"DICOM"},"(0018,9306)":{tag:"(0018,9306)",vr:"FD",name:"SingleCollimationWidth",vm:"1",version:"DICOM"},"(0018,9307)":{tag:"(0018,9307)",vr:"FD",name:"TotalCollimationWidth",vm:"1",version:"DICOM"},"(0018,9308)":{tag:"(0018,9308)",vr:"SQ",name:"CTTableDynamicsSequence",vm:"1",version:"DICOM"},"(0018,9309)":{tag:"(0018,9309)",vr:"FD",name:"TableSpeed",vm:"1",version:"DICOM"},"(0018,9310)":{tag:"(0018,9310)",vr:"FD",name:"TableFeedPerRotation",vm:"1",version:"DICOM"},"(0018,9311)":{tag:"(0018,9311)",vr:"FD",name:"SpiralPitchFactor",vm:"1",version:"DICOM"},"(0018,9312)":{tag:"(0018,9312)",vr:"SQ",name:"CTGeometrySequence",vm:"1",version:"DICOM"},"(0018,9313)":{tag:"(0018,9313)",vr:"FD",name:"DataCollectionCenterPatient",vm:"3",version:"DICOM"},"(0018,9314)":{tag:"(0018,9314)",vr:"SQ",name:"CTReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9315)":{tag:"(0018,9315)",vr:"CS",name:"ReconstructionAlgorithm",vm:"1",version:"DICOM"},"(0018,9316)":{tag:"(0018,9316)",vr:"CS",name:"ConvolutionKernelGroup",vm:"1",version:"DICOM"},"(0018,9317)":{tag:"(0018,9317)",vr:"FD",name:"ReconstructionFieldOfView",vm:"2",version:"DICOM"},"(0018,9318)":{tag:"(0018,9318)",vr:"FD",name:"ReconstructionTargetCenterPatient",vm:"3",version:"DICOM"},"(0018,9319)":{tag:"(0018,9319)",vr:"FD",name:"ReconstructionAngle",vm:"1",version:"DICOM"},"(0018,9320)":{tag:"(0018,9320)",vr:"SH",name:"ImageFilter",vm:"1",version:"DICOM"},"(0018,9321)":{tag:"(0018,9321)",vr:"SQ",name:"CTExposureSequence",vm:"1",version:"DICOM"},"(0018,9322)":{tag:"(0018,9322)",vr:"FD",name:"ReconstructionPixelSpacing",vm:"2",version:"DICOM"},"(0018,9323)":{tag:"(0018,9323)",vr:"CS",name:"ExposureModulationType",vm:"1",version:"DICOM"},"(0018,9324)":{tag:"(0018,9324)",vr:"FD",name:"EstimatedDoseSaving",vm:"1",version:"DICOM"},"(0018,9325)":{tag:"(0018,9325)",vr:"SQ",name:"CTXRayDetailsSequence",vm:"1",version:"DICOM"},"(0018,9326)":{tag:"(0018,9326)",vr:"SQ",name:"CTPositionSequence",vm:"1",version:"DICOM"},"(0018,9327)":{tag:"(0018,9327)",vr:"FD",name:"TablePosition",vm:"1",version:"DICOM"},"(0018,9328)":{tag:"(0018,9328)",vr:"FD",name:"ExposureTimeInms",vm:"1",version:"DICOM"},"(0018,9329)":{tag:"(0018,9329)",vr:"SQ",name:"CTImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9330)":{tag:"(0018,9330)",vr:"FD",name:"XRayTubeCurrentInmA",vm:"1",version:"DICOM"},"(0018,9332)":{tag:"(0018,9332)",vr:"FD",name:"ExposureInmAs",vm:"1",version:"DICOM"},"(0018,9333)":{tag:"(0018,9333)",vr:"CS",name:"ConstantVolumeFlag",vm:"1",version:"DICOM"},"(0018,9334)":{tag:"(0018,9334)",vr:"CS",name:"FluoroscopyFlag",vm:"1",version:"DICOM"},"(0018,9335)":{tag:"(0018,9335)",vr:"FD",name:"DistanceSourceToDataCollectionCenter",vm:"1",version:"DICOM"},"(0018,9337)":{tag:"(0018,9337)",vr:"US",name:"ContrastBolusAgentNumber",vm:"1",version:"DICOM"},"(0018,9338)":{tag:"(0018,9338)",vr:"SQ",name:"ContrastBolusIngredientCodeSequence",vm:"1",version:"DICOM"},"(0018,9340)":{tag:"(0018,9340)",vr:"SQ",name:"ContrastAdministrationProfileSequence",vm:"1",version:"DICOM"},"(0018,9341)":{tag:"(0018,9341)",vr:"SQ",name:"ContrastBolusUsageSequence",vm:"1",version:"DICOM"},"(0018,9342)":{tag:"(0018,9342)",vr:"CS",name:"ContrastBolusAgentAdministered",vm:"1",version:"DICOM"},"(0018,9343)":{tag:"(0018,9343)",vr:"CS",name:"ContrastBolusAgentDetected",vm:"1",version:"DICOM"},"(0018,9344)":{tag:"(0018,9344)",vr:"CS",name:"ContrastBolusAgentPhase",vm:"1",version:"DICOM"},"(0018,9345)":{tag:"(0018,9345)",vr:"FD",name:"CTDIvol",vm:"1",version:"DICOM"},"(0018,9346)":{tag:"(0018,9346)",vr:"SQ",name:"CTDIPhantomTypeCodeSequence",vm:"1",version:"DICOM"},"(0018,9351)":{tag:"(0018,9351)",vr:"FL",name:"CalciumScoringMassFactorPatient",vm:"1",version:"DICOM"},"(0018,9352)":{tag:"(0018,9352)",vr:"FL",name:"CalciumScoringMassFactorDevice",vm:"3",version:"DICOM"},"(0018,9353)":{tag:"(0018,9353)",vr:"FL",name:"EnergyWeightingFactor",vm:"1",version:"DICOM"},"(0018,9360)":{tag:"(0018,9360)",vr:"SQ",name:"CTAdditionalXRaySourceSequence",vm:"1",version:"DICOM"},"(0018,9361)":{tag:"(0018,9361)",vr:"CS",name:"MultienergyCTAcquisition",vm:"1",version:"DICOM"},"(0018,9362)":{tag:"(0018,9362)",vr:"SQ",name:"MultienergyCTAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9363)":{tag:"(0018,9363)",vr:"SQ",name:"MultienergyCTProcessingSequence",vm:"1",version:"DICOM"},"(0018,9364)":{tag:"(0018,9364)",vr:"SQ",name:"MultienergyCTCharacteristicsSequence",vm:"1",version:"DICOM"},"(0018,9365)":{tag:"(0018,9365)",vr:"SQ",name:"MultienergyCTXRaySourceSequence",vm:"1",version:"DICOM"},"(0018,9366)":{tag:"(0018,9366)",vr:"US",name:"XRaySourceIndex",vm:"1",version:"DICOM"},"(0018,9367)":{tag:"(0018,9367)",vr:"UC",name:"XRaySourceID",vm:"1",version:"DICOM"},"(0018,9368)":{tag:"(0018,9368)",vr:"CS",name:"MultienergySourceTechnique",vm:"1",version:"DICOM"},"(0018,9369)":{tag:"(0018,9369)",vr:"DT",name:"SourceStartDateTime",vm:"1",version:"DICOM"},"(0018,936A)":{tag:"(0018,936A)",vr:"DT",name:"SourceEndDateTime",vm:"1",version:"DICOM"},"(0018,936B)":{tag:"(0018,936B)",vr:"US",name:"SwitchingPhaseNumber",vm:"1",version:"DICOM"},"(0018,936C)":{tag:"(0018,936C)",vr:"DS",name:"SwitchingPhaseNominalDuration",vm:"1",version:"DICOM"},"(0018,936D)":{tag:"(0018,936D)",vr:"DS",name:"SwitchingPhaseTransitionDuration",vm:"1",version:"DICOM"},"(0018,936E)":{tag:"(0018,936E)",vr:"DS",name:"EffectiveBinEnergy",vm:"1",version:"DICOM"},"(0018,936F)":{tag:"(0018,936F)",vr:"SQ",name:"MultienergyCTXRayDetectorSequence",vm:"1",version:"DICOM"},"(0018,9370)":{tag:"(0018,9370)",vr:"US",name:"XRayDetectorIndex",vm:"1",version:"DICOM"},"(0018,9371)":{tag:"(0018,9371)",vr:"UC",name:"XRayDetectorID",vm:"1",version:"DICOM"},"(0018,9372)":{tag:"(0018,9372)",vr:"CS",name:"MultienergyDetectorType",vm:"1",version:"DICOM"},"(0018,9373)":{tag:"(0018,9373)",vr:"ST",name:"XRayDetectorLabel",vm:"1",version:"DICOM"},"(0018,9374)":{tag:"(0018,9374)",vr:"DS",name:"NominalMaxEnergy",vm:"1",version:"DICOM"},"(0018,9375)":{tag:"(0018,9375)",vr:"DS",name:"NominalMinEnergy",vm:"1",version:"DICOM"},"(0018,9376)":{tag:"(0018,9376)",vr:"US",name:"ReferencedXRayDetectorIndex",vm:"1-n",version:"DICOM"},"(0018,9377)":{tag:"(0018,9377)",vr:"US",name:"ReferencedXRaySourceIndex",vm:"1-n",version:"DICOM"},"(0018,9378)":{tag:"(0018,9378)",vr:"US",name:"ReferencedPathIndex",vm:"1-n",version:"DICOM"},"(0018,9379)":{tag:"(0018,9379)",vr:"SQ",name:"MultienergyCTPathSequence",vm:"1",version:"DICOM"},"(0018,937A)":{tag:"(0018,937A)",vr:"US",name:"MultienergyCTPathIndex",vm:"1",version:"DICOM"},"(0018,937B)":{tag:"(0018,937B)",vr:"UT",name:"MultienergyAcquisitionDescription",vm:"1",version:"DICOM"},"(0018,937C)":{tag:"(0018,937C)",vr:"FD",name:"MonoenergeticEnergyEquivalent",vm:"1",version:"DICOM"},"(0018,937D)":{tag:"(0018,937D)",vr:"SQ",name:"MaterialCodeSequence",vm:"1",version:"DICOM"},"(0018,937E)":{tag:"(0018,937E)",vr:"CS",name:"DecompositionMethod",vm:"1",version:"DICOM"},"(0018,937F)":{tag:"(0018,937F)",vr:"UT",name:"DecompositionDescription",vm:"1",version:"DICOM"},"(0018,9380)":{tag:"(0018,9380)",vr:"SQ",name:"DecompositionAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0018,9381)":{tag:"(0018,9381)",vr:"SQ",name:"DecompositionMaterialSequence",vm:"1",version:"DICOM"},"(0018,9382)":{tag:"(0018,9382)",vr:"SQ",name:"MaterialAttenuationSequence",vm:"1",version:"DICOM"},"(0018,9383)":{tag:"(0018,9383)",vr:"DS",name:"PhotonEnergy",vm:"1",version:"DICOM"},"(0018,9384)":{tag:"(0018,9384)",vr:"DS",name:"XRayMassAttenuationCoefficient",vm:"1",version:"DICOM"},"(0018,9401)":{tag:"(0018,9401)",vr:"SQ",name:"ProjectionPixelCalibrationSequence",vm:"1",version:"DICOM"},"(0018,9402)":{tag:"(0018,9402)",vr:"FL",name:"DistanceSourceToIsocenter",vm:"1",version:"DICOM"},"(0018,9403)":{tag:"(0018,9403)",vr:"FL",name:"DistanceObjectToTableTop",vm:"1",version:"DICOM"},"(0018,9404)":{tag:"(0018,9404)",vr:"FL",name:"ObjectPixelSpacingInCenterOfBeam",vm:"2",version:"DICOM"},"(0018,9405)":{tag:"(0018,9405)",vr:"SQ",name:"PositionerPositionSequence",vm:"1",version:"DICOM"},"(0018,9406)":{tag:"(0018,9406)",vr:"SQ",name:"TablePositionSequence",vm:"1",version:"DICOM"},"(0018,9407)":{tag:"(0018,9407)",vr:"SQ",name:"CollimatorShapeSequence",vm:"1",version:"DICOM"},"(0018,9410)":{tag:"(0018,9410)",vr:"CS",name:"PlanesInAcquisition",vm:"1",version:"DICOM"},"(0018,9412)":{tag:"(0018,9412)",vr:"SQ",name:"XAXRFFrameCharacteristicsSequence",vm:"1",version:"DICOM"},"(0018,9417)":{tag:"(0018,9417)",vr:"SQ",name:"FrameAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9420)":{tag:"(0018,9420)",vr:"CS",name:"XRayReceptorType",vm:"1",version:"DICOM"},"(0018,9423)":{tag:"(0018,9423)",vr:"LO",name:"AcquisitionProtocolName",vm:"1",version:"DICOM"},"(0018,9424)":{tag:"(0018,9424)",vr:"LT",name:"AcquisitionProtocolDescription",vm:"1",version:"DICOM"},"(0018,9425)":{tag:"(0018,9425)",vr:"CS",name:"ContrastBolusIngredientOpaque",vm:"1",version:"DICOM"},"(0018,9426)":{tag:"(0018,9426)",vr:"FL",name:"DistanceReceptorPlaneToDetectorHousing",vm:"1",version:"DICOM"},"(0018,9427)":{tag:"(0018,9427)",vr:"CS",name:"IntensifierActiveShape",vm:"1",version:"DICOM"},"(0018,9428)":{tag:"(0018,9428)",vr:"FL",name:"IntensifierActiveDimensions",vm:"1-2",version:"DICOM"},"(0018,9429)":{tag:"(0018,9429)",vr:"FL",name:"PhysicalDetectorSize",vm:"2",version:"DICOM"},"(0018,9430)":{tag:"(0018,9430)",vr:"FL",name:"PositionOfIsocenterProjection",vm:"2",version:"DICOM"},"(0018,9432)":{tag:"(0018,9432)",vr:"SQ",name:"FieldOfViewSequence",vm:"1",version:"DICOM"},"(0018,9433)":{tag:"(0018,9433)",vr:"LO",name:"FieldOfViewDescription",vm:"1",version:"DICOM"},"(0018,9434)":{tag:"(0018,9434)",vr:"SQ",name:"ExposureControlSensingRegionsSequence",vm:"1",version:"DICOM"},"(0018,9435)":{tag:"(0018,9435)",vr:"CS",name:"ExposureControlSensingRegionShape",vm:"1",version:"DICOM"},"(0018,9436)":{tag:"(0018,9436)",vr:"SS",name:"ExposureControlSensingRegionLeftVerticalEdge",vm:"1",version:"DICOM"},"(0018,9437)":{tag:"(0018,9437)",vr:"SS",name:"ExposureControlSensingRegionRightVerticalEdge",vm:"1",version:"DICOM"},"(0018,9438)":{tag:"(0018,9438)",vr:"SS",name:"ExposureControlSensingRegionUpperHorizontalEdge",vm:"1",version:"DICOM"},"(0018,9439)":{tag:"(0018,9439)",vr:"SS",name:"ExposureControlSensingRegionLowerHorizontalEdge",vm:"1",version:"DICOM"},"(0018,9440)":{tag:"(0018,9440)",vr:"SS",name:"CenterOfCircularExposureControlSensingRegion",vm:"2",version:"DICOM"},"(0018,9441)":{tag:"(0018,9441)",vr:"US",name:"RadiusOfCircularExposureControlSensingRegion",vm:"1",version:"DICOM"},"(0018,9442)":{tag:"(0018,9442)",vr:"SS",name:"VerticesOfThePolygonalExposureControlSensingRegion",vm:"2-n",version:"DICOM"},"(0018,9447)":{tag:"(0018,9447)",vr:"FL",name:"ColumnAngulationPatient",vm:"1",version:"DICOM"},"(0018,9449)":{tag:"(0018,9449)",vr:"FL",name:"BeamAngle",vm:"1",version:"DICOM"},"(0018,9451)":{tag:"(0018,9451)",vr:"SQ",name:"FrameDetectorParametersSequence",vm:"1",version:"DICOM"},"(0018,9452)":{tag:"(0018,9452)",vr:"FL",name:"CalculatedAnatomyThickness",vm:"1",version:"DICOM"},"(0018,9455)":{tag:"(0018,9455)",vr:"SQ",name:"CalibrationSequence",vm:"1",version:"DICOM"},"(0018,9456)":{tag:"(0018,9456)",vr:"SQ",name:"ObjectThicknessSequence",vm:"1",version:"DICOM"},"(0018,9457)":{tag:"(0018,9457)",vr:"CS",name:"PlaneIdentification",vm:"1",version:"DICOM"},"(0018,9461)":{tag:"(0018,9461)",vr:"FL",name:"FieldOfViewDimensionsInFloat",vm:"1-2",version:"DICOM"},"(0018,9462)":{tag:"(0018,9462)",vr:"SQ",name:"IsocenterReferenceSystemSequence",vm:"1",version:"DICOM"},"(0018,9463)":{tag:"(0018,9463)",vr:"FL",name:"PositionerIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9464)":{tag:"(0018,9464)",vr:"FL",name:"PositionerIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9465)":{tag:"(0018,9465)",vr:"FL",name:"PositionerIsocenterDetectorRotationAngle",vm:"1",version:"DICOM"},"(0018,9466)":{tag:"(0018,9466)",vr:"FL",name:"TableXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9467)":{tag:"(0018,9467)",vr:"FL",name:"TableYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9468)":{tag:"(0018,9468)",vr:"FL",name:"TableZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9469)":{tag:"(0018,9469)",vr:"FL",name:"TableHorizontalRotationAngle",vm:"1",version:"DICOM"},"(0018,9470)":{tag:"(0018,9470)",vr:"FL",name:"TableHeadTiltAngle",vm:"1",version:"DICOM"},"(0018,9471)":{tag:"(0018,9471)",vr:"FL",name:"TableCradleTiltAngle",vm:"1",version:"DICOM"},"(0018,9472)":{tag:"(0018,9472)",vr:"SQ",name:"FrameDisplayShutterSequence",vm:"1",version:"DICOM"},"(0018,9473)":{tag:"(0018,9473)",vr:"FL",name:"AcquiredImageAreaDoseProduct",vm:"1",version:"DICOM"},"(0018,9474)":{tag:"(0018,9474)",vr:"CS",name:"CArmPositionerTabletopRelationship",vm:"1",version:"DICOM"},"(0018,9476)":{tag:"(0018,9476)",vr:"SQ",name:"XRayGeometrySequence",vm:"1",version:"DICOM"},"(0018,9477)":{tag:"(0018,9477)",vr:"SQ",name:"IrradiationEventIdentificationSequence",vm:"1",version:"DICOM"},"(0018,9504)":{tag:"(0018,9504)",vr:"SQ",name:"XRay3DFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9506)":{tag:"(0018,9506)",vr:"SQ",name:"ContributingSourcesSequence",vm:"1",version:"DICOM"},"(0018,9507)":{tag:"(0018,9507)",vr:"SQ",name:"XRay3DAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9508)":{tag:"(0018,9508)",vr:"FL",name:"PrimaryPositionerScanArc",vm:"1",version:"DICOM"},"(0018,9509)":{tag:"(0018,9509)",vr:"FL",name:"SecondaryPositionerScanArc",vm:"1",version:"DICOM"},"(0018,9510)":{tag:"(0018,9510)",vr:"FL",name:"PrimaryPositionerScanStartAngle",vm:"1",version:"DICOM"},"(0018,9511)":{tag:"(0018,9511)",vr:"FL",name:"SecondaryPositionerScanStartAngle",vm:"1",version:"DICOM"},"(0018,9514)":{tag:"(0018,9514)",vr:"FL",name:"PrimaryPositionerIncrement",vm:"1",version:"DICOM"},"(0018,9515)":{tag:"(0018,9515)",vr:"FL",name:"SecondaryPositionerIncrement",vm:"1",version:"DICOM"},"(0018,9516)":{tag:"(0018,9516)",vr:"DT",name:"StartAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9517)":{tag:"(0018,9517)",vr:"DT",name:"EndAcquisitionDateTime",vm:"1",version:"DICOM"},"(0018,9518)":{tag:"(0018,9518)",vr:"SS",name:"PrimaryPositionerIncrementSign",vm:"1",version:"DICOM"},"(0018,9519)":{tag:"(0018,9519)",vr:"SS",name:"SecondaryPositionerIncrementSign",vm:"1",version:"DICOM"},"(0018,9524)":{tag:"(0018,9524)",vr:"LO",name:"ApplicationName",vm:"1",version:"DICOM"},"(0018,9525)":{tag:"(0018,9525)",vr:"LO",name:"ApplicationVersion",vm:"1",version:"DICOM"},"(0018,9526)":{tag:"(0018,9526)",vr:"LO",name:"ApplicationManufacturer",vm:"1",version:"DICOM"},"(0018,9527)":{tag:"(0018,9527)",vr:"CS",name:"AlgorithmType",vm:"1",version:"DICOM"},"(0018,9528)":{tag:"(0018,9528)",vr:"LO",name:"AlgorithmDescription",vm:"1",version:"DICOM"},"(0018,9530)":{tag:"(0018,9530)",vr:"SQ",name:"XRay3DReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9531)":{tag:"(0018,9531)",vr:"LO",name:"ReconstructionDescription",vm:"1",version:"DICOM"},"(0018,9538)":{tag:"(0018,9538)",vr:"SQ",name:"PerProjectionAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9541)":{tag:"(0018,9541)",vr:"SQ",name:"DetectorPositionSequence",vm:"1",version:"DICOM"},"(0018,9542)":{tag:"(0018,9542)",vr:"SQ",name:"XRayAcquisitionDoseSequence",vm:"1",version:"DICOM"},"(0018,9543)":{tag:"(0018,9543)",vr:"FD",name:"XRaySourceIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9544)":{tag:"(0018,9544)",vr:"FD",name:"XRaySourceIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9545)":{tag:"(0018,9545)",vr:"FD",name:"BreastSupportIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9546)":{tag:"(0018,9546)",vr:"FD",name:"BreastSupportIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9547)":{tag:"(0018,9547)",vr:"FD",name:"BreastSupportXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9548)":{tag:"(0018,9548)",vr:"FD",name:"BreastSupportYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9549)":{tag:"(0018,9549)",vr:"FD",name:"BreastSupportZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9550)":{tag:"(0018,9550)",vr:"FD",name:"DetectorIsocenterPrimaryAngle",vm:"1",version:"DICOM"},"(0018,9551)":{tag:"(0018,9551)",vr:"FD",name:"DetectorIsocenterSecondaryAngle",vm:"1",version:"DICOM"},"(0018,9552)":{tag:"(0018,9552)",vr:"FD",name:"DetectorXPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9553)":{tag:"(0018,9553)",vr:"FD",name:"DetectorYPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9554)":{tag:"(0018,9554)",vr:"FD",name:"DetectorZPositionToIsocenter",vm:"1",version:"DICOM"},"(0018,9555)":{tag:"(0018,9555)",vr:"SQ",name:"XRayGridSequence",vm:"1",version:"DICOM"},"(0018,9556)":{tag:"(0018,9556)",vr:"SQ",name:"XRayFilterSequence",vm:"1",version:"DICOM"},"(0018,9557)":{tag:"(0018,9557)",vr:"FD",name:"DetectorActiveAreaTLHCPosition",vm:"3",version:"DICOM"},"(0018,9558)":{tag:"(0018,9558)",vr:"FD",name:"DetectorActiveAreaOrientation",vm:"6",version:"DICOM"},"(0018,9559)":{tag:"(0018,9559)",vr:"CS",name:"PositionerPrimaryAngleDirection",vm:"1",version:"DICOM"},"(0018,9601)":{tag:"(0018,9601)",vr:"SQ",name:"DiffusionBMatrixSequence",vm:"1",version:"DICOM"},"(0018,9602)":{tag:"(0018,9602)",vr:"FD",name:"DiffusionBValueXX",vm:"1",version:"DICOM"},"(0018,9603)":{tag:"(0018,9603)",vr:"FD",name:"DiffusionBValueXY",vm:"1",version:"DICOM"},"(0018,9604)":{tag:"(0018,9604)",vr:"FD",name:"DiffusionBValueXZ",vm:"1",version:"DICOM"},"(0018,9605)":{tag:"(0018,9605)",vr:"FD",name:"DiffusionBValueYY",vm:"1",version:"DICOM"},"(0018,9606)":{tag:"(0018,9606)",vr:"FD",name:"DiffusionBValueYZ",vm:"1",version:"DICOM"},"(0018,9607)":{tag:"(0018,9607)",vr:"FD",name:"DiffusionBValueZZ",vm:"1",version:"DICOM"},"(0018,9621)":{tag:"(0018,9621)",vr:"SQ",name:"FunctionalMRSequence",vm:"1",version:"DICOM"},"(0018,9622)":{tag:"(0018,9622)",vr:"CS",name:"FunctionalSettlingPhaseFramesPresent",vm:"1",version:"DICOM"},"(0018,9623)":{tag:"(0018,9623)",vr:"DT",name:"FunctionalSyncPulse",vm:"1",version:"DICOM"},"(0018,9624)":{tag:"(0018,9624)",vr:"CS",name:"SettlingPhaseFrame",vm:"1",version:"DICOM"},"(0018,9701)":{tag:"(0018,9701)",vr:"DT",name:"DecayCorrectionDateTime",vm:"1",version:"DICOM"},"(0018,9715)":{tag:"(0018,9715)",vr:"FD",name:"StartDensityThreshold",vm:"1",version:"DICOM"},"(0018,9716)":{tag:"(0018,9716)",vr:"FD",name:"StartRelativeDensityDifferenceThreshold",vm:"1",version:"DICOM"},"(0018,9717)":{tag:"(0018,9717)",vr:"FD",name:"StartCardiacTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9718)":{tag:"(0018,9718)",vr:"FD",name:"StartRespiratoryTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9719)":{tag:"(0018,9719)",vr:"FD",name:"TerminationCountsThreshold",vm:"1",version:"DICOM"},"(0018,9720)":{tag:"(0018,9720)",vr:"FD",name:"TerminationDensityThreshold",vm:"1",version:"DICOM"},"(0018,9721)":{tag:"(0018,9721)",vr:"FD",name:"TerminationRelativeDensityThreshold",vm:"1",version:"DICOM"},"(0018,9722)":{tag:"(0018,9722)",vr:"FD",name:"TerminationTimeThreshold",vm:"1",version:"DICOM"},"(0018,9723)":{tag:"(0018,9723)",vr:"FD",name:"TerminationCardiacTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9724)":{tag:"(0018,9724)",vr:"FD",name:"TerminationRespiratoryTriggerCountThreshold",vm:"1",version:"DICOM"},"(0018,9725)":{tag:"(0018,9725)",vr:"CS",name:"DetectorGeometry",vm:"1",version:"DICOM"},"(0018,9726)":{tag:"(0018,9726)",vr:"FD",name:"TransverseDetectorSeparation",vm:"1",version:"DICOM"},"(0018,9727)":{tag:"(0018,9727)",vr:"FD",name:"AxialDetectorDimension",vm:"1",version:"DICOM"},"(0018,9729)":{tag:"(0018,9729)",vr:"US",name:"RadiopharmaceuticalAgentNumber",vm:"1",version:"DICOM"},"(0018,9732)":{tag:"(0018,9732)",vr:"SQ",name:"PETFrameAcquisitionSequence",vm:"1",version:"DICOM"},"(0018,9733)":{tag:"(0018,9733)",vr:"SQ",name:"PETDetectorMotionDetailsSequence",vm:"1",version:"DICOM"},"(0018,9734)":{tag:"(0018,9734)",vr:"SQ",name:"PETTableDynamicsSequence",vm:"1",version:"DICOM"},"(0018,9735)":{tag:"(0018,9735)",vr:"SQ",name:"PETPositionSequence",vm:"1",version:"DICOM"},"(0018,9736)":{tag:"(0018,9736)",vr:"SQ",name:"PETFrameCorrectionFactorsSequence",vm:"1",version:"DICOM"},"(0018,9737)":{tag:"(0018,9737)",vr:"SQ",name:"RadiopharmaceuticalUsageSequence",vm:"1",version:"DICOM"},"(0018,9738)":{tag:"(0018,9738)",vr:"CS",name:"AttenuationCorrectionSource",vm:"1",version:"DICOM"},"(0018,9739)":{tag:"(0018,9739)",vr:"US",name:"NumberOfIterations",vm:"1",version:"DICOM"},"(0018,9740)":{tag:"(0018,9740)",vr:"US",name:"NumberOfSubsets",vm:"1",version:"DICOM"},"(0018,9749)":{tag:"(0018,9749)",vr:"SQ",name:"PETReconstructionSequence",vm:"1",version:"DICOM"},"(0018,9751)":{tag:"(0018,9751)",vr:"SQ",name:"PETFrameTypeSequence",vm:"1",version:"DICOM"},"(0018,9755)":{tag:"(0018,9755)",vr:"CS",name:"TimeOfFlightInformationUsed",vm:"1",version:"DICOM"},"(0018,9756)":{tag:"(0018,9756)",vr:"CS",name:"ReconstructionType",vm:"1",version:"DICOM"},"(0018,9758)":{tag:"(0018,9758)",vr:"CS",name:"DecayCorrected",vm:"1",version:"DICOM"},"(0018,9759)":{tag:"(0018,9759)",vr:"CS",name:"AttenuationCorrected",vm:"1",version:"DICOM"},"(0018,9760)":{tag:"(0018,9760)",vr:"CS",name:"ScatterCorrected",vm:"1",version:"DICOM"},"(0018,9761)":{tag:"(0018,9761)",vr:"CS",name:"DeadTimeCorrected",vm:"1",version:"DICOM"},"(0018,9762)":{tag:"(0018,9762)",vr:"CS",name:"GantryMotionCorrected",vm:"1",version:"DICOM"},"(0018,9763)":{tag:"(0018,9763)",vr:"CS",name:"PatientMotionCorrected",vm:"1",version:"DICOM"},"(0018,9764)":{tag:"(0018,9764)",vr:"CS",name:"CountLossNormalizationCorrected",vm:"1",version:"DICOM"},"(0018,9765)":{tag:"(0018,9765)",vr:"CS",name:"RandomsCorrected",vm:"1",version:"DICOM"},"(0018,9766)":{tag:"(0018,9766)",vr:"CS",name:"NonUniformRadialSamplingCorrected",vm:"1",version:"DICOM"},"(0018,9767)":{tag:"(0018,9767)",vr:"CS",name:"SensitivityCalibrated",vm:"1",version:"DICOM"},"(0018,9768)":{tag:"(0018,9768)",vr:"CS",name:"DetectorNormalizationCorrection",vm:"1",version:"DICOM"},"(0018,9769)":{tag:"(0018,9769)",vr:"CS",name:"IterativeReconstructionMethod",vm:"1",version:"DICOM"},"(0018,9770)":{tag:"(0018,9770)",vr:"CS",name:"AttenuationCorrectionTemporalRelationship",vm:"1",version:"DICOM"},"(0018,9771)":{tag:"(0018,9771)",vr:"SQ",name:"PatientPhysiologicalStateSequence",vm:"1",version:"DICOM"},"(0018,9772)":{tag:"(0018,9772)",vr:"SQ",name:"PatientPhysiologicalStateCodeSequence",vm:"1",version:"DICOM"},"(0018,9801)":{tag:"(0018,9801)",vr:"FD",name:"DepthsOfFocus",vm:"1-n",version:"DICOM"},"(0018,9803)":{tag:"(0018,9803)",vr:"SQ",name:"ExcludedIntervalsSequence",vm:"1",version:"DICOM"},"(0018,9804)":{tag:"(0018,9804)",vr:"DT",name:"ExclusionStartDateTime",vm:"1",version:"DICOM"},"(0018,9805)":{tag:"(0018,9805)",vr:"FD",name:"ExclusionDuration",vm:"1",version:"DICOM"},"(0018,9806)":{tag:"(0018,9806)",vr:"SQ",name:"USImageDescriptionSequence",vm:"1",version:"DICOM"},"(0018,9807)":{tag:"(0018,9807)",vr:"SQ",name:"ImageDataTypeSequence",vm:"1",version:"DICOM"},"(0018,9808)":{tag:"(0018,9808)",vr:"CS",name:"DataType",vm:"1",version:"DICOM"},"(0018,9809)":{tag:"(0018,9809)",vr:"SQ",name:"TransducerScanPatternCodeSequence",vm:"1",version:"DICOM"},"(0018,980B)":{tag:"(0018,980B)",vr:"CS",name:"AliasedDataType",vm:"1",version:"DICOM"},"(0018,980C)":{tag:"(0018,980C)",vr:"CS",name:"PositionMeasuringDeviceUsed",vm:"1",version:"DICOM"},"(0018,980D)":{tag:"(0018,980D)",vr:"SQ",name:"TransducerGeometryCodeSequence",vm:"1",version:"DICOM"},"(0018,980E)":{tag:"(0018,980E)",vr:"SQ",name:"TransducerBeamSteeringCodeSequence",vm:"1",version:"DICOM"},"(0018,980F)":{tag:"(0018,980F)",vr:"SQ",name:"TransducerApplicationCodeSequence",vm:"1",version:"DICOM"},"(0018,9810)":{tag:"(0018,9810)",vr:"xs",name:"ZeroVelocityPixelValue",vm:"1",version:"DICOM"},"(0018,9900)":{tag:"(0018,9900)",vr:"LO",name:"ReferenceLocationLabel",vm:"1",version:"DICOM"},"(0018,9901)":{tag:"(0018,9901)",vr:"UT",name:"ReferenceLocationDescription",vm:"1",version:"DICOM"},"(0018,9902)":{tag:"(0018,9902)",vr:"SQ",name:"ReferenceBasisCodeSequence",vm:"1",version:"DICOM"},"(0018,9903)":{tag:"(0018,9903)",vr:"SQ",name:"ReferenceGeometryCodeSequence",vm:"1",version:"DICOM"},"(0018,9904)":{tag:"(0018,9904)",vr:"DS",name:"OffsetDistance",vm:"1",version:"DICOM"},"(0018,9905)":{tag:"(0018,9905)",vr:"CS",name:"OffsetDirection",vm:"1",version:"DICOM"},"(0018,9906)":{tag:"(0018,9906)",vr:"SQ",name:"PotentialScheduledProtocolCodeSequence",vm:"1",version:"DICOM"},"(0018,9907)":{tag:"(0018,9907)",vr:"SQ",name:"PotentialRequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0018,9908)":{tag:"(0018,9908)",vr:"UC",name:"PotentialReasonsForProcedure",vm:"1-n",version:"DICOM"},"(0018,9909)":{tag:"(0018,9909)",vr:"SQ",name:"PotentialReasonsForProcedureCodeSequence",vm:"1",version:"DICOM"},"(0018,990A)":{tag:"(0018,990A)",vr:"UC",name:"PotentialDiagnosticTasks",vm:"1-n",version:"DICOM"},"(0018,990B)":{tag:"(0018,990B)",vr:"SQ",name:"ContraindicationsCodeSequence",vm:"1",version:"DICOM"},"(0018,990C)":{tag:"(0018,990C)",vr:"SQ",name:"ReferencedDefinedProtocolSequence",vm:"1",version:"DICOM"},"(0018,990D)":{tag:"(0018,990D)",vr:"SQ",name:"ReferencedPerformedProtocolSequence",vm:"1",version:"DICOM"},"(0018,990E)":{tag:"(0018,990E)",vr:"SQ",name:"PredecessorProtocolSequence",vm:"1",version:"DICOM"},"(0018,990F)":{tag:"(0018,990F)",vr:"UT",name:"ProtocolPlanningInformation",vm:"1",version:"DICOM"},"(0018,9910)":{tag:"(0018,9910)",vr:"UT",name:"ProtocolDesignRationale",vm:"1",version:"DICOM"},"(0018,9911)":{tag:"(0018,9911)",vr:"SQ",name:"PatientSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9912)":{tag:"(0018,9912)",vr:"SQ",name:"ModelSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9913)":{tag:"(0018,9913)",vr:"SQ",name:"ParametersSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9914)":{tag:"(0018,9914)",vr:"SQ",name:"InstructionSequence",vm:"1",version:"DICOM"},"(0018,9915)":{tag:"(0018,9915)",vr:"US",name:"InstructionIndex",vm:"1",version:"DICOM"},"(0018,9916)":{tag:"(0018,9916)",vr:"LO",name:"InstructionText",vm:"1",version:"DICOM"},"(0018,9917)":{tag:"(0018,9917)",vr:"UT",name:"InstructionDescription",vm:"1",version:"DICOM"},"(0018,9918)":{tag:"(0018,9918)",vr:"CS",name:"InstructionPerformedFlag",vm:"1",version:"DICOM"},"(0018,9919)":{tag:"(0018,9919)",vr:"DT",name:"InstructionPerformedDateTime",vm:"1",version:"DICOM"},"(0018,991A)":{tag:"(0018,991A)",vr:"UT",name:"InstructionPerformanceComment",vm:"1",version:"DICOM"},"(0018,991B)":{tag:"(0018,991B)",vr:"SQ",name:"PatientPositioningInstructionSequence",vm:"1",version:"DICOM"},"(0018,991C)":{tag:"(0018,991C)",vr:"SQ",name:"PositioningMethodCodeSequence",vm:"1",version:"DICOM"},"(0018,991D)":{tag:"(0018,991D)",vr:"SQ",name:"PositioningLandmarkSequence",vm:"1",version:"DICOM"},"(0018,991E)":{tag:"(0018,991E)",vr:"UI",name:"TargetFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0018,991F)":{tag:"(0018,991F)",vr:"SQ",name:"AcquisitionProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9920)":{tag:"(0018,9920)",vr:"SQ",name:"AcquisitionProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9921)":{tag:"(0018,9921)",vr:"US",name:"ProtocolElementNumber",vm:"1",version:"DICOM"},"(0018,9922)":{tag:"(0018,9922)",vr:"LO",name:"ProtocolElementName",vm:"1",version:"DICOM"},"(0018,9923)":{tag:"(0018,9923)",vr:"UT",name:"ProtocolElementCharacteristicsSummary",vm:"1",version:"DICOM"},"(0018,9924)":{tag:"(0018,9924)",vr:"UT",name:"ProtocolElementPurpose",vm:"1",version:"DICOM"},"(0018,9930)":{tag:"(0018,9930)",vr:"CS",name:"AcquisitionMotion",vm:"1",version:"DICOM"},"(0018,9931)":{tag:"(0018,9931)",vr:"SQ",name:"AcquisitionStartLocationSequence",vm:"1",version:"DICOM"},"(0018,9932)":{tag:"(0018,9932)",vr:"SQ",name:"AcquisitionEndLocationSequence",vm:"1",version:"DICOM"},"(0018,9933)":{tag:"(0018,9933)",vr:"SQ",name:"ReconstructionProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9934)":{tag:"(0018,9934)",vr:"SQ",name:"ReconstructionProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9935)":{tag:"(0018,9935)",vr:"SQ",name:"StorageProtocolElementSpecificationSequence",vm:"1",version:"DICOM"},"(0018,9936)":{tag:"(0018,9936)",vr:"SQ",name:"StorageProtocolElementSequence",vm:"1",version:"DICOM"},"(0018,9937)":{tag:"(0018,9937)",vr:"LO",name:"RequestedSeriesDescription",vm:"1",version:"DICOM"},"(0018,9938)":{tag:"(0018,9938)",vr:"US",name:"SourceAcquisitionProtocolElementNumber",vm:"1-n",version:"DICOM"},"(0018,9939)":{tag:"(0018,9939)",vr:"US",name:"SourceAcquisitionBeamNumber",vm:"1-n",version:"DICOM"},"(0018,993A)":{tag:"(0018,993A)",vr:"US",name:"SourceReconstructionProtocolElementNumber",vm:"1-n",version:"DICOM"},"(0018,993B)":{tag:"(0018,993B)",vr:"SQ",name:"ReconstructionStartLocationSequence",vm:"1",version:"DICOM"},"(0018,993C)":{tag:"(0018,993C)",vr:"SQ",name:"ReconstructionEndLocationSequence",vm:"1",version:"DICOM"},"(0018,993D)":{tag:"(0018,993D)",vr:"SQ",name:"ReconstructionAlgorithmSequence",vm:"1",version:"DICOM"},"(0018,993E)":{tag:"(0018,993E)",vr:"SQ",name:"ReconstructionTargetCenterLocationSequence",vm:"1",version:"DICOM"},"(0018,9941)":{tag:"(0018,9941)",vr:"UT",name:"ImageFilterDescription",vm:"1",version:"DICOM"},"(0018,9942)":{tag:"(0018,9942)",vr:"FD",name:"CTDIvolNotificationTrigger",vm:"1",version:"DICOM"},"(0018,9943)":{tag:"(0018,9943)",vr:"FD",name:"DLPNotificationTrigger",vm:"1",version:"DICOM"},"(0018,9944)":{tag:"(0018,9944)",vr:"CS",name:"AutoKVPSelectionType",vm:"1",version:"DICOM"},"(0018,9945)":{tag:"(0018,9945)",vr:"FD",name:"AutoKVPUpperBound",vm:"1",version:"DICOM"},"(0018,9946)":{tag:"(0018,9946)",vr:"FD",name:"AutoKVPLowerBound",vm:"1",version:"DICOM"},"(0018,9947)":{tag:"(0018,9947)",vr:"CS",name:"ProtocolDefinedPatientPosition",vm:"1",version:"DICOM"},"(0018,A001)":{tag:"(0018,A001)",vr:"SQ",name:"ContributingEquipmentSequence",vm:"1",version:"DICOM"},"(0018,A002)":{tag:"(0018,A002)",vr:"DT",name:"ContributionDateTime",vm:"1",version:"DICOM"},"(0018,A003)":{tag:"(0018,A003)",vr:"ST",name:"ContributionDescription",vm:"1",version:"DICOM"},"(0020,000D)":{tag:"(0020,000D)",vr:"UI",name:"StudyInstanceUID",vm:"1",version:"DICOM"},"(0020,000E)":{tag:"(0020,000E)",vr:"UI",name:"SeriesInstanceUID",vm:"1",version:"DICOM"},"(0020,0010)":{tag:"(0020,0010)",vr:"SH",name:"StudyID",vm:"1",version:"DICOM"},"(0020,0011)":{tag:"(0020,0011)",vr:"IS",name:"SeriesNumber",vm:"1",version:"DICOM"},"(0020,0012)":{tag:"(0020,0012)",vr:"IS",name:"AcquisitionNumber",vm:"1",version:"DICOM"},"(0020,0013)":{tag:"(0020,0013)",vr:"IS",name:"InstanceNumber",vm:"1",version:"DICOM"},"(0020,0019)":{tag:"(0020,0019)",vr:"IS",name:"ItemNumber",vm:"1",version:"DICOM"},"(0020,0020)":{tag:"(0020,0020)",vr:"CS",name:"PatientOrientation",vm:"2",version:"DICOM"},"(0020,0032)":{tag:"(0020,0032)",vr:"DS",name:"ImagePositionPatient",vm:"3",version:"DICOM"},"(0020,0037)":{tag:"(0020,0037)",vr:"DS",name:"ImageOrientationPatient",vm:"6",version:"DICOM"},"(0020,0052)":{tag:"(0020,0052)",vr:"UI",name:"FrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,0060)":{tag:"(0020,0060)",vr:"CS",name:"Laterality",vm:"1",version:"DICOM"},"(0020,0062)":{tag:"(0020,0062)",vr:"CS",name:"ImageLaterality",vm:"1",version:"DICOM"},"(0020,0100)":{tag:"(0020,0100)",vr:"IS",name:"TemporalPositionIdentifier",vm:"1",version:"DICOM"},"(0020,0105)":{tag:"(0020,0105)",vr:"IS",name:"NumberOfTemporalPositions",vm:"1",version:"DICOM"},"(0020,0110)":{tag:"(0020,0110)",vr:"DS",name:"TemporalResolution",vm:"1",version:"DICOM"},"(0020,0200)":{tag:"(0020,0200)",vr:"UI",name:"SynchronizationFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,0242)":{tag:"(0020,0242)",vr:"UI",name:"SOPInstanceUIDOfConcatenationSource",vm:"1",version:"DICOM"},"(0020,1002)":{tag:"(0020,1002)",vr:"IS",name:"ImagesInAcquisition",vm:"1",version:"DICOM"},"(0020,103F)":{tag:"(0020,103F)",vr:"LO",name:"TargetPositionReferenceIndicator",vm:"1",version:"DICOM"},"(0020,1040)":{tag:"(0020,1040)",vr:"LO",name:"PositionReferenceIndicator",vm:"1",version:"DICOM"},"(0020,1041)":{tag:"(0020,1041)",vr:"DS",name:"SliceLocation",vm:"1",version:"DICOM"},"(0020,1200)":{tag:"(0020,1200)",vr:"IS",name:"NumberOfPatientRelatedStudies",vm:"1",version:"DICOM"},"(0020,1202)":{tag:"(0020,1202)",vr:"IS",name:"NumberOfPatientRelatedSeries",vm:"1",version:"DICOM"},"(0020,1204)":{tag:"(0020,1204)",vr:"IS",name:"NumberOfPatientRelatedInstances",vm:"1",version:"DICOM"},"(0020,1206)":{tag:"(0020,1206)",vr:"IS",name:"NumberOfStudyRelatedSeries",vm:"1",version:"DICOM"},"(0020,1208)":{tag:"(0020,1208)",vr:"IS",name:"NumberOfStudyRelatedInstances",vm:"1",version:"DICOM"},"(0020,1209)":{tag:"(0020,1209)",vr:"IS",name:"NumberOfSeriesRelatedInstances",vm:"1",version:"DICOM"},"(0020,4000)":{tag:"(0020,4000)",vr:"LT",name:"ImageComments",vm:"1",version:"DICOM"},"(0020,9056)":{tag:"(0020,9056)",vr:"SH",name:"StackID",vm:"1",version:"DICOM"},"(0020,9057)":{tag:"(0020,9057)",vr:"UL",name:"InStackPositionNumber",vm:"1",version:"DICOM"},"(0020,9071)":{tag:"(0020,9071)",vr:"SQ",name:"FrameAnatomySequence",vm:"1",version:"DICOM"},"(0020,9072)":{tag:"(0020,9072)",vr:"CS",name:"FrameLaterality",vm:"1",version:"DICOM"},"(0020,9111)":{tag:"(0020,9111)",vr:"SQ",name:"FrameContentSequence",vm:"1",version:"DICOM"},"(0020,9113)":{tag:"(0020,9113)",vr:"SQ",name:"PlanePositionSequence",vm:"1",version:"DICOM"},"(0020,9116)":{tag:"(0020,9116)",vr:"SQ",name:"PlaneOrientationSequence",vm:"1",version:"DICOM"},"(0020,9128)":{tag:"(0020,9128)",vr:"UL",name:"TemporalPositionIndex",vm:"1",version:"DICOM"},"(0020,9153)":{tag:"(0020,9153)",vr:"FD",name:"NominalCardiacTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9154)":{tag:"(0020,9154)",vr:"FL",name:"NominalCardiacTriggerTimePriorToRPeak",vm:"1",version:"DICOM"},"(0020,9155)":{tag:"(0020,9155)",vr:"FL",name:"ActualCardiacTriggerTimePriorToRPeak",vm:"1",version:"DICOM"},"(0020,9156)":{tag:"(0020,9156)",vr:"US",name:"FrameAcquisitionNumber",vm:"1",version:"DICOM"},"(0020,9157)":{tag:"(0020,9157)",vr:"UL",name:"DimensionIndexValues",vm:"1-n",version:"DICOM"},"(0020,9158)":{tag:"(0020,9158)",vr:"LT",name:"FrameComments",vm:"1",version:"DICOM"},"(0020,9161)":{tag:"(0020,9161)",vr:"UI",name:"ConcatenationUID",vm:"1",version:"DICOM"},"(0020,9162)":{tag:"(0020,9162)",vr:"US",name:"InConcatenationNumber",vm:"1",version:"DICOM"},"(0020,9163)":{tag:"(0020,9163)",vr:"US",name:"InConcatenationTotalNumber",vm:"1",version:"DICOM"},"(0020,9164)":{tag:"(0020,9164)",vr:"UI",name:"DimensionOrganizationUID",vm:"1",version:"DICOM"},"(0020,9165)":{tag:"(0020,9165)",vr:"AT",name:"DimensionIndexPointer",vm:"1",version:"DICOM"},"(0020,9167)":{tag:"(0020,9167)",vr:"AT",name:"FunctionalGroupPointer",vm:"1",version:"DICOM"},"(0020,9170)":{tag:"(0020,9170)",vr:"SQ",name:"UnassignedSharedConvertedAttributesSequence",vm:"1",version:"DICOM"},"(0020,9171)":{tag:"(0020,9171)",vr:"SQ",name:"UnassignedPerFrameConvertedAttributesSequence",vm:"1",version:"DICOM"},"(0020,9172)":{tag:"(0020,9172)",vr:"SQ",name:"ConversionSourceAttributesSequence",vm:"1",version:"DICOM"},"(0020,9213)":{tag:"(0020,9213)",vr:"LO",name:"DimensionIndexPrivateCreator",vm:"1",version:"DICOM"},"(0020,9221)":{tag:"(0020,9221)",vr:"SQ",name:"DimensionOrganizationSequence",vm:"1",version:"DICOM"},"(0020,9222)":{tag:"(0020,9222)",vr:"SQ",name:"DimensionIndexSequence",vm:"1",version:"DICOM"},"(0020,9228)":{tag:"(0020,9228)",vr:"UL",name:"ConcatenationFrameOffsetNumber",vm:"1",version:"DICOM"},"(0020,9238)":{tag:"(0020,9238)",vr:"LO",name:"FunctionalGroupPrivateCreator",vm:"1",version:"DICOM"},"(0020,9241)":{tag:"(0020,9241)",vr:"FL",name:"NominalPercentageOfCardiacPhase",vm:"1",version:"DICOM"},"(0020,9245)":{tag:"(0020,9245)",vr:"FL",name:"NominalPercentageOfRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9246)":{tag:"(0020,9246)",vr:"FL",name:"StartingRespiratoryAmplitude",vm:"1",version:"DICOM"},"(0020,9247)":{tag:"(0020,9247)",vr:"CS",name:"StartingRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9248)":{tag:"(0020,9248)",vr:"FL",name:"EndingRespiratoryAmplitude",vm:"1",version:"DICOM"},"(0020,9249)":{tag:"(0020,9249)",vr:"CS",name:"EndingRespiratoryPhase",vm:"1",version:"DICOM"},"(0020,9250)":{tag:"(0020,9250)",vr:"CS",name:"RespiratoryTriggerType",vm:"1",version:"DICOM"},"(0020,9251)":{tag:"(0020,9251)",vr:"FD",name:"RRIntervalTimeNominal",vm:"1",version:"DICOM"},"(0020,9252)":{tag:"(0020,9252)",vr:"FD",name:"ActualCardiacTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9253)":{tag:"(0020,9253)",vr:"SQ",name:"RespiratorySynchronizationSequence",vm:"1",version:"DICOM"},"(0020,9254)":{tag:"(0020,9254)",vr:"FD",name:"RespiratoryIntervalTime",vm:"1",version:"DICOM"},"(0020,9255)":{tag:"(0020,9255)",vr:"FD",name:"NominalRespiratoryTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9256)":{tag:"(0020,9256)",vr:"FD",name:"RespiratoryTriggerDelayThreshold",vm:"1",version:"DICOM"},"(0020,9257)":{tag:"(0020,9257)",vr:"FD",name:"ActualRespiratoryTriggerDelayTime",vm:"1",version:"DICOM"},"(0020,9301)":{tag:"(0020,9301)",vr:"FD",name:"ImagePositionVolume",vm:"3",version:"DICOM"},"(0020,9302)":{tag:"(0020,9302)",vr:"FD",name:"ImageOrientationVolume",vm:"6",version:"DICOM"},"(0020,9307)":{tag:"(0020,9307)",vr:"CS",name:"UltrasoundAcquisitionGeometry",vm:"1",version:"DICOM"},"(0020,9308)":{tag:"(0020,9308)",vr:"FD",name:"ApexPosition",vm:"3",version:"DICOM"},"(0020,9309)":{tag:"(0020,9309)",vr:"FD",name:"VolumeToTransducerMappingMatrix",vm:"16",version:"DICOM"},"(0020,930A)":{tag:"(0020,930A)",vr:"FD",name:"VolumeToTableMappingMatrix",vm:"16",version:"DICOM"},"(0020,930B)":{tag:"(0020,930B)",vr:"CS",name:"VolumeToTransducerRelationship",vm:"1",version:"DICOM"},"(0020,930C)":{tag:"(0020,930C)",vr:"CS",name:"PatientFrameOfReferenceSource",vm:"1",version:"DICOM"},"(0020,930D)":{tag:"(0020,930D)",vr:"FD",name:"TemporalPositionTimeOffset",vm:"1",version:"DICOM"},"(0020,930E)":{tag:"(0020,930E)",vr:"SQ",name:"PlanePositionVolumeSequence",vm:"1",version:"DICOM"},"(0020,930F)":{tag:"(0020,930F)",vr:"SQ",name:"PlaneOrientationVolumeSequence",vm:"1",version:"DICOM"},"(0020,9310)":{tag:"(0020,9310)",vr:"SQ",name:"TemporalPositionSequence",vm:"1",version:"DICOM"},"(0020,9311)":{tag:"(0020,9311)",vr:"CS",name:"DimensionOrganizationType",vm:"1",version:"DICOM"},"(0020,9312)":{tag:"(0020,9312)",vr:"UI",name:"VolumeFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,9313)":{tag:"(0020,9313)",vr:"UI",name:"TableFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0020,9421)":{tag:"(0020,9421)",vr:"LO",name:"DimensionDescriptionLabel",vm:"1",version:"DICOM"},"(0020,9450)":{tag:"(0020,9450)",vr:"SQ",name:"PatientOrientationInFrameSequence",vm:"1",version:"DICOM"},"(0020,9453)":{tag:"(0020,9453)",vr:"LO",name:"FrameLabel",vm:"1",version:"DICOM"},"(0020,9518)":{tag:"(0020,9518)",vr:"US",name:"AcquisitionIndex",vm:"1-n",version:"DICOM"},"(0020,9529)":{tag:"(0020,9529)",vr:"SQ",name:"ContributingSOPInstancesReferenceSequence",vm:"1",version:"DICOM"},"(0020,9536)":{tag:"(0020,9536)",vr:"US",name:"ReconstructionIndex",vm:"1",version:"DICOM"},"(0022,0001)":{tag:"(0022,0001)",vr:"US",name:"LightPathFilterPassThroughWavelength",vm:"1",version:"DICOM"},"(0022,0002)":{tag:"(0022,0002)",vr:"US",name:"LightPathFilterPassBand",vm:"2",version:"DICOM"},"(0022,0003)":{tag:"(0022,0003)",vr:"US",name:"ImagePathFilterPassThroughWavelength",vm:"1",version:"DICOM"},"(0022,0004)":{tag:"(0022,0004)",vr:"US",name:"ImagePathFilterPassBand",vm:"2",version:"DICOM"},"(0022,0005)":{tag:"(0022,0005)",vr:"CS",name:"PatientEyeMovementCommanded",vm:"1",version:"DICOM"},"(0022,0006)":{tag:"(0022,0006)",vr:"SQ",name:"PatientEyeMovementCommandCodeSequence",vm:"1",version:"DICOM"},"(0022,0007)":{tag:"(0022,0007)",vr:"FL",name:"SphericalLensPower",vm:"1",version:"DICOM"},"(0022,0008)":{tag:"(0022,0008)",vr:"FL",name:"CylinderLensPower",vm:"1",version:"DICOM"},"(0022,0009)":{tag:"(0022,0009)",vr:"FL",name:"CylinderAxis",vm:"1",version:"DICOM"},"(0022,000A)":{tag:"(0022,000A)",vr:"FL",name:"EmmetropicMagnification",vm:"1",version:"DICOM"},"(0022,000B)":{tag:"(0022,000B)",vr:"FL",name:"IntraOcularPressure",vm:"1",version:"DICOM"},"(0022,000C)":{tag:"(0022,000C)",vr:"FL",name:"HorizontalFieldOfView",vm:"1",version:"DICOM"},"(0022,000D)":{tag:"(0022,000D)",vr:"CS",name:"PupilDilated",vm:"1",version:"DICOM"},"(0022,000E)":{tag:"(0022,000E)",vr:"FL",name:"DegreeOfDilation",vm:"1",version:"DICOM"},"(0022,0010)":{tag:"(0022,0010)",vr:"FL",name:"StereoBaselineAngle",vm:"1",version:"DICOM"},"(0022,0011)":{tag:"(0022,0011)",vr:"FL",name:"StereoBaselineDisplacement",vm:"1",version:"DICOM"},"(0022,0012)":{tag:"(0022,0012)",vr:"FL",name:"StereoHorizontalPixelOffset",vm:"1",version:"DICOM"},"(0022,0013)":{tag:"(0022,0013)",vr:"FL",name:"StereoVerticalPixelOffset",vm:"1",version:"DICOM"},"(0022,0014)":{tag:"(0022,0014)",vr:"FL",name:"StereoRotation",vm:"1",version:"DICOM"},"(0022,0015)":{tag:"(0022,0015)",vr:"SQ",name:"AcquisitionDeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,0016)":{tag:"(0022,0016)",vr:"SQ",name:"IlluminationTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,0017)":{tag:"(0022,0017)",vr:"SQ",name:"LightPathFilterTypeStackCodeSequence",vm:"1",version:"DICOM"},"(0022,0018)":{tag:"(0022,0018)",vr:"SQ",name:"ImagePathFilterTypeStackCodeSequence",vm:"1",version:"DICOM"},"(0022,0019)":{tag:"(0022,0019)",vr:"SQ",name:"LensesCodeSequence",vm:"1",version:"DICOM"},"(0022,001A)":{tag:"(0022,001A)",vr:"SQ",name:"ChannelDescriptionCodeSequence",vm:"1",version:"DICOM"},"(0022,001B)":{tag:"(0022,001B)",vr:"SQ",name:"RefractiveStateSequence",vm:"1",version:"DICOM"},"(0022,001C)":{tag:"(0022,001C)",vr:"SQ",name:"MydriaticAgentCodeSequence",vm:"1",version:"DICOM"},"(0022,001D)":{tag:"(0022,001D)",vr:"SQ",name:"RelativeImagePositionCodeSequence",vm:"1",version:"DICOM"},"(0022,001E)":{tag:"(0022,001E)",vr:"FL",name:"CameraAngleOfView",vm:"1",version:"DICOM"},"(0022,0020)":{tag:"(0022,0020)",vr:"SQ",name:"StereoPairsSequence",vm:"1",version:"DICOM"},"(0022,0021)":{tag:"(0022,0021)",vr:"SQ",name:"LeftImageSequence",vm:"1",version:"DICOM"},"(0022,0022)":{tag:"(0022,0022)",vr:"SQ",name:"RightImageSequence",vm:"1",version:"DICOM"},"(0022,0028)":{tag:"(0022,0028)",vr:"CS",name:"StereoPairsPresent",vm:"1",version:"DICOM"},"(0022,0030)":{tag:"(0022,0030)",vr:"FL",name:"AxialLengthOfTheEye",vm:"1",version:"DICOM"},"(0022,0031)":{tag:"(0022,0031)",vr:"SQ",name:"OphthalmicFrameLocationSequence",vm:"1",version:"DICOM"},"(0022,0032)":{tag:"(0022,0032)",vr:"FL",name:"ReferenceCoordinates",vm:"2-2n",version:"DICOM"},"(0022,0035)":{tag:"(0022,0035)",vr:"FL",name:"DepthSpatialResolution",vm:"1",version:"DICOM"},"(0022,0036)":{tag:"(0022,0036)",vr:"FL",name:"MaximumDepthDistortion",vm:"1",version:"DICOM"},"(0022,0037)":{tag:"(0022,0037)",vr:"FL",name:"AlongScanSpatialResolution",vm:"1",version:"DICOM"},"(0022,0038)":{tag:"(0022,0038)",vr:"FL",name:"MaximumAlongScanDistortion",vm:"1",version:"DICOM"},"(0022,0039)":{tag:"(0022,0039)",vr:"CS",name:"OphthalmicImageOrientation",vm:"1",version:"DICOM"},"(0022,0041)":{tag:"(0022,0041)",vr:"FL",name:"DepthOfTransverseImage",vm:"1",version:"DICOM"},"(0022,0042)":{tag:"(0022,0042)",vr:"SQ",name:"MydriaticAgentConcentrationUnitsSequence",vm:"1",version:"DICOM"},"(0022,0048)":{tag:"(0022,0048)",vr:"FL",name:"AcrossScanSpatialResolution",vm:"1",version:"DICOM"},"(0022,0049)":{tag:"(0022,0049)",vr:"FL",name:"MaximumAcrossScanDistortion",vm:"1",version:"DICOM"},"(0022,004E)":{tag:"(0022,004E)",vr:"DS",name:"MydriaticAgentConcentration",vm:"1",version:"DICOM"},"(0022,0055)":{tag:"(0022,0055)",vr:"FL",name:"IlluminationWaveLength",vm:"1",version:"DICOM"},"(0022,0056)":{tag:"(0022,0056)",vr:"FL",name:"IlluminationPower",vm:"1",version:"DICOM"},"(0022,0057)":{tag:"(0022,0057)",vr:"FL",name:"IlluminationBandwidth",vm:"1",version:"DICOM"},"(0022,0058)":{tag:"(0022,0058)",vr:"SQ",name:"MydriaticAgentSequence",vm:"1",version:"DICOM"},"(0022,1007)":{tag:"(0022,1007)",vr:"SQ",name:"OphthalmicAxialMeasurementsRightEyeSequence",vm:"1",version:"DICOM"},"(0022,1008)":{tag:"(0022,1008)",vr:"SQ",name:"OphthalmicAxialMeasurementsLeftEyeSequence",vm:"1",version:"DICOM"},"(0022,1009)":{tag:"(0022,1009)",vr:"CS",name:"OphthalmicAxialMeasurementsDeviceType",vm:"1",version:"DICOM"},"(0022,1010)":{tag:"(0022,1010)",vr:"CS",name:"OphthalmicAxialLengthMeasurementsType",vm:"1",version:"DICOM"},"(0022,1012)":{tag:"(0022,1012)",vr:"SQ",name:"OphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1019)":{tag:"(0022,1019)",vr:"FL",name:"OphthalmicAxialLength",vm:"1",version:"DICOM"},"(0022,1024)":{tag:"(0022,1024)",vr:"SQ",name:"LensStatusCodeSequence",vm:"1",version:"DICOM"},"(0022,1025)":{tag:"(0022,1025)",vr:"SQ",name:"VitreousStatusCodeSequence",vm:"1",version:"DICOM"},"(0022,1028)":{tag:"(0022,1028)",vr:"SQ",name:"IOLFormulaCodeSequence",vm:"1",version:"DICOM"},"(0022,1029)":{tag:"(0022,1029)",vr:"LO",name:"IOLFormulaDetail",vm:"1",version:"DICOM"},"(0022,1033)":{tag:"(0022,1033)",vr:"FL",name:"KeratometerIndex",vm:"1",version:"DICOM"},"(0022,1035)":{tag:"(0022,1035)",vr:"SQ",name:"SourceOfOphthalmicAxialLengthCodeSequence",vm:"1",version:"DICOM"},"(0022,1036)":{tag:"(0022,1036)",vr:"SQ",name:"SourceOfCornealSizeDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1037)":{tag:"(0022,1037)",vr:"FL",name:"TargetRefraction",vm:"1",version:"DICOM"},"(0022,1039)":{tag:"(0022,1039)",vr:"CS",name:"RefractiveProcedureOccurred",vm:"1",version:"DICOM"},"(0022,1040)":{tag:"(0022,1040)",vr:"SQ",name:"RefractiveSurgeryTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1044)":{tag:"(0022,1044)",vr:"SQ",name:"OphthalmicUltrasoundMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1045)":{tag:"(0022,1045)",vr:"SQ",name:"SurgicallyInducedAstigmatismSequence",vm:"1",version:"DICOM"},"(0022,1046)":{tag:"(0022,1046)",vr:"CS",name:"TypeOfOpticalCorrection",vm:"1",version:"DICOM"},"(0022,1047)":{tag:"(0022,1047)",vr:"SQ",name:"ToricIOLPowerSequence",vm:"1",version:"DICOM"},"(0022,1048)":{tag:"(0022,1048)",vr:"SQ",name:"PredictedToricErrorSequence",vm:"1",version:"DICOM"},"(0022,1049)":{tag:"(0022,1049)",vr:"CS",name:"PreSelectedForImplantation",vm:"1",version:"DICOM"},"(0022,104A)":{tag:"(0022,104A)",vr:"SQ",name:"ToricIOLPowerForExactEmmetropiaSequence",vm:"1",version:"DICOM"},"(0022,104B)":{tag:"(0022,104B)",vr:"SQ",name:"ToricIOLPowerForExactTargetRefractionSequence",vm:"1",version:"DICOM"},"(0022,1050)":{tag:"(0022,1050)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1053)":{tag:"(0022,1053)",vr:"FL",name:"IOLPower",vm:"1",version:"DICOM"},"(0022,1054)":{tag:"(0022,1054)",vr:"FL",name:"PredictedRefractiveError",vm:"1",version:"DICOM"},"(0022,1059)":{tag:"(0022,1059)",vr:"FL",name:"OphthalmicAxialLengthVelocity",vm:"1",version:"DICOM"},"(0022,1065)":{tag:"(0022,1065)",vr:"LO",name:"LensStatusDescription",vm:"1",version:"DICOM"},"(0022,1066)":{tag:"(0022,1066)",vr:"LO",name:"VitreousStatusDescription",vm:"1",version:"DICOM"},"(0022,1090)":{tag:"(0022,1090)",vr:"SQ",name:"IOLPowerSequence",vm:"1",version:"DICOM"},"(0022,1092)":{tag:"(0022,1092)",vr:"SQ",name:"LensConstantSequence",vm:"1",version:"DICOM"},"(0022,1093)":{tag:"(0022,1093)",vr:"LO",name:"IOLManufacturer",vm:"1",version:"DICOM"},"(0022,1095)":{tag:"(0022,1095)",vr:"LO",name:"ImplantName",vm:"1",version:"DICOM"},"(0022,1096)":{tag:"(0022,1096)",vr:"SQ",name:"KeratometryMeasurementTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1097)":{tag:"(0022,1097)",vr:"LO",name:"ImplantPartNumber",vm:"1",version:"DICOM"},"(0022,1100)":{tag:"(0022,1100)",vr:"SQ",name:"ReferencedOphthalmicAxialMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1101)":{tag:"(0022,1101)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence",vm:"1",version:"DICOM"},"(0022,1103)":{tag:"(0022,1103)",vr:"SQ",name:"RefractiveErrorBeforeRefractiveSurgeryCodeSequence",vm:"1",version:"DICOM"},"(0022,1121)":{tag:"(0022,1121)",vr:"FL",name:"IOLPowerForExactEmmetropia",vm:"1",version:"DICOM"},"(0022,1122)":{tag:"(0022,1122)",vr:"FL",name:"IOLPowerForExactTargetRefraction",vm:"1",version:"DICOM"},"(0022,1125)":{tag:"(0022,1125)",vr:"SQ",name:"AnteriorChamberDepthDefinitionCodeSequence",vm:"1",version:"DICOM"},"(0022,1127)":{tag:"(0022,1127)",vr:"SQ",name:"LensThicknessSequence",vm:"1",version:"DICOM"},"(0022,1128)":{tag:"(0022,1128)",vr:"SQ",name:"AnteriorChamberDepthSequence",vm:"1",version:"DICOM"},"(0022,112A)":{tag:"(0022,112A)",vr:"SQ",name:"CalculationCommentSequence",vm:"1",version:"DICOM"},"(0022,112B)":{tag:"(0022,112B)",vr:"CS",name:"CalculationCommentType",vm:"1",version:"DICOM"},"(0022,112C)":{tag:"(0022,112C)",vr:"LT",name:"CalculationComment",vm:"1",version:"DICOM"},"(0022,1130)":{tag:"(0022,1130)",vr:"FL",name:"LensThickness",vm:"1",version:"DICOM"},"(0022,1131)":{tag:"(0022,1131)",vr:"FL",name:"AnteriorChamberDepth",vm:"1",version:"DICOM"},"(0022,1132)":{tag:"(0022,1132)",vr:"SQ",name:"SourceOfLensThicknessDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1133)":{tag:"(0022,1133)",vr:"SQ",name:"SourceOfAnteriorChamberDepthDataCodeSequence",vm:"1",version:"DICOM"},"(0022,1134)":{tag:"(0022,1134)",vr:"SQ",name:"SourceOfRefractiveMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1135)":{tag:"(0022,1135)",vr:"SQ",name:"SourceOfRefractiveMeasurementsCodeSequence",vm:"1",version:"DICOM"},"(0022,1140)":{tag:"(0022,1140)",vr:"CS",name:"OphthalmicAxialLengthMeasurementModified",vm:"1",version:"DICOM"},"(0022,1150)":{tag:"(0022,1150)",vr:"SQ",name:"OphthalmicAxialLengthDataSourceCodeSequence",vm:"1",version:"DICOM"},"(0022,1155)":{tag:"(0022,1155)",vr:"FL",name:"SignalToNoiseRatio",vm:"1",version:"DICOM"},"(0022,1159)":{tag:"(0022,1159)",vr:"LO",name:"OphthalmicAxialLengthDataSourceDescription",vm:"1",version:"DICOM"},"(0022,1210)":{tag:"(0022,1210)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsTotalLengthSequence",vm:"1",version:"DICOM"},"(0022,1211)":{tag:"(0022,1211)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsSegmentalLengthSequence",vm:"1",version:"DICOM"},"(0022,1212)":{tag:"(0022,1212)",vr:"SQ",name:"OphthalmicAxialLengthMeasurementsLengthSummationSequence",vm:"1",version:"DICOM"},"(0022,1220)":{tag:"(0022,1220)",vr:"SQ",name:"UltrasoundOphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1225)":{tag:"(0022,1225)",vr:"SQ",name:"OpticalOphthalmicAxialLengthMeasurementsSequence",vm:"1",version:"DICOM"},"(0022,1230)":{tag:"(0022,1230)",vr:"SQ",name:"UltrasoundSelectedOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1250)":{tag:"(0022,1250)",vr:"SQ",name:"OphthalmicAxialLengthSelectionMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1255)":{tag:"(0022,1255)",vr:"SQ",name:"OpticalSelectedOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1257)":{tag:"(0022,1257)",vr:"SQ",name:"SelectedSegmentalOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1260)":{tag:"(0022,1260)",vr:"SQ",name:"SelectedTotalOphthalmicAxialLengthSequence",vm:"1",version:"DICOM"},"(0022,1262)":{tag:"(0022,1262)",vr:"SQ",name:"OphthalmicAxialLengthQualityMetricSequence",vm:"1",version:"DICOM"},"(0022,1300)":{tag:"(0022,1300)",vr:"SQ",name:"IntraocularLensCalculationsRightEyeSequence",vm:"1",version:"DICOM"},"(0022,1310)":{tag:"(0022,1310)",vr:"SQ",name:"IntraocularLensCalculationsLeftEyeSequence",vm:"1",version:"DICOM"},"(0022,1330)":{tag:"(0022,1330)",vr:"SQ",name:"ReferencedOphthalmicAxialLengthMeasurementQCImageSequence",vm:"1",version:"DICOM"},"(0022,1415)":{tag:"(0022,1415)",vr:"CS",name:"OphthalmicMappingDeviceType",vm:"1",version:"DICOM"},"(0022,1420)":{tag:"(0022,1420)",vr:"SQ",name:"AcquisitionMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1423)":{tag:"(0022,1423)",vr:"SQ",name:"AcquisitionMethodAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1436)":{tag:"(0022,1436)",vr:"SQ",name:"OphthalmicThicknessMapTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1443)":{tag:"(0022,1443)",vr:"SQ",name:"OphthalmicThicknessMappingNormalsSequence",vm:"1",version:"DICOM"},"(0022,1445)":{tag:"(0022,1445)",vr:"SQ",name:"RetinalThicknessDefinitionCodeSequence",vm:"1",version:"DICOM"},"(0022,1450)":{tag:"(0022,1450)",vr:"SQ",name:"PixelValueMappingToCodedConceptSequence",vm:"1",version:"DICOM"},"(0022,1452)":{tag:"(0022,1452)",vr:"xs",name:"MappedPixelValue",vm:"1",version:"DICOM"},"(0022,1454)":{tag:"(0022,1454)",vr:"LO",name:"PixelValueMappingExplanation",vm:"1",version:"DICOM"},"(0022,1458)":{tag:"(0022,1458)",vr:"SQ",name:"OphthalmicThicknessMapQualityThresholdSequence",vm:"1",version:"DICOM"},"(0022,1460)":{tag:"(0022,1460)",vr:"FL",name:"OphthalmicThicknessMapThresholdQualityRating",vm:"1",version:"DICOM"},"(0022,1463)":{tag:"(0022,1463)",vr:"FL",name:"AnatomicStructureReferencePoint",vm:"2",version:"DICOM"},"(0022,1465)":{tag:"(0022,1465)",vr:"SQ",name:"RegistrationToLocalizerSequence",vm:"1",version:"DICOM"},"(0022,1466)":{tag:"(0022,1466)",vr:"CS",name:"RegisteredLocalizerUnits",vm:"1",version:"DICOM"},"(0022,1467)":{tag:"(0022,1467)",vr:"FL",name:"RegisteredLocalizerTopLeftHandCorner",vm:"2",version:"DICOM"},"(0022,1468)":{tag:"(0022,1468)",vr:"FL",name:"RegisteredLocalizerBottomRightHandCorner",vm:"2",version:"DICOM"},"(0022,1470)":{tag:"(0022,1470)",vr:"SQ",name:"OphthalmicThicknessMapQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1472)":{tag:"(0022,1472)",vr:"SQ",name:"RelevantOPTAttributesSequence",vm:"1",version:"DICOM"},"(0022,1512)":{tag:"(0022,1512)",vr:"SQ",name:"TransformationMethodCodeSequence",vm:"1",version:"DICOM"},"(0022,1513)":{tag:"(0022,1513)",vr:"SQ",name:"TransformationAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1515)":{tag:"(0022,1515)",vr:"CS",name:"OphthalmicAxialLengthMethod",vm:"1",version:"DICOM"},"(0022,1517)":{tag:"(0022,1517)",vr:"FL",name:"OphthalmicFOV",vm:"1",version:"DICOM"},"(0022,1518)":{tag:"(0022,1518)",vr:"SQ",name:"TwoDimensionalToThreeDimensionalMapSequence",vm:"1",version:"DICOM"},"(0022,1525)":{tag:"(0022,1525)",vr:"SQ",name:"WideFieldOphthalmicPhotographyQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1526)":{tag:"(0022,1526)",vr:"SQ",name:"WideFieldOphthalmicPhotographyQualityThresholdSequence",vm:"1",version:"DICOM"},"(0022,1527)":{tag:"(0022,1527)",vr:"FL",name:"WideFieldOphthalmicPhotographyThresholdQualityRating",vm:"1",version:"DICOM"},"(0022,1528)":{tag:"(0022,1528)",vr:"FL",name:"XCoordinatesCenterPixelViewAngle",vm:"1",version:"DICOM"},"(0022,1529)":{tag:"(0022,1529)",vr:"FL",name:"YCoordinatesCenterPixelViewAngle",vm:"1",version:"DICOM"},"(0022,1530)":{tag:"(0022,1530)",vr:"UL",name:"NumberOfMapPoints",vm:"1",version:"DICOM"},"(0022,1531)":{tag:"(0022,1531)",vr:"OF",name:"TwoDimensionalToThreeDimensionalMapData",vm:"1",version:"DICOM"},"(0022,1612)":{tag:"(0022,1612)",vr:"SQ",name:"DerivationAlgorithmSequence",vm:"1",version:"DICOM"},"(0022,1615)":{tag:"(0022,1615)",vr:"SQ",name:"OphthalmicImageTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1616)":{tag:"(0022,1616)",vr:"LO",name:"OphthalmicImageTypeDescription",vm:"1",version:"DICOM"},"(0022,1618)":{tag:"(0022,1618)",vr:"SQ",name:"ScanPatternTypeCodeSequence",vm:"1",version:"DICOM"},"(0022,1620)":{tag:"(0022,1620)",vr:"SQ",name:"ReferencedSurfaceMeshIdentificationSequence",vm:"1",version:"DICOM"},"(0022,1622)":{tag:"(0022,1622)",vr:"CS",name:"OphthalmicVolumetricPropertiesFlag",vm:"1",version:"DICOM"},"(0022,1624)":{tag:"(0022,1624)",vr:"FL",name:"OphthalmicAnatomicReferencePointXCoordinate",vm:"1",version:"DICOM"},"(0022,1626)":{tag:"(0022,1626)",vr:"FL",name:"OphthalmicAnatomicReferencePointYCoordinate",vm:"1",version:"DICOM"},"(0022,1628)":{tag:"(0022,1628)",vr:"SQ",name:"OphthalmicEnFaceImageQualityRatingSequence",vm:"1",version:"DICOM"},"(0022,1630)":{tag:"(0022,1630)",vr:"DS",name:"QualityThreshold",vm:"1",version:"DICOM"},"(0022,1640)":{tag:"(0022,1640)",vr:"SQ",name:"OCTBscanAnalysisAcquisitionParametersSequence",vm:"1",version:"DICOM"},"(0022,1642)":{tag:"(0022,1642)",vr:"UL",name:"NumberofBscansPerFrame",vm:"1",version:"DICOM"},"(0022,1643)":{tag:"(0022,1643)",vr:"FL",name:"BscanSlabThickness",vm:"1",version:"DICOM"},"(0022,1644)":{tag:"(0022,1644)",vr:"FL",name:"DistanceBetweenBscanSlabs",vm:"1",version:"DICOM"},"(0022,1645)":{tag:"(0022,1645)",vr:"FL",name:"BscanCycleTime",vm:"1",version:"DICOM"},"(0022,1646)":{tag:"(0022,1646)",vr:"FL",name:"BscanCycleTimeVector",vm:"1-n",version:"DICOM"},"(0022,1649)":{tag:"(0022,1649)",vr:"FL",name:"AscanRate",vm:"1",version:"DICOM"},"(0022,1650)":{tag:"(0022,1650)",vr:"FL",name:"BscanRate",vm:"1",version:"DICOM"},"(0022,1658)":{tag:"(0022,1658)",vr:"UL",name:"SurfaceMeshZPixelOffset",vm:"1",version:"DICOM"},"(0024,0010)":{tag:"(0024,0010)",vr:"FL",name:"VisualFieldHorizontalExtent",vm:"1",version:"DICOM"},"(0024,0011)":{tag:"(0024,0011)",vr:"FL",name:"VisualFieldVerticalExtent",vm:"1",version:"DICOM"},"(0024,0012)":{tag:"(0024,0012)",vr:"CS",name:"VisualFieldShape",vm:"1",version:"DICOM"},"(0024,0016)":{tag:"(0024,0016)",vr:"SQ",name:"ScreeningTestModeCodeSequence",vm:"1",version:"DICOM"},"(0024,0018)":{tag:"(0024,0018)",vr:"FL",name:"MaximumStimulusLuminance",vm:"1",version:"DICOM"},"(0024,0020)":{tag:"(0024,0020)",vr:"FL",name:"BackgroundLuminance",vm:"1",version:"DICOM"},"(0024,0021)":{tag:"(0024,0021)",vr:"SQ",name:"StimulusColorCodeSequence",vm:"1",version:"DICOM"},"(0024,0024)":{tag:"(0024,0024)",vr:"SQ",name:"BackgroundIlluminationColorCodeSequence",vm:"1",version:"DICOM"},"(0024,0025)":{tag:"(0024,0025)",vr:"FL",name:"StimulusArea",vm:"1",version:"DICOM"},"(0024,0028)":{tag:"(0024,0028)",vr:"FL",name:"StimulusPresentationTime",vm:"1",version:"DICOM"},"(0024,0032)":{tag:"(0024,0032)",vr:"SQ",name:"FixationSequence",vm:"1",version:"DICOM"},"(0024,0033)":{tag:"(0024,0033)",vr:"SQ",name:"FixationMonitoringCodeSequence",vm:"1",version:"DICOM"},"(0024,0034)":{tag:"(0024,0034)",vr:"SQ",name:"VisualFieldCatchTrialSequence",vm:"1",version:"DICOM"},"(0024,0035)":{tag:"(0024,0035)",vr:"US",name:"FixationCheckedQuantity",vm:"1",version:"DICOM"},"(0024,0036)":{tag:"(0024,0036)",vr:"US",name:"PatientNotProperlyFixatedQuantity",vm:"1",version:"DICOM"},"(0024,0037)":{tag:"(0024,0037)",vr:"CS",name:"PresentedVisualStimuliDataFlag",vm:"1",version:"DICOM"},"(0024,0038)":{tag:"(0024,0038)",vr:"US",name:"NumberOfVisualStimuli",vm:"1",version:"DICOM"},"(0024,0039)":{tag:"(0024,0039)",vr:"CS",name:"ExcessiveFixationLossesDataFlag",vm:"1",version:"DICOM"},"(0024,0040)":{tag:"(0024,0040)",vr:"CS",name:"ExcessiveFixationLosses",vm:"1",version:"DICOM"},"(0024,0042)":{tag:"(0024,0042)",vr:"US",name:"StimuliRetestingQuantity",vm:"1",version:"DICOM"},"(0024,0044)":{tag:"(0024,0044)",vr:"LT",name:"CommentsOnPatientPerformanceOfVisualField",vm:"1",version:"DICOM"},"(0024,0045)":{tag:"(0024,0045)",vr:"CS",name:"FalseNegativesEstimateFlag",vm:"1",version:"DICOM"},"(0024,0046)":{tag:"(0024,0046)",vr:"FL",name:"FalseNegativesEstimate",vm:"1",version:"DICOM"},"(0024,0048)":{tag:"(0024,0048)",vr:"US",name:"NegativeCatchTrialsQuantity",vm:"1",version:"DICOM"},"(0024,0050)":{tag:"(0024,0050)",vr:"US",name:"FalseNegativesQuantity",vm:"1",version:"DICOM"},"(0024,0051)":{tag:"(0024,0051)",vr:"CS",name:"ExcessiveFalseNegativesDataFlag",vm:"1",version:"DICOM"},"(0024,0052)":{tag:"(0024,0052)",vr:"CS",name:"ExcessiveFalseNegatives",vm:"1",version:"DICOM"},"(0024,0053)":{tag:"(0024,0053)",vr:"CS",name:"FalsePositivesEstimateFlag",vm:"1",version:"DICOM"},"(0024,0054)":{tag:"(0024,0054)",vr:"FL",name:"FalsePositivesEstimate",vm:"1",version:"DICOM"},"(0024,0055)":{tag:"(0024,0055)",vr:"CS",name:"CatchTrialsDataFlag",vm:"1",version:"DICOM"},"(0024,0056)":{tag:"(0024,0056)",vr:"US",name:"PositiveCatchTrialsQuantity",vm:"1",version:"DICOM"},"(0024,0057)":{tag:"(0024,0057)",vr:"CS",name:"TestPointNormalsDataFlag",vm:"1",version:"DICOM"},"(0024,0058)":{tag:"(0024,0058)",vr:"SQ",name:"TestPointNormalsSequence",vm:"1",version:"DICOM"},"(0024,0059)":{tag:"(0024,0059)",vr:"CS",name:"GlobalDeviationProbabilityNormalsFlag",vm:"1",version:"DICOM"},"(0024,0060)":{tag:"(0024,0060)",vr:"US",name:"FalsePositivesQuantity",vm:"1",version:"DICOM"},"(0024,0061)":{tag:"(0024,0061)",vr:"CS",name:"ExcessiveFalsePositivesDataFlag",vm:"1",version:"DICOM"},"(0024,0062)":{tag:"(0024,0062)",vr:"CS",name:"ExcessiveFalsePositives",vm:"1",version:"DICOM"},"(0024,0063)":{tag:"(0024,0063)",vr:"CS",name:"VisualFieldTestNormalsFlag",vm:"1",version:"DICOM"},"(0024,0064)":{tag:"(0024,0064)",vr:"SQ",name:"ResultsNormalsSequence",vm:"1",version:"DICOM"},"(0024,0065)":{tag:"(0024,0065)",vr:"SQ",name:"AgeCorrectedSensitivityDeviationAlgorithmSequence",vm:"1",version:"DICOM"},"(0024,0066)":{tag:"(0024,0066)",vr:"FL",name:"GlobalDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0067)":{tag:"(0024,0067)",vr:"SQ",name:"GeneralizedDefectSensitivityDeviationAlgorithmSequence",vm:"1",version:"DICOM"},"(0024,0068)":{tag:"(0024,0068)",vr:"FL",name:"LocalizedDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0069)":{tag:"(0024,0069)",vr:"LO",name:"PatientReliabilityIndicator",vm:"1",version:"DICOM"},"(0024,0070)":{tag:"(0024,0070)",vr:"FL",name:"VisualFieldMeanSensitivity",vm:"1",version:"DICOM"},"(0024,0071)":{tag:"(0024,0071)",vr:"FL",name:"GlobalDeviationProbability",vm:"1",version:"DICOM"},"(0024,0072)":{tag:"(0024,0072)",vr:"CS",name:"LocalDeviationProbabilityNormalsFlag",vm:"1",version:"DICOM"},"(0024,0073)":{tag:"(0024,0073)",vr:"FL",name:"LocalizedDeviationProbability",vm:"1",version:"DICOM"},"(0024,0074)":{tag:"(0024,0074)",vr:"CS",name:"ShortTermFluctuationCalculated",vm:"1",version:"DICOM"},"(0024,0075)":{tag:"(0024,0075)",vr:"FL",name:"ShortTermFluctuation",vm:"1",version:"DICOM"},"(0024,0076)":{tag:"(0024,0076)",vr:"CS",name:"ShortTermFluctuationProbabilityCalculated",vm:"1",version:"DICOM"},"(0024,0077)":{tag:"(0024,0077)",vr:"FL",name:"ShortTermFluctuationProbability",vm:"1",version:"DICOM"},"(0024,0078)":{tag:"(0024,0078)",vr:"CS",name:"CorrectedLocalizedDeviationFromNormalCalculated",vm:"1",version:"DICOM"},"(0024,0079)":{tag:"(0024,0079)",vr:"FL",name:"CorrectedLocalizedDeviationFromNormal",vm:"1",version:"DICOM"},"(0024,0080)":{tag:"(0024,0080)",vr:"CS",name:"CorrectedLocalizedDeviationFromNormalProbabilityCalculated",vm:"1",version:"DICOM"},"(0024,0081)":{tag:"(0024,0081)",vr:"FL",name:"CorrectedLocalizedDeviationFromNormalProbability",vm:"1",version:"DICOM"},"(0024,0083)":{tag:"(0024,0083)",vr:"SQ",name:"GlobalDeviationProbabilitySequence",vm:"1",version:"DICOM"},"(0024,0085)":{tag:"(0024,0085)",vr:"SQ",name:"LocalizedDeviationProbabilitySequence",vm:"1",version:"DICOM"},"(0024,0086)":{tag:"(0024,0086)",vr:"CS",name:"FovealSensitivityMeasured",vm:"1",version:"DICOM"},"(0024,0087)":{tag:"(0024,0087)",vr:"FL",name:"FovealSensitivity",vm:"1",version:"DICOM"},"(0024,0088)":{tag:"(0024,0088)",vr:"FL",name:"VisualFieldTestDuration",vm:"1",version:"DICOM"},"(0024,0089)":{tag:"(0024,0089)",vr:"SQ",name:"VisualFieldTestPointSequence",vm:"1",version:"DICOM"},"(0024,0090)":{tag:"(0024,0090)",vr:"FL",name:"VisualFieldTestPointXCoordinate",vm:"1",version:"DICOM"},"(0024,0091)":{tag:"(0024,0091)",vr:"FL",name:"VisualFieldTestPointYCoordinate",vm:"1",version:"DICOM"},"(0024,0092)":{tag:"(0024,0092)",vr:"FL",name:"AgeCorrectedSensitivityDeviationValue",vm:"1",version:"DICOM"},"(0024,0093)":{tag:"(0024,0093)",vr:"CS",name:"StimulusResults",vm:"1",version:"DICOM"},"(0024,0094)":{tag:"(0024,0094)",vr:"FL",name:"SensitivityValue",vm:"1",version:"DICOM"},"(0024,0095)":{tag:"(0024,0095)",vr:"CS",name:"RetestStimulusSeen",vm:"1",version:"DICOM"},"(0024,0096)":{tag:"(0024,0096)",vr:"FL",name:"RetestSensitivityValue",vm:"1",version:"DICOM"},"(0024,0097)":{tag:"(0024,0097)",vr:"SQ",name:"VisualFieldTestPointNormalsSequence",vm:"1",version:"DICOM"},"(0024,0098)":{tag:"(0024,0098)",vr:"FL",name:"QuantifiedDefect",vm:"1",version:"DICOM"},"(0024,0100)":{tag:"(0024,0100)",vr:"FL",name:"AgeCorrectedSensitivityDeviationProbabilityValue",vm:"1",version:"DICOM"},"(0024,0102)":{tag:"(0024,0102)",vr:"CS",name:"GeneralizedDefectCorrectedSensitivityDeviationFlag",vm:"1",version:"DICOM"},"(0024,0103)":{tag:"(0024,0103)",vr:"FL",name:"GeneralizedDefectCorrectedSensitivityDeviationValue",vm:"1",version:"DICOM"},"(0024,0104)":{tag:"(0024,0104)",vr:"FL",name:"GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue",vm:"1",version:"DICOM"},"(0024,0105)":{tag:"(0024,0105)",vr:"FL",name:"MinimumSensitivityValue",vm:"1",version:"DICOM"},"(0024,0106)":{tag:"(0024,0106)",vr:"CS",name:"BlindSpotLocalized",vm:"1",version:"DICOM"},"(0024,0107)":{tag:"(0024,0107)",vr:"FL",name:"BlindSpotXCoordinate",vm:"1",version:"DICOM"},"(0024,0108)":{tag:"(0024,0108)",vr:"FL",name:"BlindSpotYCoordinate",vm:"1",version:"DICOM"},"(0024,0110)":{tag:"(0024,0110)",vr:"SQ",name:"VisualAcuityMeasurementSequence",vm:"1",version:"DICOM"},"(0024,0112)":{tag:"(0024,0112)",vr:"SQ",name:"RefractiveParametersUsedOnPatientSequence",vm:"1",version:"DICOM"},"(0024,0113)":{tag:"(0024,0113)",vr:"CS",name:"MeasurementLaterality",vm:"1",version:"DICOM"},"(0024,0114)":{tag:"(0024,0114)",vr:"SQ",name:"OphthalmicPatientClinicalInformationLeftEyeSequence",vm:"1",version:"DICOM"},"(0024,0115)":{tag:"(0024,0115)",vr:"SQ",name:"OphthalmicPatientClinicalInformationRightEyeSequence",vm:"1",version:"DICOM"},"(0024,0117)":{tag:"(0024,0117)",vr:"CS",name:"FovealPointNormativeDataFlag",vm:"1",version:"DICOM"},"(0024,0118)":{tag:"(0024,0118)",vr:"FL",name:"FovealPointProbabilityValue",vm:"1",version:"DICOM"},"(0024,0120)":{tag:"(0024,0120)",vr:"CS",name:"ScreeningBaselineMeasured",vm:"1",version:"DICOM"},"(0024,0122)":{tag:"(0024,0122)",vr:"SQ",name:"ScreeningBaselineMeasuredSequence",vm:"1",version:"DICOM"},"(0024,0124)":{tag:"(0024,0124)",vr:"CS",name:"ScreeningBaselineType",vm:"1",version:"DICOM"},"(0024,0126)":{tag:"(0024,0126)",vr:"FL",name:"ScreeningBaselineValue",vm:"1",version:"DICOM"},"(0024,0202)":{tag:"(0024,0202)",vr:"LO",name:"AlgorithmSource",vm:"1",version:"DICOM"},"(0024,0306)":{tag:"(0024,0306)",vr:"LO",name:"DataSetName",vm:"1",version:"DICOM"},"(0024,0307)":{tag:"(0024,0307)",vr:"LO",name:"DataSetVersion",vm:"1",version:"DICOM"},"(0024,0308)":{tag:"(0024,0308)",vr:"LO",name:"DataSetSource",vm:"1",version:"DICOM"},"(0024,0309)":{tag:"(0024,0309)",vr:"LO",name:"DataSetDescription",vm:"1",version:"DICOM"},"(0024,0317)":{tag:"(0024,0317)",vr:"SQ",name:"VisualFieldTestReliabilityGlobalIndexSequence",vm:"1",version:"DICOM"},"(0024,0320)":{tag:"(0024,0320)",vr:"SQ",name:"VisualFieldGlobalResultsIndexSequence",vm:"1",version:"DICOM"},"(0024,0325)":{tag:"(0024,0325)",vr:"SQ",name:"DataObservationSequence",vm:"1",version:"DICOM"},"(0024,0338)":{tag:"(0024,0338)",vr:"CS",name:"IndexNormalsFlag",vm:"1",version:"DICOM"},"(0024,0341)":{tag:"(0024,0341)",vr:"FL",name:"IndexProbability",vm:"1",version:"DICOM"},"(0024,0344)":{tag:"(0024,0344)",vr:"SQ",name:"IndexProbabilitySequence",vm:"1",version:"DICOM"},"(0028,0002)":{tag:"(0028,0002)",vr:"US",name:"SamplesPerPixel",vm:"1",version:"DICOM"},"(0028,0003)":{tag:"(0028,0003)",vr:"US",name:"SamplesPerPixelUsed",vm:"1",version:"DICOM"},"(0028,0004)":{tag:"(0028,0004)",vr:"CS",name:"PhotometricInterpretation",vm:"1",version:"DICOM"},"(0028,0006)":{tag:"(0028,0006)",vr:"US",name:"PlanarConfiguration",vm:"1",version:"DICOM"},"(0028,0008)":{tag:"(0028,0008)",vr:"IS",name:"NumberOfFrames",vm:"1",version:"DICOM"},"(0028,0009)":{tag:"(0028,0009)",vr:"AT",name:"FrameIncrementPointer",vm:"1-n",version:"DICOM"},"(0028,000A)":{tag:"(0028,000A)",vr:"AT",name:"FrameDimensionPointer",vm:"1-n",version:"DICOM"},"(0028,0010)":{tag:"(0028,0010)",vr:"US",name:"Rows",vm:"1",version:"DICOM"},"(0028,0011)":{tag:"(0028,0011)",vr:"US",name:"Columns",vm:"1",version:"DICOM"},"(0028,0014)":{tag:"(0028,0014)",vr:"US",name:"UltrasoundColorDataPresent",vm:"1",version:"DICOM"},"(0028,0030)":{tag:"(0028,0030)",vr:"DS",name:"PixelSpacing",vm:"2",version:"DICOM"},"(0028,0031)":{tag:"(0028,0031)",vr:"DS",name:"ZoomFactor",vm:"2",version:"DICOM"},"(0028,0032)":{tag:"(0028,0032)",vr:"DS",name:"ZoomCenter",vm:"2",version:"DICOM"},"(0028,0034)":{tag:"(0028,0034)",vr:"IS",name:"PixelAspectRatio",vm:"2",version:"DICOM"},"(0028,0051)":{tag:"(0028,0051)",vr:"CS",name:"CorrectedImage",vm:"1-n",version:"DICOM"},"(0028,0100)":{tag:"(0028,0100)",vr:"US",name:"BitsAllocated",vm:"1",version:"DICOM"},"(0028,0101)":{tag:"(0028,0101)",vr:"US",name:"BitsStored",vm:"1",version:"DICOM"},"(0028,0102)":{tag:"(0028,0102)",vr:"US",name:"HighBit",vm:"1",version:"DICOM"},"(0028,0103)":{tag:"(0028,0103)",vr:"US",name:"PixelRepresentation",vm:"1",version:"DICOM"},"(0028,0106)":{tag:"(0028,0106)",vr:"xs",name:"SmallestImagePixelValue",vm:"1",version:"DICOM"},"(0028,0107)":{tag:"(0028,0107)",vr:"xs",name:"LargestImagePixelValue",vm:"1",version:"DICOM"},"(0028,0108)":{tag:"(0028,0108)",vr:"xs",name:"SmallestPixelValueInSeries",vm:"1",version:"DICOM"},"(0028,0109)":{tag:"(0028,0109)",vr:"xs",name:"LargestPixelValueInSeries",vm:"1",version:"DICOM"},"(0028,0120)":{tag:"(0028,0120)",vr:"xs",name:"PixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0121)":{tag:"(0028,0121)",vr:"xs",name:"PixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0122)":{tag:"(0028,0122)",vr:"FL",name:"FloatPixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0123)":{tag:"(0028,0123)",vr:"FD",name:"DoubleFloatPixelPaddingValue",vm:"1",version:"DICOM"},"(0028,0124)":{tag:"(0028,0124)",vr:"FL",name:"FloatPixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0125)":{tag:"(0028,0125)",vr:"FD",name:"DoubleFloatPixelPaddingRangeLimit",vm:"1",version:"DICOM"},"(0028,0300)":{tag:"(0028,0300)",vr:"CS",name:"QualityControlImage",vm:"1",version:"DICOM"},"(0028,0301)":{tag:"(0028,0301)",vr:"CS",name:"BurnedInAnnotation",vm:"1",version:"DICOM"},"(0028,0302)":{tag:"(0028,0302)",vr:"CS",name:"RecognizableVisualFeatures",vm:"1",version:"DICOM"},"(0028,0303)":{tag:"(0028,0303)",vr:"CS",name:"LongitudinalTemporalInformationModified",vm:"1",version:"DICOM"},"(0028,0304)":{tag:"(0028,0304)",vr:"UI",name:"ReferencedColorPaletteInstanceUID",vm:"1",version:"DICOM"},"(0028,0A02)":{tag:"(0028,0A02)",vr:"CS",name:"PixelSpacingCalibrationType",vm:"1",version:"DICOM"},"(0028,0A04)":{tag:"(0028,0A04)",vr:"LO",name:"PixelSpacingCalibrationDescription",vm:"1",version:"DICOM"},"(0028,1040)":{tag:"(0028,1040)",vr:"CS",name:"PixelIntensityRelationship",vm:"1",version:"DICOM"},"(0028,1041)":{tag:"(0028,1041)",vr:"SS",name:"PixelIntensityRelationshipSign",vm:"1",version:"DICOM"},"(0028,1050)":{tag:"(0028,1050)",vr:"DS",name:"WindowCenter",vm:"1-n",version:"DICOM"},"(0028,1051)":{tag:"(0028,1051)",vr:"DS",name:"WindowWidth",vm:"1-n",version:"DICOM"},"(0028,1052)":{tag:"(0028,1052)",vr:"DS",name:"RescaleIntercept",vm:"1",version:"DICOM"},"(0028,1053)":{tag:"(0028,1053)",vr:"DS",name:"RescaleSlope",vm:"1",version:"DICOM"},"(0028,1054)":{tag:"(0028,1054)",vr:"LO",name:"RescaleType",vm:"1",version:"DICOM"},"(0028,1055)":{tag:"(0028,1055)",vr:"LO",name:"WindowCenterWidthExplanation",vm:"1-n",version:"DICOM"},"(0028,1056)":{tag:"(0028,1056)",vr:"CS",name:"VOILUTFunction",vm:"1",version:"DICOM"},"(0028,1090)":{tag:"(0028,1090)",vr:"CS",name:"RecommendedViewingMode",vm:"1",version:"DICOM"},"(0028,1101)":{tag:"(0028,1101)",vr:"xs",name:"RedPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1102)":{tag:"(0028,1102)",vr:"xs",name:"GreenPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1103)":{tag:"(0028,1103)",vr:"xs",name:"BluePaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1104)":{tag:"(0028,1104)",vr:"US",name:"AlphaPaletteColorLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1199)":{tag:"(0028,1199)",vr:"UI",name:"PaletteColorLookupTableUID",vm:"1",version:"DICOM"},"(0028,1201)":{tag:"(0028,1201)",vr:"OW",name:"RedPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1202)":{tag:"(0028,1202)",vr:"OW",name:"GreenPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1203)":{tag:"(0028,1203)",vr:"OW",name:"BluePaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1204)":{tag:"(0028,1204)",vr:"OW",name:"AlphaPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1221)":{tag:"(0028,1221)",vr:"OW",name:"SegmentedRedPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1222)":{tag:"(0028,1222)",vr:"OW",name:"SegmentedGreenPaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1223)":{tag:"(0028,1223)",vr:"OW",name:"SegmentedBluePaletteColorLookupTableData",vm:"1",version:"DICOM"},"(0028,1230)":{tag:"(0028,1230)",vr:"SQ",name:"StoredValueColorRangeSequence",vm:"1",version:"DICOM"},"(0028,1231)":{tag:"(0028,1231)",vr:"FD",name:"MinimumStoredValueMapped",vm:"1",version:"DICOM"},"(0028,1232)":{tag:"(0028,1232)",vr:"FD",name:"MaximumStoredValueMapped",vm:"1",version:"DICOM"},"(0028,1300)":{tag:"(0028,1300)",vr:"CS",name:"BreastImplantPresent",vm:"1",version:"DICOM"},"(0028,1350)":{tag:"(0028,1350)",vr:"CS",name:"PartialView",vm:"1",version:"DICOM"},"(0028,1351)":{tag:"(0028,1351)",vr:"ST",name:"PartialViewDescription",vm:"1",version:"DICOM"},"(0028,1352)":{tag:"(0028,1352)",vr:"SQ",name:"PartialViewCodeSequence",vm:"1",version:"DICOM"},"(0028,135A)":{tag:"(0028,135A)",vr:"CS",name:"SpatialLocationsPreserved",vm:"1",version:"DICOM"},"(0028,1401)":{tag:"(0028,1401)",vr:"SQ",name:"DataFrameAssignmentSequence",vm:"1",version:"DICOM"},"(0028,1402)":{tag:"(0028,1402)",vr:"CS",name:"DataPathAssignment",vm:"1",version:"DICOM"},"(0028,1403)":{tag:"(0028,1403)",vr:"US",name:"BitsMappedToColorLookupTable",vm:"1",version:"DICOM"},"(0028,1404)":{tag:"(0028,1404)",vr:"SQ",name:"BlendingLUT1Sequence",vm:"1",version:"DICOM"},"(0028,1405)":{tag:"(0028,1405)",vr:"CS",name:"BlendingLUT1TransferFunction",vm:"1",version:"DICOM"},"(0028,1406)":{tag:"(0028,1406)",vr:"FD",name:"BlendingWeightConstant",vm:"1",version:"DICOM"},"(0028,1407)":{tag:"(0028,1407)",vr:"US",name:"BlendingLookupTableDescriptor",vm:"3",version:"DICOM"},"(0028,1408)":{tag:"(0028,1408)",vr:"OW",name:"BlendingLookupTableData",vm:"1",version:"DICOM"},"(0028,140B)":{tag:"(0028,140B)",vr:"SQ",name:"EnhancedPaletteColorLookupTableSequence",vm:"1",version:"DICOM"},"(0028,140C)":{tag:"(0028,140C)",vr:"SQ",name:"BlendingLUT2Sequence",vm:"1",version:"DICOM"},"(0028,140D)":{tag:"(0028,140D)",vr:"CS",name:"BlendingLUT2TransferFunction",vm:"1",version:"DICOM"},"(0028,140E)":{tag:"(0028,140E)",vr:"CS",name:"DataPathID",vm:"1",version:"DICOM"},"(0028,140F)":{tag:"(0028,140F)",vr:"CS",name:"RGBLUTTransferFunction",vm:"1",version:"DICOM"},"(0028,1410)":{tag:"(0028,1410)",vr:"CS",name:"AlphaLUTTransferFunction",vm:"1",version:"DICOM"},"(0028,2000)":{tag:"(0028,2000)",vr:"OB",name:"ICCProfile",vm:"1",version:"DICOM"},"(0028,2110)":{tag:"(0028,2110)",vr:"CS",name:"LossyImageCompression",vm:"1",version:"DICOM"},"(0028,2112)":{tag:"(0028,2112)",vr:"DS",name:"LossyImageCompressionRatio",vm:"1-n",version:"DICOM"},"(0028,2114)":{tag:"(0028,2114)",vr:"CS",name:"LossyImageCompressionMethod",vm:"1-n",version:"DICOM"},"(0028,3000)":{tag:"(0028,3000)",vr:"SQ",name:"ModalityLUTSequence",vm:"1",version:"DICOM"},"(0028,3002)":{tag:"(0028,3002)",vr:"xs",name:"LUTDescriptor",vm:"3",version:"DICOM"},"(0028,3003)":{tag:"(0028,3003)",vr:"LO",name:"LUTExplanation",vm:"1",version:"DICOM"},"(0028,3004)":{tag:"(0028,3004)",vr:"LO",name:"ModalityLUTType",vm:"1",version:"DICOM"},"(0028,3006)":{tag:"(0028,3006)",vr:"lt",name:"LUTData",vm:"1-n",version:"DICOM"},"(0028,3010)":{tag:"(0028,3010)",vr:"SQ",name:"VOILUTSequence",vm:"1",version:"DICOM"},"(0028,3110)":{tag:"(0028,3110)",vr:"SQ",name:"SoftcopyVOILUTSequence",vm:"1",version:"DICOM"},"(0028,6010)":{tag:"(0028,6010)",vr:"US",name:"RepresentativeFrameNumber",vm:"1",version:"DICOM"},"(0028,6020)":{tag:"(0028,6020)",vr:"US",name:"FrameNumbersOfInterest",vm:"1-n",version:"DICOM"},"(0028,6022)":{tag:"(0028,6022)",vr:"LO",name:"FrameOfInterestDescription",vm:"1-n",version:"DICOM"},"(0028,6023)":{tag:"(0028,6023)",vr:"CS",name:"FrameOfInterestType",vm:"1-n",version:"DICOM"},"(0028,6040)":{tag:"(0028,6040)",vr:"US",name:"RWavePointer",vm:"1-n",version:"DICOM"},"(0028,6100)":{tag:"(0028,6100)",vr:"SQ",name:"MaskSubtractionSequence",vm:"1",version:"DICOM"},"(0028,6101)":{tag:"(0028,6101)",vr:"CS",name:"MaskOperation",vm:"1",version:"DICOM"},"(0028,6102)":{tag:"(0028,6102)",vr:"US",name:"ApplicableFrameRange",vm:"2-2n",version:"DICOM"},"(0028,6110)":{tag:"(0028,6110)",vr:"US",name:"MaskFrameNumbers",vm:"1-n",version:"DICOM"},"(0028,6112)":{tag:"(0028,6112)",vr:"US",name:"ContrastFrameAveraging",vm:"1",version:"DICOM"},"(0028,6114)":{tag:"(0028,6114)",vr:"FL",name:"MaskSubPixelShift",vm:"2",version:"DICOM"},"(0028,6120)":{tag:"(0028,6120)",vr:"SS",name:"TIDOffset",vm:"1",version:"DICOM"},"(0028,6190)":{tag:"(0028,6190)",vr:"ST",name:"MaskOperationExplanation",vm:"1",version:"DICOM"},"(0028,7000)":{tag:"(0028,7000)",vr:"SQ",name:"EquipmentAdministratorSequence",vm:"1",version:"DICOM"},"(0028,7001)":{tag:"(0028,7001)",vr:"US",name:"NumberOfDisplaySubsystems",vm:"1",version:"DICOM"},"(0028,7002)":{tag:"(0028,7002)",vr:"US",name:"CurrentConfigurationID",vm:"1",version:"DICOM"},"(0028,7003)":{tag:"(0028,7003)",vr:"US",name:"DisplaySubsystemID",vm:"1",version:"DICOM"},"(0028,7004)":{tag:"(0028,7004)",vr:"SH",name:"DisplaySubsystemName",vm:"1",version:"DICOM"},"(0028,7005)":{tag:"(0028,7005)",vr:"LO",name:"DisplaySubsystemDescription",vm:"1",version:"DICOM"},"(0028,7006)":{tag:"(0028,7006)",vr:"CS",name:"SystemStatus",vm:"1",version:"DICOM"},"(0028,7007)":{tag:"(0028,7007)",vr:"LO",name:"SystemStatusComment",vm:"1",version:"DICOM"},"(0028,7008)":{tag:"(0028,7008)",vr:"SQ",name:"TargetLuminanceCharacteristicsSequence",vm:"1",version:"DICOM"},"(0028,7009)":{tag:"(0028,7009)",vr:"US",name:"LuminanceCharacteristicsID",vm:"1",version:"DICOM"},"(0028,700A)":{tag:"(0028,700A)",vr:"SQ",name:"DisplaySubsystemConfigurationSequence",vm:"1",version:"DICOM"},"(0028,700B)":{tag:"(0028,700B)",vr:"US",name:"ConfigurationID",vm:"1",version:"DICOM"},"(0028,700C)":{tag:"(0028,700C)",vr:"SH",name:"ConfigurationName",vm:"1",version:"DICOM"},"(0028,700D)":{tag:"(0028,700D)",vr:"LO",name:"ConfigurationDescription",vm:"1",version:"DICOM"},"(0028,700E)":{tag:"(0028,700E)",vr:"US",name:"ReferencedTargetLuminanceCharacteristicsID",vm:"1",version:"DICOM"},"(0028,700F)":{tag:"(0028,700F)",vr:"SQ",name:"QAResultsSequence",vm:"1",version:"DICOM"},"(0028,7010)":{tag:"(0028,7010)",vr:"SQ",name:"DisplaySubsystemQAResultsSequence",vm:"1",version:"DICOM"},"(0028,7011)":{tag:"(0028,7011)",vr:"SQ",name:"ConfigurationQAResultsSequence",vm:"1",version:"DICOM"},"(0028,7012)":{tag:"(0028,7012)",vr:"SQ",name:"MeasurementEquipmentSequence",vm:"1",version:"DICOM"},"(0028,7013)":{tag:"(0028,7013)",vr:"CS",name:"MeasurementFunctions",vm:"1-n",version:"DICOM"},"(0028,7014)":{tag:"(0028,7014)",vr:"CS",name:"MeasurementEquipmentType",vm:"1",version:"DICOM"},"(0028,7015)":{tag:"(0028,7015)",vr:"SQ",name:"VisualEvaluationResultSequence",vm:"1",version:"DICOM"},"(0028,7016)":{tag:"(0028,7016)",vr:"SQ",name:"DisplayCalibrationResultSequence",vm:"1",version:"DICOM"},"(0028,7017)":{tag:"(0028,7017)",vr:"US",name:"DDLValue",vm:"1",version:"DICOM"},"(0028,7018)":{tag:"(0028,7018)",vr:"FL",name:"CIExyWhitePoint",vm:"2",version:"DICOM"},"(0028,7019)":{tag:"(0028,7019)",vr:"CS",name:"DisplayFunctionType",vm:"1",version:"DICOM"},"(0028,701A)":{tag:"(0028,701A)",vr:"FL",name:"GammaValue",vm:"1",version:"DICOM"},"(0028,701B)":{tag:"(0028,701B)",vr:"US",name:"NumberOfLuminancePoints",vm:"1",version:"DICOM"},"(0028,701C)":{tag:"(0028,701C)",vr:"SQ",name:"LuminanceResponseSequence",vm:"1",version:"DICOM"},"(0028,701D)":{tag:"(0028,701D)",vr:"FL",name:"TargetMinimumLuminance",vm:"1",version:"DICOM"},"(0028,701E)":{tag:"(0028,701E)",vr:"FL",name:"TargetMaximumLuminance",vm:"1",version:"DICOM"},"(0028,701F)":{tag:"(0028,701F)",vr:"FL",name:"LuminanceValue",vm:"1",version:"DICOM"},"(0028,7020)":{tag:"(0028,7020)",vr:"LO",name:"LuminanceResponseDescription",vm:"1",version:"DICOM"},"(0028,7021)":{tag:"(0028,7021)",vr:"CS",name:"WhitePointFlag",vm:"1",version:"DICOM"},"(0028,7022)":{tag:"(0028,7022)",vr:"SQ",name:"DisplayDeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(0028,7023)":{tag:"(0028,7023)",vr:"SQ",name:"DisplaySubsystemSequence",vm:"1",version:"DICOM"},"(0028,7024)":{tag:"(0028,7024)",vr:"SQ",name:"LuminanceResultSequence",vm:"1",version:"DICOM"},"(0028,7025)":{tag:"(0028,7025)",vr:"CS",name:"AmbientLightValueSource",vm:"1",version:"DICOM"},"(0028,7026)":{tag:"(0028,7026)",vr:"CS",name:"MeasuredCharacteristics",vm:"1-n",version:"DICOM"},"(0028,7027)":{tag:"(0028,7027)",vr:"SQ",name:"LuminanceUniformityResultSequence",vm:"1",version:"DICOM"},"(0028,7028)":{tag:"(0028,7028)",vr:"SQ",name:"VisualEvaluationTestSequence",vm:"1",version:"DICOM"},"(0028,7029)":{tag:"(0028,7029)",vr:"CS",name:"TestResult",vm:"1",version:"DICOM"},"(0028,702A)":{tag:"(0028,702A)",vr:"LO",name:"TestResultComment",vm:"1",version:"DICOM"},"(0028,702B)":{tag:"(0028,702B)",vr:"CS",name:"TestImageValidation",vm:"1",version:"DICOM"},"(0028,702C)":{tag:"(0028,702C)",vr:"SQ",name:"TestPatternCodeSequence",vm:"1",version:"DICOM"},"(0028,702D)":{tag:"(0028,702D)",vr:"SQ",name:"MeasurementPatternCodeSequence",vm:"1",version:"DICOM"},"(0028,702E)":{tag:"(0028,702E)",vr:"SQ",name:"VisualEvaluationMethodCodeSequence",vm:"1",version:"DICOM"},"(0028,7FE0)":{tag:"(0028,7FE0)",vr:"UR",name:"PixelDataProviderURL",vm:"1",version:"DICOM"},"(0028,9001)":{tag:"(0028,9001)",vr:"UL",name:"DataPointRows",vm:"1",version:"DICOM"},"(0028,9002)":{tag:"(0028,9002)",vr:"UL",name:"DataPointColumns",vm:"1",version:"DICOM"},"(0028,9003)":{tag:"(0028,9003)",vr:"CS",name:"SignalDomainColumns",vm:"1",version:"DICOM"},"(0028,9108)":{tag:"(0028,9108)",vr:"CS",name:"DataRepresentation",vm:"1",version:"DICOM"},"(0028,9110)":{tag:"(0028,9110)",vr:"SQ",name:"PixelMeasuresSequence",vm:"1",version:"DICOM"},"(0028,9132)":{tag:"(0028,9132)",vr:"SQ",name:"FrameVOILUTSequence",vm:"1",version:"DICOM"},"(0028,9145)":{tag:"(0028,9145)",vr:"SQ",name:"PixelValueTransformationSequence",vm:"1",version:"DICOM"},"(0028,9235)":{tag:"(0028,9235)",vr:"CS",name:"SignalDomainRows",vm:"1",version:"DICOM"},"(0028,9411)":{tag:"(0028,9411)",vr:"FL",name:"DisplayFilterPercentage",vm:"1",version:"DICOM"},"(0028,9415)":{tag:"(0028,9415)",vr:"SQ",name:"FramePixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9416)":{tag:"(0028,9416)",vr:"US",name:"SubtractionItemID",vm:"1",version:"DICOM"},"(0028,9422)":{tag:"(0028,9422)",vr:"SQ",name:"PixelIntensityRelationshipLUTSequence",vm:"1",version:"DICOM"},"(0028,9443)":{tag:"(0028,9443)",vr:"SQ",name:"FramePixelDataPropertiesSequence",vm:"1",version:"DICOM"},"(0028,9444)":{tag:"(0028,9444)",vr:"CS",name:"GeometricalProperties",vm:"1",version:"DICOM"},"(0028,9445)":{tag:"(0028,9445)",vr:"FL",name:"GeometricMaximumDistortion",vm:"1",version:"DICOM"},"(0028,9446)":{tag:"(0028,9446)",vr:"CS",name:"ImageProcessingApplied",vm:"1-n",version:"DICOM"},"(0028,9454)":{tag:"(0028,9454)",vr:"CS",name:"MaskSelectionMode",vm:"1",version:"DICOM"},"(0028,9474)":{tag:"(0028,9474)",vr:"CS",name:"LUTFunction",vm:"1",version:"DICOM"},"(0028,9478)":{tag:"(0028,9478)",vr:"FL",name:"MaskVisibilityPercentage",vm:"1",version:"DICOM"},"(0028,9501)":{tag:"(0028,9501)",vr:"SQ",name:"PixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9502)":{tag:"(0028,9502)",vr:"SQ",name:"RegionPixelShiftSequence",vm:"1",version:"DICOM"},"(0028,9503)":{tag:"(0028,9503)",vr:"SS",name:"VerticesOfTheRegion",vm:"2-2n",version:"DICOM"},"(0028,9505)":{tag:"(0028,9505)",vr:"SQ",name:"MultiFramePresentationSequence",vm:"1",version:"DICOM"},"(0028,9506)":{tag:"(0028,9506)",vr:"US",name:"PixelShiftFrameRange",vm:"2-2n",version:"DICOM"},"(0028,9507)":{tag:"(0028,9507)",vr:"US",name:"LUTFrameRange",vm:"2-2n",version:"DICOM"},"(0028,9520)":{tag:"(0028,9520)",vr:"DS",name:"ImageToEquipmentMappingMatrix",vm:"16",version:"DICOM"},"(0028,9537)":{tag:"(0028,9537)",vr:"CS",name:"EquipmentCoordinateSystemIdentification",vm:"1",version:"DICOM"},"(0032,1031)":{tag:"(0032,1031)",vr:"SQ",name:"RequestingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0032,1032)":{tag:"(0032,1032)",vr:"PN",name:"RequestingPhysician",vm:"1",version:"DICOM"},"(0032,1033)":{tag:"(0032,1033)",vr:"LO",name:"RequestingService",vm:"1",version:"DICOM"},"(0032,1034)":{tag:"(0032,1034)",vr:"SQ",name:"RequestingServiceCodeSequence",vm:"1",version:"DICOM"},"(0032,1060)":{tag:"(0032,1060)",vr:"LO",name:"RequestedProcedureDescription",vm:"1",version:"DICOM"},"(0032,1064)":{tag:"(0032,1064)",vr:"SQ",name:"RequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0032,1066)":{tag:"(0032,1066)",vr:"UT",name:"ReasonForVisit",vm:"1",version:"DICOM"},"(0032,1067)":{tag:"(0032,1067)",vr:"SQ",name:"ReasonForVisitCodeSequence",vm:"1",version:"DICOM"},"(0032,1070)":{tag:"(0032,1070)",vr:"LO",name:"RequestedContrastAgent",vm:"1",version:"DICOM"},"(0034,0001)":{tag:"(0034,0001)",vr:"SQ",name:"FlowIdentifierSequence",vm:"1",version:"DICOM"},"(0034,0002)":{tag:"(0034,0002)",vr:"OB",name:"FlowIdentifier",vm:"1",version:"DICOM"},"(0034,0003)":{tag:"(0034,0003)",vr:"UI",name:"FlowTransferSyntaxUID",vm:"1",version:"DICOM"},"(0034,0004)":{tag:"(0034,0004)",vr:"UL",name:"FlowRTPSamplingRate",vm:"1",version:"DICOM"},"(0034,0005)":{tag:"(0034,0005)",vr:"OB",name:"SourceIdentifier",vm:"1",version:"DICOM"},"(0034,0007)":{tag:"(0034,0007)",vr:"OB",name:"FrameOriginTimestamp",vm:"1",version:"DICOM"},"(0034,0008)":{tag:"(0034,0008)",vr:"CS",name:"IncludesImagingSubject",vm:"1",version:"DICOM"},"(0034,0009)":{tag:"(0034,0009)",vr:"SQ",name:"FrameUsefulnessGroupSequence",vm:"1",version:"DICOM"},"(0034,000A)":{tag:"(0034,000A)",vr:"SQ",name:"RealTimeBulkDataFlowSequence",vm:"1",version:"DICOM"},"(0034,000B)":{tag:"(0034,000B)",vr:"SQ",name:"CameraPositionGroupSequence",vm:"1",version:"DICOM"},"(0034,000C)":{tag:"(0034,000C)",vr:"CS",name:"IncludesInformation",vm:"1",version:"DICOM"},"(0034,000D)":{tag:"(0034,000D)",vr:"SQ",name:"TimeOfFrameGroupSequence",vm:"1",version:"DICOM"},"(0038,0004)":{tag:"(0038,0004)",vr:"SQ",name:"ReferencedPatientAliasSequence",vm:"1",version:"DICOM"},"(0038,0008)":{tag:"(0038,0008)",vr:"CS",name:"VisitStatusID",vm:"1",version:"DICOM"},"(0038,0010)":{tag:"(0038,0010)",vr:"LO",name:"AdmissionID",vm:"1",version:"DICOM"},"(0038,0014)":{tag:"(0038,0014)",vr:"SQ",name:"IssuerOfAdmissionIDSequence",vm:"1",version:"DICOM"},"(0038,0016)":{tag:"(0038,0016)",vr:"LO",name:"RouteOfAdmissions",vm:"1",version:"DICOM"},"(0038,0020)":{tag:"(0038,0020)",vr:"DA",name:"AdmittingDate",vm:"1",version:"DICOM"},"(0038,0021)":{tag:"(0038,0021)",vr:"TM",name:"AdmittingTime",vm:"1",version:"DICOM"},"(0038,0050)":{tag:"(0038,0050)",vr:"LO",name:"SpecialNeeds",vm:"1",version:"DICOM"},"(0038,0060)":{tag:"(0038,0060)",vr:"LO",name:"ServiceEpisodeID",vm:"1",version:"DICOM"},"(0038,0062)":{tag:"(0038,0062)",vr:"LO",name:"ServiceEpisodeDescription",vm:"1",version:"DICOM"},"(0038,0064)":{tag:"(0038,0064)",vr:"SQ",name:"IssuerOfServiceEpisodeIDSequence",vm:"1",version:"DICOM"},"(0038,0100)":{tag:"(0038,0100)",vr:"SQ",name:"PertinentDocumentsSequence",vm:"1",version:"DICOM"},"(0038,0101)":{tag:"(0038,0101)",vr:"SQ",name:"PertinentResourcesSequence",vm:"1",version:"DICOM"},"(0038,0102)":{tag:"(0038,0102)",vr:"LO",name:"ResourceDescription",vm:"1",version:"DICOM"},"(0038,0300)":{tag:"(0038,0300)",vr:"LO",name:"CurrentPatientLocation",vm:"1",version:"DICOM"},"(0038,0400)":{tag:"(0038,0400)",vr:"LO",name:"PatientInstitutionResidence",vm:"1",version:"DICOM"},"(0038,0500)":{tag:"(0038,0500)",vr:"LO",name:"PatientState",vm:"1",version:"DICOM"},"(0038,0502)":{tag:"(0038,0502)",vr:"SQ",name:"PatientClinicalTrialParticipationSequence",vm:"1",version:"DICOM"},"(0038,4000)":{tag:"(0038,4000)",vr:"LT",name:"VisitComments",vm:"1",version:"DICOM"},"(003A,0004)":{tag:"(003A,0004)",vr:"CS",name:"WaveformOriginality",vm:"1",version:"DICOM"},"(003A,0005)":{tag:"(003A,0005)",vr:"US",name:"NumberOfWaveformChannels",vm:"1",version:"DICOM"},"(003A,0010)":{tag:"(003A,0010)",vr:"UL",name:"NumberOfWaveformSamples",vm:"1",version:"DICOM"},"(003A,001A)":{tag:"(003A,001A)",vr:"DS",name:"SamplingFrequency",vm:"1",version:"DICOM"},"(003A,0020)":{tag:"(003A,0020)",vr:"SH",name:"MultiplexGroupLabel",vm:"1",version:"DICOM"},"(003A,0200)":{tag:"(003A,0200)",vr:"SQ",name:"ChannelDefinitionSequence",vm:"1",version:"DICOM"},"(003A,0202)":{tag:"(003A,0202)",vr:"IS",name:"WaveformChannelNumber",vm:"1",version:"DICOM"},"(003A,0203)":{tag:"(003A,0203)",vr:"SH",name:"ChannelLabel",vm:"1",version:"DICOM"},"(003A,0205)":{tag:"(003A,0205)",vr:"CS",name:"ChannelStatus",vm:"1-n",version:"DICOM"},"(003A,0208)":{tag:"(003A,0208)",vr:"SQ",name:"ChannelSourceSequence",vm:"1",version:"DICOM"},"(003A,0209)":{tag:"(003A,0209)",vr:"SQ",name:"ChannelSourceModifiersSequence",vm:"1",version:"DICOM"},"(003A,020A)":{tag:"(003A,020A)",vr:"SQ",name:"SourceWaveformSequence",vm:"1",version:"DICOM"},"(003A,020C)":{tag:"(003A,020C)",vr:"LO",name:"ChannelDerivationDescription",vm:"1",version:"DICOM"},"(003A,0210)":{tag:"(003A,0210)",vr:"DS",name:"ChannelSensitivity",vm:"1",version:"DICOM"},"(003A,0211)":{tag:"(003A,0211)",vr:"SQ",name:"ChannelSensitivityUnitsSequence",vm:"1",version:"DICOM"},"(003A,0212)":{tag:"(003A,0212)",vr:"DS",name:"ChannelSensitivityCorrectionFactor",vm:"1",version:"DICOM"},"(003A,0213)":{tag:"(003A,0213)",vr:"DS",name:"ChannelBaseline",vm:"1",version:"DICOM"},"(003A,0214)":{tag:"(003A,0214)",vr:"DS",name:"ChannelTimeSkew",vm:"1",version:"DICOM"},"(003A,0215)":{tag:"(003A,0215)",vr:"DS",name:"ChannelSampleSkew",vm:"1",version:"DICOM"},"(003A,0218)":{tag:"(003A,0218)",vr:"DS",name:"ChannelOffset",vm:"1",version:"DICOM"},"(003A,021A)":{tag:"(003A,021A)",vr:"US",name:"WaveformBitsStored",vm:"1",version:"DICOM"},"(003A,0220)":{tag:"(003A,0220)",vr:"DS",name:"FilterLowFrequency",vm:"1",version:"DICOM"},"(003A,0221)":{tag:"(003A,0221)",vr:"DS",name:"FilterHighFrequency",vm:"1",version:"DICOM"},"(003A,0222)":{tag:"(003A,0222)",vr:"DS",name:"NotchFilterFrequency",vm:"1",version:"DICOM"},"(003A,0223)":{tag:"(003A,0223)",vr:"DS",name:"NotchFilterBandwidth",vm:"1",version:"DICOM"},"(003A,0230)":{tag:"(003A,0230)",vr:"FL",name:"WaveformDataDisplayScale",vm:"1",version:"DICOM"},"(003A,0231)":{tag:"(003A,0231)",vr:"US",name:"WaveformDisplayBackgroundCIELabValue",vm:"3",version:"DICOM"},"(003A,0240)":{tag:"(003A,0240)",vr:"SQ",name:"WaveformPresentationGroupSequence",vm:"1",version:"DICOM"},"(003A,0241)":{tag:"(003A,0241)",vr:"US",name:"PresentationGroupNumber",vm:"1",version:"DICOM"},"(003A,0242)":{tag:"(003A,0242)",vr:"SQ",name:"ChannelDisplaySequence",vm:"1",version:"DICOM"},"(003A,0244)":{tag:"(003A,0244)",vr:"US",name:"ChannelRecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(003A,0245)":{tag:"(003A,0245)",vr:"FL",name:"ChannelPosition",vm:"1",version:"DICOM"},"(003A,0246)":{tag:"(003A,0246)",vr:"CS",name:"DisplayShadingFlag",vm:"1",version:"DICOM"},"(003A,0247)":{tag:"(003A,0247)",vr:"FL",name:"FractionalChannelDisplayScale",vm:"1",version:"DICOM"},"(003A,0248)":{tag:"(003A,0248)",vr:"FL",name:"AbsoluteChannelDisplayScale",vm:"1",version:"DICOM"},"(003A,0300)":{tag:"(003A,0300)",vr:"SQ",name:"MultiplexedAudioChannelsDescriptionCodeSequence",vm:"1",version:"DICOM"},"(003A,0301)":{tag:"(003A,0301)",vr:"IS",name:"ChannelIdentificationCode",vm:"1",version:"DICOM"},"(003A,0302)":{tag:"(003A,0302)",vr:"CS",name:"ChannelMode",vm:"1",version:"DICOM"},"(003A,0310)":{tag:"(003A,0310)",vr:"UI",name:"MultiplexGroupUID",vm:"1",version:"DICOM"},"(003A,0311)":{tag:"(003A,0311)",vr:"DS",name:"PowerlineFrequency",vm:"1",version:"DICOM"},"(003A,0312)":{tag:"(003A,0312)",vr:"SQ",name:"ChannelImpedanceSequence",vm:"1",version:"DICOM"},"(003A,0313)":{tag:"(003A,0313)",vr:"DS",name:"ImpedanceValue",vm:"1",version:"DICOM"},"(003A,0314)":{tag:"(003A,0314)",vr:"DT",name:"ImpedanceMeasurementDateTime",vm:"1",version:"DICOM"},"(003A,0315)":{tag:"(003A,0315)",vr:"DS",name:"ImpedanceMeasurementFrequency",vm:"1",version:"DICOM"},"(003A,0316)":{tag:"(003A,0316)",vr:"CS",name:"ImpedanceMeasurementCurrentType",vm:"1",version:"DICOM"},"(0040,0001)":{tag:"(0040,0001)",vr:"AE",name:"ScheduledStationAETitle",vm:"1-n",version:"DICOM"},"(0040,0002)":{tag:"(0040,0002)",vr:"DA",name:"ScheduledProcedureStepStartDate",vm:"1",version:"DICOM"},"(0040,0003)":{tag:"(0040,0003)",vr:"TM",name:"ScheduledProcedureStepStartTime",vm:"1",version:"DICOM"},"(0040,0004)":{tag:"(0040,0004)",vr:"DA",name:"ScheduledProcedureStepEndDate",vm:"1",version:"DICOM"},"(0040,0005)":{tag:"(0040,0005)",vr:"TM",name:"ScheduledProcedureStepEndTime",vm:"1",version:"DICOM"},"(0040,0006)":{tag:"(0040,0006)",vr:"PN",name:"ScheduledPerformingPhysicianName",vm:"1",version:"DICOM"},"(0040,0007)":{tag:"(0040,0007)",vr:"LO",name:"ScheduledProcedureStepDescription",vm:"1",version:"DICOM"},"(0040,0008)":{tag:"(0040,0008)",vr:"SQ",name:"ScheduledProtocolCodeSequence",vm:"1",version:"DICOM"},"(0040,0009)":{tag:"(0040,0009)",vr:"SH",name:"ScheduledProcedureStepID",vm:"1",version:"DICOM"},"(0040,000A)":{tag:"(0040,000A)",vr:"SQ",name:"StageCodeSequence",vm:"1",version:"DICOM"},"(0040,000B)":{tag:"(0040,000B)",vr:"SQ",name:"ScheduledPerformingPhysicianIdentificationSequence",vm:"1",version:"DICOM"},"(0040,0010)":{tag:"(0040,0010)",vr:"SH",name:"ScheduledStationName",vm:"1-n",version:"DICOM"},"(0040,0011)":{tag:"(0040,0011)",vr:"SH",name:"ScheduledProcedureStepLocation",vm:"1",version:"DICOM"},"(0040,0012)":{tag:"(0040,0012)",vr:"LO",name:"PreMedication",vm:"1",version:"DICOM"},"(0040,0020)":{tag:"(0040,0020)",vr:"CS",name:"ScheduledProcedureStepStatus",vm:"1",version:"DICOM"},"(0040,0026)":{tag:"(0040,0026)",vr:"SQ",name:"OrderPlacerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0027)":{tag:"(0040,0027)",vr:"SQ",name:"OrderFillerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0031)":{tag:"(0040,0031)",vr:"UT",name:"LocalNamespaceEntityID",vm:"1",version:"DICOM"},"(0040,0032)":{tag:"(0040,0032)",vr:"UT",name:"UniversalEntityID",vm:"1",version:"DICOM"},"(0040,0033)":{tag:"(0040,0033)",vr:"CS",name:"UniversalEntityIDType",vm:"1",version:"DICOM"},"(0040,0035)":{tag:"(0040,0035)",vr:"CS",name:"IdentifierTypeCode",vm:"1",version:"DICOM"},"(0040,0036)":{tag:"(0040,0036)",vr:"SQ",name:"AssigningFacilitySequence",vm:"1",version:"DICOM"},"(0040,0039)":{tag:"(0040,0039)",vr:"SQ",name:"AssigningJurisdictionCodeSequence",vm:"1",version:"DICOM"},"(0040,003A)":{tag:"(0040,003A)",vr:"SQ",name:"AssigningAgencyOrDepartmentCodeSequence",vm:"1",version:"DICOM"},"(0040,0100)":{tag:"(0040,0100)",vr:"SQ",name:"ScheduledProcedureStepSequence",vm:"1",version:"DICOM"},"(0040,0220)":{tag:"(0040,0220)",vr:"SQ",name:"ReferencedNonImageCompositeSOPInstanceSequence",vm:"1",version:"DICOM"},"(0040,0241)":{tag:"(0040,0241)",vr:"AE",name:"PerformedStationAETitle",vm:"1",version:"DICOM"},"(0040,0242)":{tag:"(0040,0242)",vr:"SH",name:"PerformedStationName",vm:"1",version:"DICOM"},"(0040,0243)":{tag:"(0040,0243)",vr:"SH",name:"PerformedLocation",vm:"1",version:"DICOM"},"(0040,0244)":{tag:"(0040,0244)",vr:"DA",name:"PerformedProcedureStepStartDate",vm:"1",version:"DICOM"},"(0040,0245)":{tag:"(0040,0245)",vr:"TM",name:"PerformedProcedureStepStartTime",vm:"1",version:"DICOM"},"(0040,0250)":{tag:"(0040,0250)",vr:"DA",name:"PerformedProcedureStepEndDate",vm:"1",version:"DICOM"},"(0040,0251)":{tag:"(0040,0251)",vr:"TM",name:"PerformedProcedureStepEndTime",vm:"1",version:"DICOM"},"(0040,0252)":{tag:"(0040,0252)",vr:"CS",name:"PerformedProcedureStepStatus",vm:"1",version:"DICOM"},"(0040,0253)":{tag:"(0040,0253)",vr:"SH",name:"PerformedProcedureStepID",vm:"1",version:"DICOM"},"(0040,0254)":{tag:"(0040,0254)",vr:"LO",name:"PerformedProcedureStepDescription",vm:"1",version:"DICOM"},"(0040,0255)":{tag:"(0040,0255)",vr:"LO",name:"PerformedProcedureTypeDescription",vm:"1",version:"DICOM"},"(0040,0260)":{tag:"(0040,0260)",vr:"SQ",name:"PerformedProtocolCodeSequence",vm:"1",version:"DICOM"},"(0040,0261)":{tag:"(0040,0261)",vr:"CS",name:"PerformedProtocolType",vm:"1",version:"DICOM"},"(0040,0270)":{tag:"(0040,0270)",vr:"SQ",name:"ScheduledStepAttributesSequence",vm:"1",version:"DICOM"},"(0040,0275)":{tag:"(0040,0275)",vr:"SQ",name:"RequestAttributesSequence",vm:"1",version:"DICOM"},"(0040,0280)":{tag:"(0040,0280)",vr:"ST",name:"CommentsOnThePerformedProcedureStep",vm:"1",version:"DICOM"},"(0040,0281)":{tag:"(0040,0281)",vr:"SQ",name:"PerformedProcedureStepDiscontinuationReasonCodeSequence",vm:"1",version:"DICOM"},"(0040,0293)":{tag:"(0040,0293)",vr:"SQ",name:"QuantitySequence",vm:"1",version:"DICOM"},"(0040,0294)":{tag:"(0040,0294)",vr:"DS",name:"Quantity",vm:"1",version:"DICOM"},"(0040,0295)":{tag:"(0040,0295)",vr:"SQ",name:"MeasuringUnitsSequence",vm:"1",version:"DICOM"},"(0040,0296)":{tag:"(0040,0296)",vr:"SQ",name:"BillingItemSequence",vm:"1",version:"DICOM"},"(0040,0300)":{tag:"(0040,0300)",vr:"US",name:"TotalTimeOfFluoroscopy",vm:"1",version:"DICOM"},"(0040,0301)":{tag:"(0040,0301)",vr:"US",name:"TotalNumberOfExposures",vm:"1",version:"DICOM"},"(0040,0302)":{tag:"(0040,0302)",vr:"US",name:"EntranceDose",vm:"1",version:"DICOM"},"(0040,0303)":{tag:"(0040,0303)",vr:"US",name:"ExposedArea",vm:"1-2",version:"DICOM"},"(0040,0306)":{tag:"(0040,0306)",vr:"DS",name:"DistanceSourceToEntrance",vm:"1",version:"DICOM"},"(0040,030E)":{tag:"(0040,030E)",vr:"SQ",name:"ExposureDoseSequence",vm:"1",version:"DICOM"},"(0040,0310)":{tag:"(0040,0310)",vr:"ST",name:"CommentsOnRadiationDose",vm:"1",version:"DICOM"},"(0040,0312)":{tag:"(0040,0312)",vr:"DS",name:"XRayOutput",vm:"1",version:"DICOM"},"(0040,0314)":{tag:"(0040,0314)",vr:"DS",name:"HalfValueLayer",vm:"1",version:"DICOM"},"(0040,0316)":{tag:"(0040,0316)",vr:"DS",name:"OrganDose",vm:"1",version:"DICOM"},"(0040,0318)":{tag:"(0040,0318)",vr:"CS",name:"OrganExposed",vm:"1",version:"DICOM"},"(0040,0320)":{tag:"(0040,0320)",vr:"SQ",name:"BillingProcedureStepSequence",vm:"1",version:"DICOM"},"(0040,0321)":{tag:"(0040,0321)",vr:"SQ",name:"FilmConsumptionSequence",vm:"1",version:"DICOM"},"(0040,0324)":{tag:"(0040,0324)",vr:"SQ",name:"BillingSuppliesAndDevicesSequence",vm:"1",version:"DICOM"},"(0040,0340)":{tag:"(0040,0340)",vr:"SQ",name:"PerformedSeriesSequence",vm:"1",version:"DICOM"},"(0040,0400)":{tag:"(0040,0400)",vr:"LT",name:"CommentsOnTheScheduledProcedureStep",vm:"1",version:"DICOM"},"(0040,0440)":{tag:"(0040,0440)",vr:"SQ",name:"ProtocolContextSequence",vm:"1",version:"DICOM"},"(0040,0441)":{tag:"(0040,0441)",vr:"SQ",name:"ContentItemModifierSequence",vm:"1",version:"DICOM"},"(0040,0500)":{tag:"(0040,0500)",vr:"SQ",name:"ScheduledSpecimenSequence",vm:"1",version:"DICOM"},"(0040,0512)":{tag:"(0040,0512)",vr:"LO",name:"ContainerIdentifier",vm:"1",version:"DICOM"},"(0040,0513)":{tag:"(0040,0513)",vr:"SQ",name:"IssuerOfTheContainerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0515)":{tag:"(0040,0515)",vr:"SQ",name:"AlternateContainerIdentifierSequence",vm:"1",version:"DICOM"},"(0040,0518)":{tag:"(0040,0518)",vr:"SQ",name:"ContainerTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,051A)":{tag:"(0040,051A)",vr:"LO",name:"ContainerDescription",vm:"1",version:"DICOM"},"(0040,0520)":{tag:"(0040,0520)",vr:"SQ",name:"ContainerComponentSequence",vm:"1",version:"DICOM"},"(0040,0551)":{tag:"(0040,0551)",vr:"LO",name:"SpecimenIdentifier",vm:"1",version:"DICOM"},"(0040,0554)":{tag:"(0040,0554)",vr:"UI",name:"SpecimenUID",vm:"1",version:"DICOM"},"(0040,0555)":{tag:"(0040,0555)",vr:"SQ",name:"AcquisitionContextSequence",vm:"1",version:"DICOM"},"(0040,0556)":{tag:"(0040,0556)",vr:"ST",name:"AcquisitionContextDescription",vm:"1",version:"DICOM"},"(0040,0560)":{tag:"(0040,0560)",vr:"SQ",name:"SpecimenDescriptionSequence",vm:"1",version:"DICOM"},"(0040,0562)":{tag:"(0040,0562)",vr:"SQ",name:"IssuerOfTheSpecimenIdentifierSequence",vm:"1",version:"DICOM"},"(0040,059A)":{tag:"(0040,059A)",vr:"SQ",name:"SpecimenTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,0600)":{tag:"(0040,0600)",vr:"LO",name:"SpecimenShortDescription",vm:"1",version:"DICOM"},"(0040,0602)":{tag:"(0040,0602)",vr:"UT",name:"SpecimenDetailedDescription",vm:"1",version:"DICOM"},"(0040,0610)":{tag:"(0040,0610)",vr:"SQ",name:"SpecimenPreparationSequence",vm:"1",version:"DICOM"},"(0040,0612)":{tag:"(0040,0612)",vr:"SQ",name:"SpecimenPreparationStepContentItemSequence",vm:"1",version:"DICOM"},"(0040,0620)":{tag:"(0040,0620)",vr:"SQ",name:"SpecimenLocalizationContentItemSequence",vm:"1",version:"DICOM"},"(0040,0710)":{tag:"(0040,0710)",vr:"SQ",name:"WholeSlideMicroscopyImageFrameTypeSequence",vm:"1",version:"DICOM"},"(0040,071A)":{tag:"(0040,071A)",vr:"SQ",name:"ImageCenterPointCoordinatesSequence",vm:"1",version:"DICOM"},"(0040,072A)":{tag:"(0040,072A)",vr:"DS",name:"XOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,073A)":{tag:"(0040,073A)",vr:"DS",name:"YOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,074A)":{tag:"(0040,074A)",vr:"DS",name:"ZOffsetInSlideCoordinateSystem",vm:"1",version:"DICOM"},"(0040,08EA)":{tag:"(0040,08EA)",vr:"SQ",name:"MeasurementUnitsCodeSequence",vm:"1",version:"DICOM"},"(0040,1001)":{tag:"(0040,1001)",vr:"SH",name:"RequestedProcedureID",vm:"1",version:"DICOM"},"(0040,1002)":{tag:"(0040,1002)",vr:"LO",name:"ReasonForTheRequestedProcedure",vm:"1",version:"DICOM"},"(0040,1003)":{tag:"(0040,1003)",vr:"SH",name:"RequestedProcedurePriority",vm:"1",version:"DICOM"},"(0040,1004)":{tag:"(0040,1004)",vr:"LO",name:"PatientTransportArrangements",vm:"1",version:"DICOM"},"(0040,1005)":{tag:"(0040,1005)",vr:"LO",name:"RequestedProcedureLocation",vm:"1",version:"DICOM"},"(0040,1008)":{tag:"(0040,1008)",vr:"LO",name:"ConfidentialityCode",vm:"1",version:"DICOM"},"(0040,1009)":{tag:"(0040,1009)",vr:"SH",name:"ReportingPriority",vm:"1",version:"DICOM"},"(0040,100A)":{tag:"(0040,100A)",vr:"SQ",name:"ReasonForRequestedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,1010)":{tag:"(0040,1010)",vr:"PN",name:"NamesOfIntendedRecipientsOfResults",vm:"1-n",version:"DICOM"},"(0040,1011)":{tag:"(0040,1011)",vr:"SQ",name:"IntendedRecipientsOfResultsIdentificationSequence",vm:"1",version:"DICOM"},"(0040,1012)":{tag:"(0040,1012)",vr:"SQ",name:"ReasonForPerformedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,1101)":{tag:"(0040,1101)",vr:"SQ",name:"PersonIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0040,1102)":{tag:"(0040,1102)",vr:"ST",name:"PersonAddress",vm:"1",version:"DICOM"},"(0040,1103)":{tag:"(0040,1103)",vr:"LO",name:"PersonTelephoneNumbers",vm:"1-n",version:"DICOM"},"(0040,1104)":{tag:"(0040,1104)",vr:"LT",name:"PersonTelecomInformation",vm:"1",version:"DICOM"},"(0040,1400)":{tag:"(0040,1400)",vr:"LT",name:"RequestedProcedureComments",vm:"1",version:"DICOM"},"(0040,2004)":{tag:"(0040,2004)",vr:"DA",name:"IssueDateOfImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2005)":{tag:"(0040,2005)",vr:"TM",name:"IssueTimeOfImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2008)":{tag:"(0040,2008)",vr:"PN",name:"OrderEnteredBy",vm:"1",version:"DICOM"},"(0040,2009)":{tag:"(0040,2009)",vr:"SH",name:"OrderEntererLocation",vm:"1",version:"DICOM"},"(0040,2010)":{tag:"(0040,2010)",vr:"SH",name:"OrderCallbackPhoneNumber",vm:"1",version:"DICOM"},"(0040,2011)":{tag:"(0040,2011)",vr:"LT",name:"OrderCallbackTelecomInformation",vm:"1",version:"DICOM"},"(0040,2016)":{tag:"(0040,2016)",vr:"LO",name:"PlacerOrderNumberImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2017)":{tag:"(0040,2017)",vr:"LO",name:"FillerOrderNumberImagingServiceRequest",vm:"1",version:"DICOM"},"(0040,2400)":{tag:"(0040,2400)",vr:"LT",name:"ImagingServiceRequestComments",vm:"1",version:"DICOM"},"(0040,3001)":{tag:"(0040,3001)",vr:"LO",name:"ConfidentialityConstraintOnPatientDataDescription",vm:"1",version:"DICOM"},"(0040,4005)":{tag:"(0040,4005)",vr:"DT",name:"ScheduledProcedureStepStartDateTime",vm:"1",version:"DICOM"},"(0040,4007)":{tag:"(0040,4007)",vr:"SQ",name:"PerformedProcessingApplicationsCodeSequence",vm:"1",version:"DICOM"},"(0040,4008)":{tag:"(0040,4008)",vr:"DT",name:"ScheduledProcedureStepExpirationDateTime",vm:"1",version:"DICOM"},"(0040,4009)":{tag:"(0040,4009)",vr:"SQ",name:"HumanPerformerCodeSequence",vm:"1",version:"DICOM"},"(0040,4010)":{tag:"(0040,4010)",vr:"DT",name:"ScheduledProcedureStepModificationDateTime",vm:"1",version:"DICOM"},"(0040,4011)":{tag:"(0040,4011)",vr:"DT",name:"ExpectedCompletionDateTime",vm:"1",version:"DICOM"},"(0040,4018)":{tag:"(0040,4018)",vr:"SQ",name:"ScheduledWorkitemCodeSequence",vm:"1",version:"DICOM"},"(0040,4019)":{tag:"(0040,4019)",vr:"SQ",name:"PerformedWorkitemCodeSequence",vm:"1",version:"DICOM"},"(0040,4020)":{tag:"(0040,4020)",vr:"CS",name:"InputAvailabilityFlag",vm:"1",version:"DICOM"},"(0040,4021)":{tag:"(0040,4021)",vr:"SQ",name:"InputInformationSequence",vm:"1",version:"DICOM"},"(0040,4025)":{tag:"(0040,4025)",vr:"SQ",name:"ScheduledStationNameCodeSequence",vm:"1",version:"DICOM"},"(0040,4026)":{tag:"(0040,4026)",vr:"SQ",name:"ScheduledStationClassCodeSequence",vm:"1",version:"DICOM"},"(0040,4027)":{tag:"(0040,4027)",vr:"SQ",name:"ScheduledStationGeographicLocationCodeSequence",vm:"1",version:"DICOM"},"(0040,4028)":{tag:"(0040,4028)",vr:"SQ",name:"PerformedStationNameCodeSequence",vm:"1",version:"DICOM"},"(0040,4029)":{tag:"(0040,4029)",vr:"SQ",name:"PerformedStationClassCodeSequence",vm:"1",version:"DICOM"},"(0040,4030)":{tag:"(0040,4030)",vr:"SQ",name:"PerformedStationGeographicLocationCodeSequence",vm:"1",version:"DICOM"},"(0040,4033)":{tag:"(0040,4033)",vr:"SQ",name:"OutputInformationSequence",vm:"1",version:"DICOM"},"(0040,4034)":{tag:"(0040,4034)",vr:"SQ",name:"ScheduledHumanPerformersSequence",vm:"1",version:"DICOM"},"(0040,4035)":{tag:"(0040,4035)",vr:"SQ",name:"ActualHumanPerformersSequence",vm:"1",version:"DICOM"},"(0040,4036)":{tag:"(0040,4036)",vr:"LO",name:"HumanPerformerOrganization",vm:"1",version:"DICOM"},"(0040,4037)":{tag:"(0040,4037)",vr:"PN",name:"HumanPerformerName",vm:"1",version:"DICOM"},"(0040,4040)":{tag:"(0040,4040)",vr:"CS",name:"RawDataHandling",vm:"1",version:"DICOM"},"(0040,4041)":{tag:"(0040,4041)",vr:"CS",name:"InputReadinessState",vm:"1",version:"DICOM"},"(0040,4050)":{tag:"(0040,4050)",vr:"DT",name:"PerformedProcedureStepStartDateTime",vm:"1",version:"DICOM"},"(0040,4051)":{tag:"(0040,4051)",vr:"DT",name:"PerformedProcedureStepEndDateTime",vm:"1",version:"DICOM"},"(0040,4052)":{tag:"(0040,4052)",vr:"DT",name:"ProcedureStepCancellationDateTime",vm:"1",version:"DICOM"},"(0040,8302)":{tag:"(0040,8302)",vr:"DS",name:"EntranceDoseInmGy",vm:"1",version:"DICOM"},"(0040,8303)":{tag:"(0040,8303)",vr:"CS",name:"EntranceDoseDerivation",vm:"1",version:"DICOM"},"(0040,9092)":{tag:"(0040,9092)",vr:"SQ",name:"ParametricMapFrameTypeSequence",vm:"1",version:"DICOM"},"(0040,9094)":{tag:"(0040,9094)",vr:"SQ",name:"ReferencedImageRealWorldValueMappingSequence",vm:"1",version:"DICOM"},"(0040,9096)":{tag:"(0040,9096)",vr:"SQ",name:"RealWorldValueMappingSequence",vm:"1",version:"DICOM"},"(0040,9098)":{tag:"(0040,9098)",vr:"SQ",name:"PixelValueMappingCodeSequence",vm:"1",version:"DICOM"},"(0040,9210)":{tag:"(0040,9210)",vr:"SH",name:"LUTLabel",vm:"1",version:"DICOM"},"(0040,9211)":{tag:"(0040,9211)",vr:"xs",name:"RealWorldValueLastValueMapped",vm:"1",version:"DICOM"},"(0040,9212)":{tag:"(0040,9212)",vr:"FD",name:"RealWorldValueLUTData",vm:"1-n",version:"DICOM"},"(0040,9216)":{tag:"(0040,9216)",vr:"xs",name:"RealWorldValueFirstValueMapped",vm:"1",version:"DICOM"},"(0040,9220)":{tag:"(0040,9220)",vr:"SQ",name:"QuantityDefinitionSequence",vm:"1",version:"DICOM"},"(0040,9224)":{tag:"(0040,9224)",vr:"FD",name:"RealWorldValueIntercept",vm:"1",version:"DICOM"},"(0040,9225)":{tag:"(0040,9225)",vr:"FD",name:"RealWorldValueSlope",vm:"1",version:"DICOM"},"(0040,A010)":{tag:"(0040,A010)",vr:"CS",name:"RelationshipType",vm:"1",version:"DICOM"},"(0040,A027)":{tag:"(0040,A027)",vr:"LO",name:"VerifyingOrganization",vm:"1",version:"DICOM"},"(0040,A030)":{tag:"(0040,A030)",vr:"DT",name:"VerificationDateTime",vm:"1",version:"DICOM"},"(0040,A032)":{tag:"(0040,A032)",vr:"DT",name:"ObservationDateTime",vm:"1",version:"DICOM"},"(0040,A033)":{tag:"(0040,A033)",vr:"DT",name:"ObservationStartDateTime",vm:"1",version:"DICOM"},"(0040,A040)":{tag:"(0040,A040)",vr:"CS",name:"ValueType",vm:"1",version:"DICOM"},"(0040,A043)":{tag:"(0040,A043)",vr:"SQ",name:"ConceptNameCodeSequence",vm:"1",version:"DICOM"},"(0040,A050)":{tag:"(0040,A050)",vr:"CS",name:"ContinuityOfContent",vm:"1",version:"DICOM"},"(0040,A073)":{tag:"(0040,A073)",vr:"SQ",name:"VerifyingObserverSequence",vm:"1",version:"DICOM"},"(0040,A075)":{tag:"(0040,A075)",vr:"PN",name:"VerifyingObserverName",vm:"1",version:"DICOM"},"(0040,A078)":{tag:"(0040,A078)",vr:"SQ",name:"AuthorObserverSequence",vm:"1",version:"DICOM"},"(0040,A07A)":{tag:"(0040,A07A)",vr:"SQ",name:"ParticipantSequence",vm:"1",version:"DICOM"},"(0040,A07C)":{tag:"(0040,A07C)",vr:"SQ",name:"CustodialOrganizationSequence",vm:"1",version:"DICOM"},"(0040,A080)":{tag:"(0040,A080)",vr:"CS",name:"ParticipationType",vm:"1",version:"DICOM"},"(0040,A082)":{tag:"(0040,A082)",vr:"DT",name:"ParticipationDateTime",vm:"1",version:"DICOM"},"(0040,A084)":{tag:"(0040,A084)",vr:"CS",name:"ObserverType",vm:"1",version:"DICOM"},"(0040,A088)":{tag:"(0040,A088)",vr:"SQ",name:"VerifyingObserverIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0040,A0B0)":{tag:"(0040,A0B0)",vr:"US",name:"ReferencedWaveformChannels",vm:"2-2n",version:"DICOM"},"(0040,A120)":{tag:"(0040,A120)",vr:"DT",name:"DateTime",vm:"1",version:"DICOM"},"(0040,A121)":{tag:"(0040,A121)",vr:"DA",name:"Date",vm:"1",version:"DICOM"},"(0040,A122)":{tag:"(0040,A122)",vr:"TM",name:"Time",vm:"1",version:"DICOM"},"(0040,A123)":{tag:"(0040,A123)",vr:"PN",name:"PersonName",vm:"1",version:"DICOM"},"(0040,A124)":{tag:"(0040,A124)",vr:"UI",name:"UID",vm:"1",version:"DICOM"},"(0040,A130)":{tag:"(0040,A130)",vr:"CS",name:"TemporalRangeType",vm:"1",version:"DICOM"},"(0040,A132)":{tag:"(0040,A132)",vr:"UL",name:"ReferencedSamplePositions",vm:"1-n",version:"DICOM"},"(0040,A136)":{tag:"(0040,A136)",vr:"US",name:"ReferencedFrameNumbers",vm:"1-n",version:"DICOM"},"(0040,A138)":{tag:"(0040,A138)",vr:"DS",name:"ReferencedTimeOffsets",vm:"1-n",version:"DICOM"},"(0040,A13A)":{tag:"(0040,A13A)",vr:"DT",name:"ReferencedDateTime",vm:"1-n",version:"DICOM"},"(0040,A160)":{tag:"(0040,A160)",vr:"UT",name:"TextValue",vm:"1",version:"DICOM"},"(0040,A161)":{tag:"(0040,A161)",vr:"FD",name:"FloatingPointValue",vm:"1-n",version:"DICOM"},"(0040,A162)":{tag:"(0040,A162)",vr:"SL",name:"RationalNumeratorValue",vm:"1-n",version:"DICOM"},"(0040,A163)":{tag:"(0040,A163)",vr:"UL",name:"RationalDenominatorValue",vm:"1-n",version:"DICOM"},"(0040,A168)":{tag:"(0040,A168)",vr:"SQ",name:"ConceptCodeSequence",vm:"1",version:"DICOM"},"(0040,A170)":{tag:"(0040,A170)",vr:"SQ",name:"PurposeOfReferenceCodeSequence",vm:"1",version:"DICOM"},"(0040,A171)":{tag:"(0040,A171)",vr:"UI",name:"ObservationUID",vm:"1",version:"DICOM"},"(0040,A180)":{tag:"(0040,A180)",vr:"US",name:"AnnotationGroupNumber",vm:"1",version:"DICOM"},"(0040,A195)":{tag:"(0040,A195)",vr:"SQ",name:"ModifierCodeSequence",vm:"1",version:"DICOM"},"(0040,A300)":{tag:"(0040,A300)",vr:"SQ",name:"MeasuredValueSequence",vm:"1",version:"DICOM"},"(0040,A301)":{tag:"(0040,A301)",vr:"SQ",name:"NumericValueQualifierCodeSequence",vm:"1",version:"DICOM"},"(0040,A30A)":{tag:"(0040,A30A)",vr:"DS",name:"NumericValue",vm:"1-n",version:"DICOM"},"(0040,A360)":{tag:"(0040,A360)",vr:"SQ",name:"PredecessorDocumentsSequence",vm:"1",version:"DICOM"},"(0040,A370)":{tag:"(0040,A370)",vr:"SQ",name:"ReferencedRequestSequence",vm:"1",version:"DICOM"},"(0040,A372)":{tag:"(0040,A372)",vr:"SQ",name:"PerformedProcedureCodeSequence",vm:"1",version:"DICOM"},"(0040,A375)":{tag:"(0040,A375)",vr:"SQ",name:"CurrentRequestedProcedureEvidenceSequence",vm:"1",version:"DICOM"},"(0040,A385)":{tag:"(0040,A385)",vr:"SQ",name:"PertinentOtherEvidenceSequence",vm:"1",version:"DICOM"},"(0040,A390)":{tag:"(0040,A390)",vr:"SQ",name:"HL7StructuredDocumentReferenceSequence",vm:"1",version:"DICOM"},"(0040,A491)":{tag:"(0040,A491)",vr:"CS",name:"CompletionFlag",vm:"1",version:"DICOM"},"(0040,A492)":{tag:"(0040,A492)",vr:"LO",name:"CompletionFlagDescription",vm:"1",version:"DICOM"},"(0040,A493)":{tag:"(0040,A493)",vr:"CS",name:"VerificationFlag",vm:"1",version:"DICOM"},"(0040,A494)":{tag:"(0040,A494)",vr:"CS",name:"ArchiveRequested",vm:"1",version:"DICOM"},"(0040,A496)":{tag:"(0040,A496)",vr:"CS",name:"PreliminaryFlag",vm:"1",version:"DICOM"},"(0040,A504)":{tag:"(0040,A504)",vr:"SQ",name:"ContentTemplateSequence",vm:"1",version:"DICOM"},"(0040,A525)":{tag:"(0040,A525)",vr:"SQ",name:"IdenticalDocumentsSequence",vm:"1",version:"DICOM"},"(0040,A730)":{tag:"(0040,A730)",vr:"SQ",name:"ContentSequence",vm:"1",version:"DICOM"},"(0040,A801)":{tag:"(0040,A801)",vr:"SQ",name:"TabulatedValuesSequence",vm:"1",version:"DICOM"},"(0040,A802)":{tag:"(0040,A802)",vr:"UL",name:"NumberOfTableRows",vm:"1",version:"DICOM"},"(0040,A803)":{tag:"(0040,A803)",vr:"UL",name:"NumbeOfTableColumns",vm:"1",version:"DICOM"},"(0040,A804)":{tag:"(0040,A804)",vr:"UL",name:"TableRowNumber",vm:"1",version:"DICOM"},"(0040,A805)":{tag:"(0040,A805)",vr:"UL",name:"TableColumnNumber",vm:"1",version:"DICOM"},"(0040,A806)":{tag:"(0040,A806)",vr:"SQ",name:"TableRowDefinitionSequence",vm:"1",version:"DICOM"},"(0040,A807)":{tag:"(0040,A807)",vr:"SQ",name:"TableColumnDefinitionSequence",vm:"1",version:"DICOM"},"(0040,A808)":{tag:"(0040,A808)",vr:"SQ",name:"CellValuesSequence",vm:"1",version:"DICOM"},"(0040,B020)":{tag:"(0040,B020)",vr:"SQ",name:"WaveformAnnotationSequence",vm:"1",version:"DICOM"},"(0040,DB00)":{tag:"(0040,DB00)",vr:"CS",name:"TemplateIdentifier",vm:"1",version:"DICOM"},"(0040,DB73)":{tag:"(0040,DB73)",vr:"UL",name:"ReferencedContentItemIdentifier",vm:"1-n",version:"DICOM"},"(0040,E001)":{tag:"(0040,E001)",vr:"ST",name:"HL7InstanceIdentifier",vm:"1",version:"DICOM"},"(0040,E004)":{tag:"(0040,E004)",vr:"DT",name:"HL7DocumentEffectiveTime",vm:"1",version:"DICOM"},"(0040,E006)":{tag:"(0040,E006)",vr:"SQ",name:"HL7DocumentTypeCodeSequence",vm:"1",version:"DICOM"},"(0040,E008)":{tag:"(0040,E008)",vr:"SQ",name:"DocumentClassCodeSequence",vm:"1",version:"DICOM"},"(0040,E010)":{tag:"(0040,E010)",vr:"UR",name:"RetrieveURI",vm:"1",version:"DICOM"},"(0040,E011)":{tag:"(0040,E011)",vr:"UI",name:"RetrieveLocationUID",vm:"1",version:"DICOM"},"(0040,E020)":{tag:"(0040,E020)",vr:"CS",name:"TypeOfInstances",vm:"1",version:"DICOM"},"(0040,E021)":{tag:"(0040,E021)",vr:"SQ",name:"DICOMRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E022)":{tag:"(0040,E022)",vr:"SQ",name:"DICOMMediaRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E023)":{tag:"(0040,E023)",vr:"SQ",name:"WADORetrievalSequence",vm:"1",version:"DICOM"},"(0040,E024)":{tag:"(0040,E024)",vr:"SQ",name:"XDSRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E025)":{tag:"(0040,E025)",vr:"SQ",name:"WADORSRetrievalSequence",vm:"1",version:"DICOM"},"(0040,E030)":{tag:"(0040,E030)",vr:"UI",name:"RepositoryUniqueID",vm:"1",version:"DICOM"},"(0040,E031)":{tag:"(0040,E031)",vr:"UI",name:"HomeCommunityID",vm:"1",version:"DICOM"},"(0042,0010)":{tag:"(0042,0010)",vr:"ST",name:"DocumentTitle",vm:"1",version:"DICOM"},"(0042,0011)":{tag:"(0042,0011)",vr:"OB",name:"EncapsulatedDocument",vm:"1",version:"DICOM"},"(0042,0012)":{tag:"(0042,0012)",vr:"LO",name:"MIMETypeOfEncapsulatedDocument",vm:"1",version:"DICOM"},"(0042,0013)":{tag:"(0042,0013)",vr:"SQ",name:"SourceInstanceSequence",vm:"1",version:"DICOM"},"(0042,0014)":{tag:"(0042,0014)",vr:"LO",name:"ListOfMIMETypes",vm:"1-n",version:"DICOM"},"(0042,0015)":{tag:"(0042,0015)",vr:"UL",name:"EncapsulatedDocumentLength",vm:"1",version:"DICOM"},"(0044,0001)":{tag:"(0044,0001)",vr:"ST",name:"ProductPackageIdentifier",vm:"1",version:"DICOM"},"(0044,0002)":{tag:"(0044,0002)",vr:"CS",name:"SubstanceAdministrationApproval",vm:"1",version:"DICOM"},"(0044,0003)":{tag:"(0044,0003)",vr:"LT",name:"ApprovalStatusFurtherDescription",vm:"1",version:"DICOM"},"(0044,0004)":{tag:"(0044,0004)",vr:"DT",name:"ApprovalStatusDateTime",vm:"1",version:"DICOM"},"(0044,0007)":{tag:"(0044,0007)",vr:"SQ",name:"ProductTypeCodeSequence",vm:"1",version:"DICOM"},"(0044,0008)":{tag:"(0044,0008)",vr:"LO",name:"ProductName",vm:"1-n",version:"DICOM"},"(0044,0009)":{tag:"(0044,0009)",vr:"LT",name:"ProductDescription",vm:"1",version:"DICOM"},"(0044,000A)":{tag:"(0044,000A)",vr:"LO",name:"ProductLotIdentifier",vm:"1",version:"DICOM"},"(0044,000B)":{tag:"(0044,000B)",vr:"DT",name:"ProductExpirationDateTime",vm:"1",version:"DICOM"},"(0044,0010)":{tag:"(0044,0010)",vr:"DT",name:"SubstanceAdministrationDateTime",vm:"1",version:"DICOM"},"(0044,0011)":{tag:"(0044,0011)",vr:"LO",name:"SubstanceAdministrationNotes",vm:"1",version:"DICOM"},"(0044,0012)":{tag:"(0044,0012)",vr:"LO",name:"SubstanceAdministrationDeviceID",vm:"1",version:"DICOM"},"(0044,0013)":{tag:"(0044,0013)",vr:"SQ",name:"ProductParameterSequence",vm:"1",version:"DICOM"},"(0044,0019)":{tag:"(0044,0019)",vr:"SQ",name:"SubstanceAdministrationParameterSequence",vm:"1",version:"DICOM"},"(0044,0100)":{tag:"(0044,0100)",vr:"SQ",name:"ApprovalSequence",vm:"1",version:"DICOM"},"(0044,0101)":{tag:"(0044,0101)",vr:"SQ",name:"AssertionCodeSequence",vm:"1",version:"DICOM"},"(0044,0102)":{tag:"(0044,0102)",vr:"UI",name:"AssertionUID",vm:"1",version:"DICOM"},"(0044,0103)":{tag:"(0044,0103)",vr:"SQ",name:"AsserterIdentificationSequence",vm:"1",version:"DICOM"},"(0044,0104)":{tag:"(0044,0104)",vr:"DT",name:"AssertionDateTime",vm:"1",version:"DICOM"},"(0044,0105)":{tag:"(0044,0105)",vr:"DT",name:"AssertionExpirationDateTime",vm:"1",version:"DICOM"},"(0044,0106)":{tag:"(0044,0106)",vr:"UT",name:"AssertionComments",vm:"1",version:"DICOM"},"(0044,0107)":{tag:"(0044,0107)",vr:"SQ",name:"RelatedAssertionSequence",vm:"1",version:"DICOM"},"(0044,0108)":{tag:"(0044,0108)",vr:"UI",name:"ReferencedAssertionUID",vm:"1",version:"DICOM"},"(0044,0109)":{tag:"(0044,0109)",vr:"SQ",name:"ApprovalSubjectSequence",vm:"1",version:"DICOM"},"(0044,010A)":{tag:"(0044,010A)",vr:"SQ",name:"OrganizationalRoleCodeSequence",vm:"1",version:"DICOM"},"(0046,0012)":{tag:"(0046,0012)",vr:"LO",name:"LensDescription",vm:"1",version:"DICOM"},"(0046,0014)":{tag:"(0046,0014)",vr:"SQ",name:"RightLensSequence",vm:"1",version:"DICOM"},"(0046,0015)":{tag:"(0046,0015)",vr:"SQ",name:"LeftLensSequence",vm:"1",version:"DICOM"},"(0046,0016)":{tag:"(0046,0016)",vr:"SQ",name:"UnspecifiedLateralityLensSequence",vm:"1",version:"DICOM"},"(0046,0018)":{tag:"(0046,0018)",vr:"SQ",name:"CylinderSequence",vm:"1",version:"DICOM"},"(0046,0028)":{tag:"(0046,0028)",vr:"SQ",name:"PrismSequence",vm:"1",version:"DICOM"},"(0046,0030)":{tag:"(0046,0030)",vr:"FD",name:"HorizontalPrismPower",vm:"1",version:"DICOM"},"(0046,0032)":{tag:"(0046,0032)",vr:"CS",name:"HorizontalPrismBase",vm:"1",version:"DICOM"},"(0046,0034)":{tag:"(0046,0034)",vr:"FD",name:"VerticalPrismPower",vm:"1",version:"DICOM"},"(0046,0036)":{tag:"(0046,0036)",vr:"CS",name:"VerticalPrismBase",vm:"1",version:"DICOM"},"(0046,0038)":{tag:"(0046,0038)",vr:"CS",name:"LensSegmentType",vm:"1",version:"DICOM"},"(0046,0040)":{tag:"(0046,0040)",vr:"FD",name:"OpticalTransmittance",vm:"1",version:"DICOM"},"(0046,0042)":{tag:"(0046,0042)",vr:"FD",name:"ChannelWidth",vm:"1",version:"DICOM"},"(0046,0044)":{tag:"(0046,0044)",vr:"FD",name:"PupilSize",vm:"1",version:"DICOM"},"(0046,0046)":{tag:"(0046,0046)",vr:"FD",name:"CornealSize",vm:"1",version:"DICOM"},"(0046,0047)":{tag:"(0046,0047)",vr:"SQ",name:"CornealSizeSequence",vm:"1",version:"DICOM"},"(0046,0050)":{tag:"(0046,0050)",vr:"SQ",name:"AutorefractionRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0052)":{tag:"(0046,0052)",vr:"SQ",name:"AutorefractionLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0060)":{tag:"(0046,0060)",vr:"FD",name:"DistancePupillaryDistance",vm:"1",version:"DICOM"},"(0046,0062)":{tag:"(0046,0062)",vr:"FD",name:"NearPupillaryDistance",vm:"1",version:"DICOM"},"(0046,0063)":{tag:"(0046,0063)",vr:"FD",name:"IntermediatePupillaryDistance",vm:"1",version:"DICOM"},"(0046,0064)":{tag:"(0046,0064)",vr:"FD",name:"OtherPupillaryDistance",vm:"1",version:"DICOM"},"(0046,0070)":{tag:"(0046,0070)",vr:"SQ",name:"KeratometryRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0071)":{tag:"(0046,0071)",vr:"SQ",name:"KeratometryLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0074)":{tag:"(0046,0074)",vr:"SQ",name:"SteepKeratometricAxisSequence",vm:"1",version:"DICOM"},"(0046,0075)":{tag:"(0046,0075)",vr:"FD",name:"RadiusOfCurvature",vm:"1",version:"DICOM"},"(0046,0076)":{tag:"(0046,0076)",vr:"FD",name:"KeratometricPower",vm:"1",version:"DICOM"},"(0046,0077)":{tag:"(0046,0077)",vr:"FD",name:"KeratometricAxis",vm:"1",version:"DICOM"},"(0046,0080)":{tag:"(0046,0080)",vr:"SQ",name:"FlatKeratometricAxisSequence",vm:"1",version:"DICOM"},"(0046,0092)":{tag:"(0046,0092)",vr:"CS",name:"BackgroundColor",vm:"1",version:"DICOM"},"(0046,0094)":{tag:"(0046,0094)",vr:"CS",name:"Optotype",vm:"1",version:"DICOM"},"(0046,0095)":{tag:"(0046,0095)",vr:"CS",name:"OptotypePresentation",vm:"1",version:"DICOM"},"(0046,0097)":{tag:"(0046,0097)",vr:"SQ",name:"SubjectiveRefractionRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0098)":{tag:"(0046,0098)",vr:"SQ",name:"SubjectiveRefractionLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0100)":{tag:"(0046,0100)",vr:"SQ",name:"AddNearSequence",vm:"1",version:"DICOM"},"(0046,0101)":{tag:"(0046,0101)",vr:"SQ",name:"AddIntermediateSequence",vm:"1",version:"DICOM"},"(0046,0102)":{tag:"(0046,0102)",vr:"SQ",name:"AddOtherSequence",vm:"1",version:"DICOM"},"(0046,0104)":{tag:"(0046,0104)",vr:"FD",name:"AddPower",vm:"1",version:"DICOM"},"(0046,0106)":{tag:"(0046,0106)",vr:"FD",name:"ViewingDistance",vm:"1",version:"DICOM"},"(0046,0110)":{tag:"(0046,0110)",vr:"SQ",name:"CorneaMeasurementsSequence",vm:"1",version:"DICOM"},"(0046,0111)":{tag:"(0046,0111)",vr:"SQ",name:"SourceOfCorneaMeasurementDataCodeSequence",vm:"1",version:"DICOM"},"(0046,0112)":{tag:"(0046,0112)",vr:"SQ",name:"SteepCornealAxisSequence",vm:"1",version:"DICOM"},"(0046,0113)":{tag:"(0046,0113)",vr:"SQ",name:"FlatCornealAxisSequence",vm:"1",version:"DICOM"},"(0046,0114)":{tag:"(0046,0114)",vr:"FD",name:"CornealPower",vm:"1",version:"DICOM"},"(0046,0115)":{tag:"(0046,0115)",vr:"FD",name:"CornealAxis",vm:"1",version:"DICOM"},"(0046,0116)":{tag:"(0046,0116)",vr:"SQ",name:"CorneaMeasurementMethodCodeSequence",vm:"1",version:"DICOM"},"(0046,0117)":{tag:"(0046,0117)",vr:"FL",name:"RefractiveIndexOfCornea",vm:"1",version:"DICOM"},"(0046,0118)":{tag:"(0046,0118)",vr:"FL",name:"RefractiveIndexOfAqueousHumor",vm:"1",version:"DICOM"},"(0046,0121)":{tag:"(0046,0121)",vr:"SQ",name:"VisualAcuityTypeCodeSequence",vm:"1",version:"DICOM"},"(0046,0122)":{tag:"(0046,0122)",vr:"SQ",name:"VisualAcuityRightEyeSequence",vm:"1",version:"DICOM"},"(0046,0123)":{tag:"(0046,0123)",vr:"SQ",name:"VisualAcuityLeftEyeSequence",vm:"1",version:"DICOM"},"(0046,0124)":{tag:"(0046,0124)",vr:"SQ",name:"VisualAcuityBothEyesOpenSequence",vm:"1",version:"DICOM"},"(0046,0125)":{tag:"(0046,0125)",vr:"CS",name:"ViewingDistanceType",vm:"1",version:"DICOM"},"(0046,0135)":{tag:"(0046,0135)",vr:"SS",name:"VisualAcuityModifiers",vm:"2",version:"DICOM"},"(0046,0137)":{tag:"(0046,0137)",vr:"FD",name:"DecimalVisualAcuity",vm:"1",version:"DICOM"},"(0046,0139)":{tag:"(0046,0139)",vr:"LO",name:"OptotypeDetailedDefinition",vm:"1",version:"DICOM"},"(0046,0145)":{tag:"(0046,0145)",vr:"SQ",name:"ReferencedRefractiveMeasurementsSequence",vm:"1",version:"DICOM"},"(0046,0146)":{tag:"(0046,0146)",vr:"FD",name:"SpherePower",vm:"1",version:"DICOM"},"(0046,0147)":{tag:"(0046,0147)",vr:"FD",name:"CylinderPower",vm:"1",version:"DICOM"},"(0046,0201)":{tag:"(0046,0201)",vr:"CS",name:"CornealTopographySurface",vm:"1",version:"DICOM"},"(0046,0202)":{tag:"(0046,0202)",vr:"FL",name:"CornealVertexLocation",vm:"2",version:"DICOM"},"(0046,0203)":{tag:"(0046,0203)",vr:"FL",name:"PupilCentroidXCoordinate",vm:"1",version:"DICOM"},"(0046,0204)":{tag:"(0046,0204)",vr:"FL",name:"PupilCentroidYCoordinate",vm:"1",version:"DICOM"},"(0046,0205)":{tag:"(0046,0205)",vr:"FL",name:"EquivalentPupilRadius",vm:"1",version:"DICOM"},"(0046,0207)":{tag:"(0046,0207)",vr:"SQ",name:"CornealTopographyMapTypeCodeSequence",vm:"1",version:"DICOM"},"(0046,0208)":{tag:"(0046,0208)",vr:"IS",name:"VerticesOfTheOutlineOfPupil",vm:"2-2n",version:"DICOM"},"(0046,0210)":{tag:"(0046,0210)",vr:"SQ",name:"CornealTopographyMappingNormalsSequence",vm:"1",version:"DICOM"},"(0046,0211)":{tag:"(0046,0211)",vr:"SQ",name:"MaximumCornealCurvatureSequence",vm:"1",version:"DICOM"},"(0046,0212)":{tag:"(0046,0212)",vr:"FL",name:"MaximumCornealCurvature",vm:"1",version:"DICOM"},"(0046,0213)":{tag:"(0046,0213)",vr:"FL",name:"MaximumCornealCurvatureLocation",vm:"2",version:"DICOM"},"(0046,0215)":{tag:"(0046,0215)",vr:"SQ",name:"MinimumKeratometricSequence",vm:"1",version:"DICOM"},"(0046,0218)":{tag:"(0046,0218)",vr:"SQ",name:"SimulatedKeratometricCylinderSequence",vm:"1",version:"DICOM"},"(0046,0220)":{tag:"(0046,0220)",vr:"FL",name:"AverageCornealPower",vm:"1",version:"DICOM"},"(0046,0224)":{tag:"(0046,0224)",vr:"FL",name:"CornealISValue",vm:"1",version:"DICOM"},"(0046,0227)":{tag:"(0046,0227)",vr:"FL",name:"AnalyzedArea",vm:"1",version:"DICOM"},"(0046,0230)":{tag:"(0046,0230)",vr:"FL",name:"SurfaceRegularityIndex",vm:"1",version:"DICOM"},"(0046,0232)":{tag:"(0046,0232)",vr:"FL",name:"SurfaceAsymmetryIndex",vm:"1",version:"DICOM"},"(0046,0234)":{tag:"(0046,0234)",vr:"FL",name:"CornealEccentricityIndex",vm:"1",version:"DICOM"},"(0046,0236)":{tag:"(0046,0236)",vr:"FL",name:"KeratoconusPredictionIndex",vm:"1",version:"DICOM"},"(0046,0238)":{tag:"(0046,0238)",vr:"FL",name:"DecimalPotentialVisualAcuity",vm:"1",version:"DICOM"},"(0046,0242)":{tag:"(0046,0242)",vr:"CS",name:"CornealTopographyMapQualityEvaluation",vm:"1",version:"DICOM"},"(0046,0244)":{tag:"(0046,0244)",vr:"SQ",name:"SourceImageCornealProcessedDataSequence",vm:"1",version:"DICOM"},"(0046,0247)":{tag:"(0046,0247)",vr:"FL",name:"CornealPointLocation",vm:"3",version:"DICOM"},"(0046,0248)":{tag:"(0046,0248)",vr:"CS",name:"CornealPointEstimated",vm:"1",version:"DICOM"},"(0046,0249)":{tag:"(0046,0249)",vr:"FL",name:"AxialPower",vm:"1",version:"DICOM"},"(0046,0250)":{tag:"(0046,0250)",vr:"FL",name:"TangentialPower",vm:"1",version:"DICOM"},"(0046,0251)":{tag:"(0046,0251)",vr:"FL",name:"RefractivePower",vm:"1",version:"DICOM"},"(0046,0252)":{tag:"(0046,0252)",vr:"FL",name:"RelativeElevation",vm:"1",version:"DICOM"},"(0046,0253)":{tag:"(0046,0253)",vr:"FL",name:"CornealWavefront",vm:"1",version:"DICOM"},"(0048,0001)":{tag:"(0048,0001)",vr:"FL",name:"ImagedVolumeWidth",vm:"1",version:"DICOM"},"(0048,0002)":{tag:"(0048,0002)",vr:"FL",name:"ImagedVolumeHeight",vm:"1",version:"DICOM"},"(0048,0003)":{tag:"(0048,0003)",vr:"FL",name:"ImagedVolumeDepth",vm:"1",version:"DICOM"},"(0048,0006)":{tag:"(0048,0006)",vr:"UL",name:"TotalPixelMatrixColumns",vm:"1",version:"DICOM"},"(0048,0007)":{tag:"(0048,0007)",vr:"UL",name:"TotalPixelMatrixRows",vm:"1",version:"DICOM"},"(0048,0008)":{tag:"(0048,0008)",vr:"SQ",name:"TotalPixelMatrixOriginSequence",vm:"1",version:"DICOM"},"(0048,0010)":{tag:"(0048,0010)",vr:"CS",name:"SpecimenLabelInImage",vm:"1",version:"DICOM"},"(0048,0011)":{tag:"(0048,0011)",vr:"CS",name:"FocusMethod",vm:"1",version:"DICOM"},"(0048,0012)":{tag:"(0048,0012)",vr:"CS",name:"ExtendedDepthOfField",vm:"1",version:"DICOM"},"(0048,0013)":{tag:"(0048,0013)",vr:"US",name:"NumberOfFocalPlanes",vm:"1",version:"DICOM"},"(0048,0014)":{tag:"(0048,0014)",vr:"FL",name:"DistanceBetweenFocalPlanes",vm:"1",version:"DICOM"},"(0048,0015)":{tag:"(0048,0015)",vr:"US",name:"RecommendedAbsentPixelCIELabValue",vm:"3",version:"DICOM"},"(0048,0100)":{tag:"(0048,0100)",vr:"SQ",name:"IlluminatorTypeCodeSequence",vm:"1",version:"DICOM"},"(0048,0102)":{tag:"(0048,0102)",vr:"DS",name:"ImageOrientationSlide",vm:"6",version:"DICOM"},"(0048,0105)":{tag:"(0048,0105)",vr:"SQ",name:"OpticalPathSequence",vm:"1",version:"DICOM"},"(0048,0106)":{tag:"(0048,0106)",vr:"SH",name:"OpticalPathIdentifier",vm:"1",version:"DICOM"},"(0048,0107)":{tag:"(0048,0107)",vr:"ST",name:"OpticalPathDescription",vm:"1",version:"DICOM"},"(0048,0108)":{tag:"(0048,0108)",vr:"SQ",name:"IlluminationColorCodeSequence",vm:"1",version:"DICOM"},"(0048,0110)":{tag:"(0048,0110)",vr:"SQ",name:"SpecimenReferenceSequence",vm:"1",version:"DICOM"},"(0048,0111)":{tag:"(0048,0111)",vr:"DS",name:"CondenserLensPower",vm:"1",version:"DICOM"},"(0048,0112)":{tag:"(0048,0112)",vr:"DS",name:"ObjectiveLensPower",vm:"1",version:"DICOM"},"(0048,0113)":{tag:"(0048,0113)",vr:"DS",name:"ObjectiveLensNumericalAperture",vm:"1",version:"DICOM"},"(0048,0120)":{tag:"(0048,0120)",vr:"SQ",name:"PaletteColorLookupTableSequence",vm:"1",version:"DICOM"},"(0048,0200)":{tag:"(0048,0200)",vr:"SQ",name:"ReferencedImageNavigationSequence",vm:"1",version:"DICOM"},"(0048,0201)":{tag:"(0048,0201)",vr:"US",name:"TopLeftHandCornerOfLocalizerArea",vm:"2",version:"DICOM"},"(0048,0202)":{tag:"(0048,0202)",vr:"US",name:"BottomRightHandCornerOfLocalizerArea",vm:"2",version:"DICOM"},"(0048,0207)":{tag:"(0048,0207)",vr:"SQ",name:"OpticalPathIdentificationSequence",vm:"1",version:"DICOM"},"(0048,021A)":{tag:"(0048,021A)",vr:"SQ",name:"PlanePositionSlideSequence",vm:"1",version:"DICOM"},"(0048,021E)":{tag:"(0048,021E)",vr:"SL",name:"ColumnPositionInTotalImagePixelMatrix",vm:"1",version:"DICOM"},"(0048,021F)":{tag:"(0048,021F)",vr:"SL",name:"RowPositionInTotalImagePixelMatrix",vm:"1",version:"DICOM"},"(0048,0301)":{tag:"(0048,0301)",vr:"CS",name:"PixelOriginInterpretation",vm:"1",version:"DICOM"},"(0048,0302)":{tag:"(0048,0302)",vr:"UL",name:"NumberOfOpticalPaths",vm:"1",version:"DICOM"},"(0048,0303)":{tag:"(0048,0303)",vr:"UL",name:"TotalPixelMatrixFocalPlanes",vm:"1",version:"DICOM"},"(0050,0004)":{tag:"(0050,0004)",vr:"CS",name:"CalibrationImage",vm:"1",version:"DICOM"},"(0050,0010)":{tag:"(0050,0010)",vr:"SQ",name:"DeviceSequence",vm:"1",version:"DICOM"},"(0050,0012)":{tag:"(0050,0012)",vr:"SQ",name:"ContainerComponentTypeCodeSequence",vm:"1",version:"DICOM"},"(0050,0013)":{tag:"(0050,0013)",vr:"FD",name:"ContainerComponentThickness",vm:"1",version:"DICOM"},"(0050,0014)":{tag:"(0050,0014)",vr:"DS",name:"DeviceLength",vm:"1",version:"DICOM"},"(0050,0015)":{tag:"(0050,0015)",vr:"FD",name:"ContainerComponentWidth",vm:"1",version:"DICOM"},"(0050,0016)":{tag:"(0050,0016)",vr:"DS",name:"DeviceDiameter",vm:"1",version:"DICOM"},"(0050,0017)":{tag:"(0050,0017)",vr:"CS",name:"DeviceDiameterUnits",vm:"1",version:"DICOM"},"(0050,0018)":{tag:"(0050,0018)",vr:"DS",name:"DeviceVolume",vm:"1",version:"DICOM"},"(0050,0019)":{tag:"(0050,0019)",vr:"DS",name:"InterMarkerDistance",vm:"1",version:"DICOM"},"(0050,001A)":{tag:"(0050,001A)",vr:"CS",name:"ContainerComponentMaterial",vm:"1",version:"DICOM"},"(0050,001B)":{tag:"(0050,001B)",vr:"LO",name:"ContainerComponentID",vm:"1",version:"DICOM"},"(0050,001C)":{tag:"(0050,001C)",vr:"FD",name:"ContainerComponentLength",vm:"1",version:"DICOM"},"(0050,001D)":{tag:"(0050,001D)",vr:"FD",name:"ContainerComponentDiameter",vm:"1",version:"DICOM"},"(0050,001E)":{tag:"(0050,001E)",vr:"LO",name:"ContainerComponentDescription",vm:"1",version:"DICOM"},"(0050,0020)":{tag:"(0050,0020)",vr:"LO",name:"DeviceDescription",vm:"1",version:"DICOM"},"(0050,0021)":{tag:"(0050,0021)",vr:"ST",name:"LongDeviceDescription",vm:"1",version:"DICOM"},"(0052,0001)":{tag:"(0052,0001)",vr:"FL",name:"ContrastBolusIngredientPercentByVolume",vm:"1",version:"DICOM"},"(0052,0002)":{tag:"(0052,0002)",vr:"FD",name:"OCTFocalDistance",vm:"1",version:"DICOM"},"(0052,0003)":{tag:"(0052,0003)",vr:"FD",name:"BeamSpotSize",vm:"1",version:"DICOM"},"(0052,0004)":{tag:"(0052,0004)",vr:"FD",name:"EffectiveRefractiveIndex",vm:"1",version:"DICOM"},"(0052,0006)":{tag:"(0052,0006)",vr:"CS",name:"OCTAcquisitionDomain",vm:"1",version:"DICOM"},"(0052,0007)":{tag:"(0052,0007)",vr:"FD",name:"OCTOpticalCenterWavelength",vm:"1",version:"DICOM"},"(0052,0008)":{tag:"(0052,0008)",vr:"FD",name:"AxialResolution",vm:"1",version:"DICOM"},"(0052,0009)":{tag:"(0052,0009)",vr:"FD",name:"RangingDepth",vm:"1",version:"DICOM"},"(0052,0011)":{tag:"(0052,0011)",vr:"FD",name:"ALineRate",vm:"1",version:"DICOM"},"(0052,0012)":{tag:"(0052,0012)",vr:"US",name:"ALinesPerFrame",vm:"1",version:"DICOM"},"(0052,0013)":{tag:"(0052,0013)",vr:"FD",name:"CatheterRotationalRate",vm:"1",version:"DICOM"},"(0052,0014)":{tag:"(0052,0014)",vr:"FD",name:"ALinePixelSpacing",vm:"1",version:"DICOM"},"(0052,0016)":{tag:"(0052,0016)",vr:"SQ",name:"ModeOfPercutaneousAccessSequence",vm:"1",version:"DICOM"},"(0052,0025)":{tag:"(0052,0025)",vr:"SQ",name:"IntravascularOCTFrameTypeSequence",vm:"1",version:"DICOM"},"(0052,0026)":{tag:"(0052,0026)",vr:"CS",name:"OCTZOffsetApplied",vm:"1",version:"DICOM"},"(0052,0027)":{tag:"(0052,0027)",vr:"SQ",name:"IntravascularFrameContentSequence",vm:"1",version:"DICOM"},"(0052,0028)":{tag:"(0052,0028)",vr:"FD",name:"IntravascularLongitudinalDistance",vm:"1",version:"DICOM"},"(0052,0029)":{tag:"(0052,0029)",vr:"SQ",name:"IntravascularOCTFrameContentSequence",vm:"1",version:"DICOM"},"(0052,0030)":{tag:"(0052,0030)",vr:"SS",name:"OCTZOffsetCorrection",vm:"1",version:"DICOM"},"(0052,0031)":{tag:"(0052,0031)",vr:"CS",name:"CatheterDirectionOfRotation",vm:"1",version:"DICOM"},"(0052,0033)":{tag:"(0052,0033)",vr:"FD",name:"SeamLineLocation",vm:"1",version:"DICOM"},"(0052,0034)":{tag:"(0052,0034)",vr:"FD",name:"FirstALineLocation",vm:"1",version:"DICOM"},"(0052,0036)":{tag:"(0052,0036)",vr:"US",name:"SeamLineIndex",vm:"1",version:"DICOM"},"(0052,0038)":{tag:"(0052,0038)",vr:"US",name:"NumberOfPaddedALines",vm:"1",version:"DICOM"},"(0052,0039)":{tag:"(0052,0039)",vr:"CS",name:"InterpolationType",vm:"1",version:"DICOM"},"(0052,003A)":{tag:"(0052,003A)",vr:"CS",name:"RefractiveIndexApplied",vm:"1",version:"DICOM"},"(0054,0010)":{tag:"(0054,0010)",vr:"US",name:"EnergyWindowVector",vm:"1-n",version:"DICOM"},"(0054,0011)":{tag:"(0054,0011)",vr:"US",name:"NumberOfEnergyWindows",vm:"1",version:"DICOM"},"(0054,0012)":{tag:"(0054,0012)",vr:"SQ",name:"EnergyWindowInformationSequence",vm:"1",version:"DICOM"},"(0054,0013)":{tag:"(0054,0013)",vr:"SQ",name:"EnergyWindowRangeSequence",vm:"1",version:"DICOM"},"(0054,0014)":{tag:"(0054,0014)",vr:"DS",name:"EnergyWindowLowerLimit",vm:"1",version:"DICOM"},"(0054,0015)":{tag:"(0054,0015)",vr:"DS",name:"EnergyWindowUpperLimit",vm:"1",version:"DICOM"},"(0054,0016)":{tag:"(0054,0016)",vr:"SQ",name:"RadiopharmaceuticalInformationSequence",vm:"1",version:"DICOM"},"(0054,0017)":{tag:"(0054,0017)",vr:"IS",name:"ResidualSyringeCounts",vm:"1",version:"DICOM"},"(0054,0018)":{tag:"(0054,0018)",vr:"SH",name:"EnergyWindowName",vm:"1",version:"DICOM"},"(0054,0020)":{tag:"(0054,0020)",vr:"US",name:"DetectorVector",vm:"1-n",version:"DICOM"},"(0054,0021)":{tag:"(0054,0021)",vr:"US",name:"NumberOfDetectors",vm:"1",version:"DICOM"},"(0054,0022)":{tag:"(0054,0022)",vr:"SQ",name:"DetectorInformationSequence",vm:"1",version:"DICOM"},"(0054,0030)":{tag:"(0054,0030)",vr:"US",name:"PhaseVector",vm:"1-n",version:"DICOM"},"(0054,0031)":{tag:"(0054,0031)",vr:"US",name:"NumberOfPhases",vm:"1",version:"DICOM"},"(0054,0032)":{tag:"(0054,0032)",vr:"SQ",name:"PhaseInformationSequence",vm:"1",version:"DICOM"},"(0054,0033)":{tag:"(0054,0033)",vr:"US",name:"NumberOfFramesInPhase",vm:"1",version:"DICOM"},"(0054,0036)":{tag:"(0054,0036)",vr:"IS",name:"PhaseDelay",vm:"1",version:"DICOM"},"(0054,0038)":{tag:"(0054,0038)",vr:"IS",name:"PauseBetweenFrames",vm:"1",version:"DICOM"},"(0054,0039)":{tag:"(0054,0039)",vr:"CS",name:"PhaseDescription",vm:"1",version:"DICOM"},"(0054,0050)":{tag:"(0054,0050)",vr:"US",name:"RotationVector",vm:"1-n",version:"DICOM"},"(0054,0051)":{tag:"(0054,0051)",vr:"US",name:"NumberOfRotations",vm:"1",version:"DICOM"},"(0054,0052)":{tag:"(0054,0052)",vr:"SQ",name:"RotationInformationSequence",vm:"1",version:"DICOM"},"(0054,0053)":{tag:"(0054,0053)",vr:"US",name:"NumberOfFramesInRotation",vm:"1",version:"DICOM"},"(0054,0060)":{tag:"(0054,0060)",vr:"US",name:"RRIntervalVector",vm:"1-n",version:"DICOM"},"(0054,0061)":{tag:"(0054,0061)",vr:"US",name:"NumberOfRRIntervals",vm:"1",version:"DICOM"},"(0054,0062)":{tag:"(0054,0062)",vr:"SQ",name:"GatedInformationSequence",vm:"1",version:"DICOM"},"(0054,0063)":{tag:"(0054,0063)",vr:"SQ",name:"DataInformationSequence",vm:"1",version:"DICOM"},"(0054,0070)":{tag:"(0054,0070)",vr:"US",name:"TimeSlotVector",vm:"1-n",version:"DICOM"},"(0054,0071)":{tag:"(0054,0071)",vr:"US",name:"NumberOfTimeSlots",vm:"1",version:"DICOM"},"(0054,0072)":{tag:"(0054,0072)",vr:"SQ",name:"TimeSlotInformationSequence",vm:"1",version:"DICOM"},"(0054,0073)":{tag:"(0054,0073)",vr:"DS",name:"TimeSlotTime",vm:"1",version:"DICOM"},"(0054,0080)":{tag:"(0054,0080)",vr:"US",name:"SliceVector",vm:"1-n",version:"DICOM"},"(0054,0081)":{tag:"(0054,0081)",vr:"US",name:"NumberOfSlices",vm:"1",version:"DICOM"},"(0054,0090)":{tag:"(0054,0090)",vr:"US",name:"AngularViewVector",vm:"1-n",version:"DICOM"},"(0054,0100)":{tag:"(0054,0100)",vr:"US",name:"TimeSliceVector",vm:"1-n",version:"DICOM"},"(0054,0101)":{tag:"(0054,0101)",vr:"US",name:"NumberOfTimeSlices",vm:"1",version:"DICOM"},"(0054,0200)":{tag:"(0054,0200)",vr:"DS",name:"StartAngle",vm:"1",version:"DICOM"},"(0054,0202)":{tag:"(0054,0202)",vr:"CS",name:"TypeOfDetectorMotion",vm:"1",version:"DICOM"},"(0054,0210)":{tag:"(0054,0210)",vr:"IS",name:"TriggerVector",vm:"1-n",version:"DICOM"},"(0054,0211)":{tag:"(0054,0211)",vr:"US",name:"NumberOfTriggersInPhase",vm:"1",version:"DICOM"},"(0054,0220)":{tag:"(0054,0220)",vr:"SQ",name:"ViewCodeSequence",vm:"1",version:"DICOM"},"(0054,0222)":{tag:"(0054,0222)",vr:"SQ",name:"ViewModifierCodeSequence",vm:"1",version:"DICOM"},"(0054,0300)":{tag:"(0054,0300)",vr:"SQ",name:"RadionuclideCodeSequence",vm:"1",version:"DICOM"},"(0054,0302)":{tag:"(0054,0302)",vr:"SQ",name:"AdministrationRouteCodeSequence",vm:"1",version:"DICOM"},"(0054,0304)":{tag:"(0054,0304)",vr:"SQ",name:"RadiopharmaceuticalCodeSequence",vm:"1",version:"DICOM"},"(0054,0306)":{tag:"(0054,0306)",vr:"SQ",name:"CalibrationDataSequence",vm:"1",version:"DICOM"},"(0054,0308)":{tag:"(0054,0308)",vr:"US",name:"EnergyWindowNumber",vm:"1",version:"DICOM"},"(0054,0400)":{tag:"(0054,0400)",vr:"SH",name:"ImageID",vm:"1",version:"DICOM"},"(0054,0410)":{tag:"(0054,0410)",vr:"SQ",name:"PatientOrientationCodeSequence",vm:"1",version:"DICOM"},"(0054,0412)":{tag:"(0054,0412)",vr:"SQ",name:"PatientOrientationModifierCodeSequence",vm:"1",version:"DICOM"},"(0054,0414)":{tag:"(0054,0414)",vr:"SQ",name:"PatientGantryRelationshipCodeSequence",vm:"1",version:"DICOM"},"(0054,0500)":{tag:"(0054,0500)",vr:"CS",name:"SliceProgressionDirection",vm:"1",version:"DICOM"},"(0054,0501)":{tag:"(0054,0501)",vr:"CS",name:"ScanProgressionDirection",vm:"1",version:"DICOM"},"(0054,1000)":{tag:"(0054,1000)",vr:"CS",name:"SeriesType",vm:"2",version:"DICOM"},"(0054,1001)":{tag:"(0054,1001)",vr:"CS",name:"Units",vm:"1",version:"DICOM"},"(0054,1002)":{tag:"(0054,1002)",vr:"CS",name:"CountsSource",vm:"1",version:"DICOM"},"(0054,1004)":{tag:"(0054,1004)",vr:"CS",name:"ReprojectionMethod",vm:"1",version:"DICOM"},"(0054,1006)":{tag:"(0054,1006)",vr:"CS",name:"SUVType",vm:"1",version:"DICOM"},"(0054,1100)":{tag:"(0054,1100)",vr:"CS",name:"RandomsCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1101)":{tag:"(0054,1101)",vr:"LO",name:"AttenuationCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1102)":{tag:"(0054,1102)",vr:"CS",name:"DecayCorrection",vm:"1",version:"DICOM"},"(0054,1103)":{tag:"(0054,1103)",vr:"LO",name:"ReconstructionMethod",vm:"1",version:"DICOM"},"(0054,1104)":{tag:"(0054,1104)",vr:"LO",name:"DetectorLinesOfResponseUsed",vm:"1",version:"DICOM"},"(0054,1105)":{tag:"(0054,1105)",vr:"LO",name:"ScatterCorrectionMethod",vm:"1",version:"DICOM"},"(0054,1200)":{tag:"(0054,1200)",vr:"DS",name:"AxialAcceptance",vm:"1",version:"DICOM"},"(0054,1201)":{tag:"(0054,1201)",vr:"IS",name:"AxialMash",vm:"2",version:"DICOM"},"(0054,1202)":{tag:"(0054,1202)",vr:"IS",name:"TransverseMash",vm:"1",version:"DICOM"},"(0054,1203)":{tag:"(0054,1203)",vr:"DS",name:"DetectorElementSize",vm:"2",version:"DICOM"},"(0054,1210)":{tag:"(0054,1210)",vr:"DS",name:"CoincidenceWindowWidth",vm:"1",version:"DICOM"},"(0054,1220)":{tag:"(0054,1220)",vr:"CS",name:"SecondaryCountsType",vm:"1-n",version:"DICOM"},"(0054,1300)":{tag:"(0054,1300)",vr:"DS",name:"FrameReferenceTime",vm:"1",version:"DICOM"},"(0054,1310)":{tag:"(0054,1310)",vr:"IS",name:"PrimaryPromptsCountsAccumulated",vm:"1",version:"DICOM"},"(0054,1311)":{tag:"(0054,1311)",vr:"IS",name:"SecondaryCountsAccumulated",vm:"1-n",version:"DICOM"},"(0054,1320)":{tag:"(0054,1320)",vr:"DS",name:"SliceSensitivityFactor",vm:"1",version:"DICOM"},"(0054,1321)":{tag:"(0054,1321)",vr:"DS",name:"DecayFactor",vm:"1",version:"DICOM"},"(0054,1322)":{tag:"(0054,1322)",vr:"DS",name:"DoseCalibrationFactor",vm:"1",version:"DICOM"},"(0054,1323)":{tag:"(0054,1323)",vr:"DS",name:"ScatterFractionFactor",vm:"1",version:"DICOM"},"(0054,1324)":{tag:"(0054,1324)",vr:"DS",name:"DeadTimeFactor",vm:"1",version:"DICOM"},"(0054,1330)":{tag:"(0054,1330)",vr:"US",name:"ImageIndex",vm:"1",version:"DICOM"},"(0060,3000)":{tag:"(0060,3000)",vr:"SQ",name:"HistogramSequence",vm:"1",version:"DICOM"},"(0060,3002)":{tag:"(0060,3002)",vr:"US",name:"HistogramNumberOfBins",vm:"1",version:"DICOM"},"(0060,3004)":{tag:"(0060,3004)",vr:"xs",name:"HistogramFirstBinValue",vm:"1",version:"DICOM"},"(0060,3006)":{tag:"(0060,3006)",vr:"xs",name:"HistogramLastBinValue",vm:"1",version:"DICOM"},"(0060,3008)":{tag:"(0060,3008)",vr:"US",name:"HistogramBinWidth",vm:"1",version:"DICOM"},"(0060,3010)":{tag:"(0060,3010)",vr:"LO",name:"HistogramExplanation",vm:"1",version:"DICOM"},"(0060,3020)":{tag:"(0060,3020)",vr:"UL",name:"HistogramData",vm:"1-n",version:"DICOM"},"(0062,0001)":{tag:"(0062,0001)",vr:"CS",name:"SegmentationType",vm:"1",version:"DICOM"},"(0062,0002)":{tag:"(0062,0002)",vr:"SQ",name:"SegmentSequence",vm:"1",version:"DICOM"},"(0062,0003)":{tag:"(0062,0003)",vr:"SQ",name:"SegmentedPropertyCategoryCodeSequence",vm:"1",version:"DICOM"},"(0062,0004)":{tag:"(0062,0004)",vr:"US",name:"SegmentNumber",vm:"1",version:"DICOM"},"(0062,0005)":{tag:"(0062,0005)",vr:"LO",name:"SegmentLabel",vm:"1",version:"DICOM"},"(0062,0006)":{tag:"(0062,0006)",vr:"ST",name:"SegmentDescription",vm:"1",version:"DICOM"},"(0062,0007)":{tag:"(0062,0007)",vr:"SQ",name:"SegmentationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0062,0008)":{tag:"(0062,0008)",vr:"CS",name:"SegmentAlgorithmType",vm:"1",version:"DICOM"},"(0062,0009)":{tag:"(0062,0009)",vr:"LO",name:"SegmentAlgorithmName",vm:"1",version:"DICOM"},"(0062,000A)":{tag:"(0062,000A)",vr:"SQ",name:"SegmentIdentificationSequence",vm:"1",version:"DICOM"},"(0062,000B)":{tag:"(0062,000B)",vr:"US",name:"ReferencedSegmentNumber",vm:"1-n",version:"DICOM"},"(0062,000C)":{tag:"(0062,000C)",vr:"US",name:"RecommendedDisplayGrayscaleValue",vm:"1",version:"DICOM"},"(0062,000D)":{tag:"(0062,000D)",vr:"US",name:"RecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(0062,000E)":{tag:"(0062,000E)",vr:"US",name:"MaximumFractionalValue",vm:"1",version:"DICOM"},"(0062,000F)":{tag:"(0062,000F)",vr:"SQ",name:"SegmentedPropertyTypeCodeSequence",vm:"1",version:"DICOM"},"(0062,0010)":{tag:"(0062,0010)",vr:"CS",name:"SegmentationFractionalType",vm:"1",version:"DICOM"},"(0062,0011)":{tag:"(0062,0011)",vr:"SQ",name:"SegmentedPropertyTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(0062,0012)":{tag:"(0062,0012)",vr:"SQ",name:"UsedSegmentsSequence",vm:"1",version:"DICOM"},"(0062,0013)":{tag:"(0062,0013)",vr:"CS",name:"SegmentsOverlap",vm:"1",version:"DICOM"},"(0062,0020)":{tag:"(0062,0020)",vr:"UT",name:"TrackingID",vm:"1",version:"DICOM"},"(0062,0021)":{tag:"(0062,0021)",vr:"UI",name:"TrackingUID",vm:"1",version:"DICOM"},"(0064,0002)":{tag:"(0064,0002)",vr:"SQ",name:"DeformableRegistrationSequence",vm:"1",version:"DICOM"},"(0064,0003)":{tag:"(0064,0003)",vr:"UI",name:"SourceFrameOfReferenceUID",vm:"1",version:"DICOM"},"(0064,0005)":{tag:"(0064,0005)",vr:"SQ",name:"DeformableRegistrationGridSequence",vm:"1",version:"DICOM"},"(0064,0007)":{tag:"(0064,0007)",vr:"UL",name:"GridDimensions",vm:"3",version:"DICOM"},"(0064,0008)":{tag:"(0064,0008)",vr:"FD",name:"GridResolution",vm:"3",version:"DICOM"},"(0064,0009)":{tag:"(0064,0009)",vr:"OF",name:"VectorGridData",vm:"1",version:"DICOM"},"(0064,000F)":{tag:"(0064,000F)",vr:"SQ",name:"PreDeformationMatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0064,0010)":{tag:"(0064,0010)",vr:"SQ",name:"PostDeformationMatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0066,0001)":{tag:"(0066,0001)",vr:"UL",name:"NumberOfSurfaces",vm:"1",version:"DICOM"},"(0066,0002)":{tag:"(0066,0002)",vr:"SQ",name:"SurfaceSequence",vm:"1",version:"DICOM"},"(0066,0003)":{tag:"(0066,0003)",vr:"UL",name:"SurfaceNumber",vm:"1",version:"DICOM"},"(0066,0004)":{tag:"(0066,0004)",vr:"LT",name:"SurfaceComments",vm:"1",version:"DICOM"},"(0066,0009)":{tag:"(0066,0009)",vr:"CS",name:"SurfaceProcessing",vm:"1",version:"DICOM"},"(0066,000A)":{tag:"(0066,000A)",vr:"FL",name:"SurfaceProcessingRatio",vm:"1",version:"DICOM"},"(0066,000B)":{tag:"(0066,000B)",vr:"LO",name:"SurfaceProcessingDescription",vm:"1",version:"DICOM"},"(0066,000C)":{tag:"(0066,000C)",vr:"FL",name:"RecommendedPresentationOpacity",vm:"1",version:"DICOM"},"(0066,000D)":{tag:"(0066,000D)",vr:"CS",name:"RecommendedPresentationType",vm:"1",version:"DICOM"},"(0066,000E)":{tag:"(0066,000E)",vr:"CS",name:"FiniteVolume",vm:"1",version:"DICOM"},"(0066,0010)":{tag:"(0066,0010)",vr:"CS",name:"Manifold",vm:"1",version:"DICOM"},"(0066,0011)":{tag:"(0066,0011)",vr:"SQ",name:"SurfacePointsSequence",vm:"1",version:"DICOM"},"(0066,0012)":{tag:"(0066,0012)",vr:"SQ",name:"SurfacePointsNormalsSequence",vm:"1",version:"DICOM"},"(0066,0013)":{tag:"(0066,0013)",vr:"SQ",name:"SurfaceMeshPrimitivesSequence",vm:"1",version:"DICOM"},"(0066,0015)":{tag:"(0066,0015)",vr:"UL",name:"NumberOfSurfacePoints",vm:"1",version:"DICOM"},"(0066,0016)":{tag:"(0066,0016)",vr:"OF",name:"PointCoordinatesData",vm:"1",version:"DICOM"},"(0066,0017)":{tag:"(0066,0017)",vr:"FL",name:"PointPositionAccuracy",vm:"3",version:"DICOM"},"(0066,0018)":{tag:"(0066,0018)",vr:"FL",name:"MeanPointDistance",vm:"1",version:"DICOM"},"(0066,0019)":{tag:"(0066,0019)",vr:"FL",name:"MaximumPointDistance",vm:"1",version:"DICOM"},"(0066,001A)":{tag:"(0066,001A)",vr:"FL",name:"PointsBoundingBoxCoordinates",vm:"6",version:"DICOM"},"(0066,001B)":{tag:"(0066,001B)",vr:"FL",name:"AxisOfRotation",vm:"3",version:"DICOM"},"(0066,001C)":{tag:"(0066,001C)",vr:"FL",name:"CenterOfRotation",vm:"3",version:"DICOM"},"(0066,001E)":{tag:"(0066,001E)",vr:"UL",name:"NumberOfVectors",vm:"1",version:"DICOM"},"(0066,001F)":{tag:"(0066,001F)",vr:"US",name:"VectorDimensionality",vm:"1",version:"DICOM"},"(0066,0020)":{tag:"(0066,0020)",vr:"FL",name:"VectorAccuracy",vm:"1-n",version:"DICOM"},"(0066,0021)":{tag:"(0066,0021)",vr:"OF",name:"VectorCoordinateData",vm:"1",version:"DICOM"},"(0066,0023)":{tag:"(0066,0023)",vr:"OW",name:"TrianglePointIndexList",vm:"1",version:"DICOM"},"(0066,0024)":{tag:"(0066,0024)",vr:"OW",name:"EdgePointIndexList",vm:"1",version:"DICOM"},"(0066,0025)":{tag:"(0066,0025)",vr:"OW",name:"VertexPointIndexList",vm:"1",version:"DICOM"},"(0066,0026)":{tag:"(0066,0026)",vr:"SQ",name:"TriangleStripSequence",vm:"1",version:"DICOM"},"(0066,0027)":{tag:"(0066,0027)",vr:"SQ",name:"TriangleFanSequence",vm:"1",version:"DICOM"},"(0066,0028)":{tag:"(0066,0028)",vr:"SQ",name:"LineSequence",vm:"1",version:"DICOM"},"(0066,0029)":{tag:"(0066,0029)",vr:"OW",name:"PrimitivePointIndexList",vm:"1",version:"DICOM"},"(0066,002A)":{tag:"(0066,002A)",vr:"UL",name:"SurfaceCount",vm:"1",version:"DICOM"},"(0066,002B)":{tag:"(0066,002B)",vr:"SQ",name:"ReferencedSurfaceSequence",vm:"1",version:"DICOM"},"(0066,002C)":{tag:"(0066,002C)",vr:"UL",name:"ReferencedSurfaceNumber",vm:"1",version:"DICOM"},"(0066,002D)":{tag:"(0066,002D)",vr:"SQ",name:"SegmentSurfaceGenerationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,002E)":{tag:"(0066,002E)",vr:"SQ",name:"SegmentSurfaceSourceInstanceSequence",vm:"1",version:"DICOM"},"(0066,002F)":{tag:"(0066,002F)",vr:"SQ",name:"AlgorithmFamilyCodeSequence",vm:"1",version:"DICOM"},"(0066,0030)":{tag:"(0066,0030)",vr:"SQ",name:"AlgorithmNameCodeSequence",vm:"1",version:"DICOM"},"(0066,0031)":{tag:"(0066,0031)",vr:"LO",name:"AlgorithmVersion",vm:"1",version:"DICOM"},"(0066,0032)":{tag:"(0066,0032)",vr:"LT",name:"AlgorithmParameters",vm:"1",version:"DICOM"},"(0066,0034)":{tag:"(0066,0034)",vr:"SQ",name:"FacetSequence",vm:"1",version:"DICOM"},"(0066,0035)":{tag:"(0066,0035)",vr:"SQ",name:"SurfaceProcessingAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,0036)":{tag:"(0066,0036)",vr:"LO",name:"AlgorithmName",vm:"1",version:"DICOM"},"(0066,0037)":{tag:"(0066,0037)",vr:"FL",name:"RecommendedPointRadius",vm:"1",version:"DICOM"},"(0066,0038)":{tag:"(0066,0038)",vr:"FL",name:"RecommendedLineThickness",vm:"1",version:"DICOM"},"(0066,0040)":{tag:"(0066,0040)",vr:"UL",name:"LongPrimitivePointIndexList",vm:"1-n",version:"DICOM"},"(0066,0041)":{tag:"(0066,0041)",vr:"UL",name:"LongTrianglePointIndexList",vm:"3-3n",version:"DICOM"},"(0066,0042)":{tag:"(0066,0042)",vr:"UL",name:"LongEdgePointIndexList",vm:"2-2n",version:"DICOM"},"(0066,0043)":{tag:"(0066,0043)",vr:"UL",name:"LongVertexPointIndexList",vm:"1-n",version:"DICOM"},"(0066,0101)":{tag:"(0066,0101)",vr:"SQ",name:"TrackSetSequence",vm:"1",version:"DICOM"},"(0066,0102)":{tag:"(0066,0102)",vr:"SQ",name:"TrackSequence",vm:"1",version:"DICOM"},"(0066,0103)":{tag:"(0066,0103)",vr:"OW",name:"RecommendedDisplayCIELabValueList",vm:"1",version:"DICOM"},"(0066,0104)":{tag:"(0066,0104)",vr:"SQ",name:"TrackingAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(0066,0105)":{tag:"(0066,0105)",vr:"UL",name:"TrackSetNumber",vm:"1",version:"DICOM"},"(0066,0106)":{tag:"(0066,0106)",vr:"LO",name:"TrackSetLabel",vm:"1",version:"DICOM"},"(0066,0107)":{tag:"(0066,0107)",vr:"UT",name:"TrackSetDescription",vm:"1",version:"DICOM"},"(0066,0108)":{tag:"(0066,0108)",vr:"SQ",name:"TrackSetAnatomicalTypeCodeSequence",vm:"1",version:"DICOM"},"(0066,0121)":{tag:"(0066,0121)",vr:"SQ",name:"MeasurementsSequence",vm:"1",version:"DICOM"},"(0066,0124)":{tag:"(0066,0124)",vr:"SQ",name:"TrackSetStatisticsSequence",vm:"1",version:"DICOM"},"(0066,0125)":{tag:"(0066,0125)",vr:"OF",name:"FloatingPointValues",vm:"1",version:"DICOM"},"(0066,0129)":{tag:"(0066,0129)",vr:"OL",name:"TrackPointIndexList",vm:"1",version:"DICOM"},"(0066,0130)":{tag:"(0066,0130)",vr:"SQ",name:"TrackStatisticsSequence",vm:"1",version:"DICOM"},"(0066,0132)":{tag:"(0066,0132)",vr:"SQ",name:"MeasurementValuesSequence",vm:"1",version:"DICOM"},"(0066,0133)":{tag:"(0066,0133)",vr:"SQ",name:"DiffusionAcquisitionCodeSequence",vm:"1",version:"DICOM"},"(0066,0134)":{tag:"(0066,0134)",vr:"SQ",name:"DiffusionModelCodeSequence",vm:"1",version:"DICOM"},"(0068,6210)":{tag:"(0068,6210)",vr:"LO",name:"ImplantSize",vm:"1",version:"DICOM"},"(0068,6221)":{tag:"(0068,6221)",vr:"LO",name:"ImplantTemplateVersion",vm:"1",version:"DICOM"},"(0068,6222)":{tag:"(0068,6222)",vr:"SQ",name:"ReplacedImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6223)":{tag:"(0068,6223)",vr:"CS",name:"ImplantType",vm:"1",version:"DICOM"},"(0068,6224)":{tag:"(0068,6224)",vr:"SQ",name:"DerivationImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6225)":{tag:"(0068,6225)",vr:"SQ",name:"OriginalImplantTemplateSequence",vm:"1",version:"DICOM"},"(0068,6226)":{tag:"(0068,6226)",vr:"DT",name:"EffectiveDateTime",vm:"1",version:"DICOM"},"(0068,6230)":{tag:"(0068,6230)",vr:"SQ",name:"ImplantTargetAnatomySequence",vm:"1",version:"DICOM"},"(0068,6260)":{tag:"(0068,6260)",vr:"SQ",name:"InformationFromManufacturerSequence",vm:"1",version:"DICOM"},"(0068,6265)":{tag:"(0068,6265)",vr:"SQ",name:"NotificationFromManufacturerSequence",vm:"1",version:"DICOM"},"(0068,6270)":{tag:"(0068,6270)",vr:"DT",name:"InformationIssueDateTime",vm:"1",version:"DICOM"},"(0068,6280)":{tag:"(0068,6280)",vr:"ST",name:"InformationSummary",vm:"1",version:"DICOM"},"(0068,62A0)":{tag:"(0068,62A0)",vr:"SQ",name:"ImplantRegulatoryDisapprovalCodeSequence",vm:"1",version:"DICOM"},"(0068,62A5)":{tag:"(0068,62A5)",vr:"FD",name:"OverallTemplateSpatialTolerance",vm:"1",version:"DICOM"},"(0068,62C0)":{tag:"(0068,62C0)",vr:"SQ",name:"HPGLDocumentSequence",vm:"1",version:"DICOM"},"(0068,62D0)":{tag:"(0068,62D0)",vr:"US",name:"HPGLDocumentID",vm:"1",version:"DICOM"},"(0068,62D5)":{tag:"(0068,62D5)",vr:"LO",name:"HPGLDocumentLabel",vm:"1",version:"DICOM"},"(0068,62E0)":{tag:"(0068,62E0)",vr:"SQ",name:"ViewOrientationCodeSequence",vm:"1",version:"DICOM"},"(0068,62F0)":{tag:"(0068,62F0)",vr:"FD",name:"ViewOrientationModifier",vm:"9",version:"DICOM"},"(0068,62F2)":{tag:"(0068,62F2)",vr:"FD",name:"HPGLDocumentScaling",vm:"1",version:"DICOM"},"(0068,6300)":{tag:"(0068,6300)",vr:"OB",name:"HPGLDocument",vm:"1",version:"DICOM"},"(0068,6310)":{tag:"(0068,6310)",vr:"US",name:"HPGLContourPenNumber",vm:"1",version:"DICOM"},"(0068,6320)":{tag:"(0068,6320)",vr:"SQ",name:"HPGLPenSequence",vm:"1",version:"DICOM"},"(0068,6330)":{tag:"(0068,6330)",vr:"US",name:"HPGLPenNumber",vm:"1",version:"DICOM"},"(0068,6340)":{tag:"(0068,6340)",vr:"LO",name:"HPGLPenLabel",vm:"1",version:"DICOM"},"(0068,6345)":{tag:"(0068,6345)",vr:"ST",name:"HPGLPenDescription",vm:"1",version:"DICOM"},"(0068,6346)":{tag:"(0068,6346)",vr:"FD",name:"RecommendedRotationPoint",vm:"2",version:"DICOM"},"(0068,6347)":{tag:"(0068,6347)",vr:"FD",name:"BoundingRectangle",vm:"4",version:"DICOM"},"(0068,6350)":{tag:"(0068,6350)",vr:"US",name:"ImplantTemplate3DModelSurfaceNumber",vm:"1-n",version:"DICOM"},"(0068,6360)":{tag:"(0068,6360)",vr:"SQ",name:"SurfaceModelDescriptionSequence",vm:"1",version:"DICOM"},"(0068,6380)":{tag:"(0068,6380)",vr:"LO",name:"SurfaceModelLabel",vm:"1",version:"DICOM"},"(0068,6390)":{tag:"(0068,6390)",vr:"FD",name:"SurfaceModelScalingFactor",vm:"1",version:"DICOM"},"(0068,63A0)":{tag:"(0068,63A0)",vr:"SQ",name:"MaterialsCodeSequence",vm:"1",version:"DICOM"},"(0068,63A4)":{tag:"(0068,63A4)",vr:"SQ",name:"CoatingMaterialsCodeSequence",vm:"1",version:"DICOM"},"(0068,63A8)":{tag:"(0068,63A8)",vr:"SQ",name:"ImplantTypeCodeSequence",vm:"1",version:"DICOM"},"(0068,63AC)":{tag:"(0068,63AC)",vr:"SQ",name:"FixationMethodCodeSequence",vm:"1",version:"DICOM"},"(0068,63B0)":{tag:"(0068,63B0)",vr:"SQ",name:"MatingFeatureSetsSequence",vm:"1",version:"DICOM"},"(0068,63C0)":{tag:"(0068,63C0)",vr:"US",name:"MatingFeatureSetID",vm:"1",version:"DICOM"},"(0068,63D0)":{tag:"(0068,63D0)",vr:"LO",name:"MatingFeatureSetLabel",vm:"1",version:"DICOM"},"(0068,63E0)":{tag:"(0068,63E0)",vr:"SQ",name:"MatingFeatureSequence",vm:"1",version:"DICOM"},"(0068,63F0)":{tag:"(0068,63F0)",vr:"US",name:"MatingFeatureID",vm:"1",version:"DICOM"},"(0068,6400)":{tag:"(0068,6400)",vr:"SQ",name:"MatingFeatureDegreeOfFreedomSequence",vm:"1",version:"DICOM"},"(0068,6410)":{tag:"(0068,6410)",vr:"US",name:"DegreeOfFreedomID",vm:"1",version:"DICOM"},"(0068,6420)":{tag:"(0068,6420)",vr:"CS",name:"DegreeOfFreedomType",vm:"1",version:"DICOM"},"(0068,6430)":{tag:"(0068,6430)",vr:"SQ",name:"TwoDMatingFeatureCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,6440)":{tag:"(0068,6440)",vr:"US",name:"ReferencedHPGLDocumentID",vm:"1",version:"DICOM"},"(0068,6450)":{tag:"(0068,6450)",vr:"FD",name:"TwoDMatingPoint",vm:"2",version:"DICOM"},"(0068,6460)":{tag:"(0068,6460)",vr:"FD",name:"TwoDMatingAxes",vm:"4",version:"DICOM"},"(0068,6470)":{tag:"(0068,6470)",vr:"SQ",name:"TwoDDegreeOfFreedomSequence",vm:"1",version:"DICOM"},"(0068,6490)":{tag:"(0068,6490)",vr:"FD",name:"ThreeDDegreeOfFreedomAxis",vm:"3",version:"DICOM"},"(0068,64A0)":{tag:"(0068,64A0)",vr:"FD",name:"RangeOfFreedom",vm:"2",version:"DICOM"},"(0068,64C0)":{tag:"(0068,64C0)",vr:"FD",name:"ThreeDMatingPoint",vm:"3",version:"DICOM"},"(0068,64D0)":{tag:"(0068,64D0)",vr:"FD",name:"ThreeDMatingAxes",vm:"9",version:"DICOM"},"(0068,64F0)":{tag:"(0068,64F0)",vr:"FD",name:"TwoDDegreeOfFreedomAxis",vm:"3",version:"DICOM"},"(0068,6500)":{tag:"(0068,6500)",vr:"SQ",name:"PlanningLandmarkPointSequence",vm:"1",version:"DICOM"},"(0068,6510)":{tag:"(0068,6510)",vr:"SQ",name:"PlanningLandmarkLineSequence",vm:"1",version:"DICOM"},"(0068,6520)":{tag:"(0068,6520)",vr:"SQ",name:"PlanningLandmarkPlaneSequence",vm:"1",version:"DICOM"},"(0068,6530)":{tag:"(0068,6530)",vr:"US",name:"PlanningLandmarkID",vm:"1",version:"DICOM"},"(0068,6540)":{tag:"(0068,6540)",vr:"LO",name:"PlanningLandmarkDescription",vm:"1",version:"DICOM"},"(0068,6545)":{tag:"(0068,6545)",vr:"SQ",name:"PlanningLandmarkIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0068,6550)":{tag:"(0068,6550)",vr:"SQ",name:"TwoDPointCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,6560)":{tag:"(0068,6560)",vr:"FD",name:"TwoDPointCoordinates",vm:"2",version:"DICOM"},"(0068,6590)":{tag:"(0068,6590)",vr:"FD",name:"ThreeDPointCoordinates",vm:"3",version:"DICOM"},"(0068,65A0)":{tag:"(0068,65A0)",vr:"SQ",name:"TwoDLineCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,65B0)":{tag:"(0068,65B0)",vr:"FD",name:"TwoDLineCoordinates",vm:"4",version:"DICOM"},"(0068,65D0)":{tag:"(0068,65D0)",vr:"FD",name:"ThreeDLineCoordinates",vm:"6",version:"DICOM"},"(0068,65E0)":{tag:"(0068,65E0)",vr:"SQ",name:"TwoDPlaneCoordinatesSequence",vm:"1",version:"DICOM"},"(0068,65F0)":{tag:"(0068,65F0)",vr:"FD",name:"TwoDPlaneIntersection",vm:"4",version:"DICOM"},"(0068,6610)":{tag:"(0068,6610)",vr:"FD",name:"ThreeDPlaneOrigin",vm:"3",version:"DICOM"},"(0068,6620)":{tag:"(0068,6620)",vr:"FD",name:"ThreeDPlaneNormal",vm:"3",version:"DICOM"},"(0068,7001)":{tag:"(0068,7001)",vr:"CS",name:"ModelModification",vm:"1",version:"DICOM"},"(0068,7002)":{tag:"(0068,7002)",vr:"CS",name:"ModelMirroring",vm:"1",version:"DICOM"},"(0068,7003)":{tag:"(0068,7003)",vr:"SQ",name:"ModelUsageCodeSequence",vm:"1",version:"DICOM"},"(0068,7004)":{tag:"(0068,7004)",vr:"UI",name:"ModelGroupUID",vm:"1",version:"DICOM"},"(0068,7005)":{tag:"(0068,7005)",vr:"UR",name:"RelativeURIReferenceWithinEncapsulatedDocument",vm:"1",version:"DICOM"},"(0070,0001)":{tag:"(0070,0001)",vr:"SQ",name:"GraphicAnnotationSequence",vm:"1",version:"DICOM"},"(0070,0002)":{tag:"(0070,0002)",vr:"CS",name:"GraphicLayer",vm:"1",version:"DICOM"},"(0070,0003)":{tag:"(0070,0003)",vr:"CS",name:"BoundingBoxAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0004)":{tag:"(0070,0004)",vr:"CS",name:"AnchorPointAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0005)":{tag:"(0070,0005)",vr:"CS",name:"GraphicAnnotationUnits",vm:"1",version:"DICOM"},"(0070,0006)":{tag:"(0070,0006)",vr:"ST",name:"UnformattedTextValue",vm:"1",version:"DICOM"},"(0070,0008)":{tag:"(0070,0008)",vr:"SQ",name:"TextObjectSequence",vm:"1",version:"DICOM"},"(0070,0009)":{tag:"(0070,0009)",vr:"SQ",name:"GraphicObjectSequence",vm:"1",version:"DICOM"},"(0070,0010)":{tag:"(0070,0010)",vr:"FL",name:"BoundingBoxTopLeftHandCorner",vm:"2",version:"DICOM"},"(0070,0011)":{tag:"(0070,0011)",vr:"FL",name:"BoundingBoxBottomRightHandCorner",vm:"2",version:"DICOM"},"(0070,0012)":{tag:"(0070,0012)",vr:"CS",name:"BoundingBoxTextHorizontalJustification",vm:"1",version:"DICOM"},"(0070,0014)":{tag:"(0070,0014)",vr:"FL",name:"AnchorPoint",vm:"2",version:"DICOM"},"(0070,0015)":{tag:"(0070,0015)",vr:"CS",name:"AnchorPointVisibility",vm:"1",version:"DICOM"},"(0070,0020)":{tag:"(0070,0020)",vr:"US",name:"GraphicDimensions",vm:"1",version:"DICOM"},"(0070,0021)":{tag:"(0070,0021)",vr:"US",name:"NumberOfGraphicPoints",vm:"1",version:"DICOM"},"(0070,0022)":{tag:"(0070,0022)",vr:"FL",name:"GraphicData",vm:"2-n",version:"DICOM"},"(0070,0023)":{tag:"(0070,0023)",vr:"CS",name:"GraphicType",vm:"1",version:"DICOM"},"(0070,0024)":{tag:"(0070,0024)",vr:"CS",name:"GraphicFilled",vm:"1",version:"DICOM"},"(0070,0041)":{tag:"(0070,0041)",vr:"CS",name:"ImageHorizontalFlip",vm:"1",version:"DICOM"},"(0070,0042)":{tag:"(0070,0042)",vr:"US",name:"ImageRotation",vm:"1",version:"DICOM"},"(0070,0052)":{tag:"(0070,0052)",vr:"SL",name:"DisplayedAreaTopLeftHandCorner",vm:"2",version:"DICOM"},"(0070,0053)":{tag:"(0070,0053)",vr:"SL",name:"DisplayedAreaBottomRightHandCorner",vm:"2",version:"DICOM"},"(0070,005A)":{tag:"(0070,005A)",vr:"SQ",name:"DisplayedAreaSelectionSequence",vm:"1",version:"DICOM"},"(0070,0060)":{tag:"(0070,0060)",vr:"SQ",name:"GraphicLayerSequence",vm:"1",version:"DICOM"},"(0070,0062)":{tag:"(0070,0062)",vr:"IS",name:"GraphicLayerOrder",vm:"1",version:"DICOM"},"(0070,0066)":{tag:"(0070,0066)",vr:"US",name:"GraphicLayerRecommendedDisplayGrayscaleValue",vm:"1",version:"DICOM"},"(0070,0068)":{tag:"(0070,0068)",vr:"LO",name:"GraphicLayerDescription",vm:"1",version:"DICOM"},"(0070,0080)":{tag:"(0070,0080)",vr:"CS",name:"ContentLabel",vm:"1",version:"DICOM"},"(0070,0081)":{tag:"(0070,0081)",vr:"LO",name:"ContentDescription",vm:"1",version:"DICOM"},"(0070,0082)":{tag:"(0070,0082)",vr:"DA",name:"PresentationCreationDate",vm:"1",version:"DICOM"},"(0070,0083)":{tag:"(0070,0083)",vr:"TM",name:"PresentationCreationTime",vm:"1",version:"DICOM"},"(0070,0084)":{tag:"(0070,0084)",vr:"PN",name:"ContentCreatorName",vm:"1",version:"DICOM"},"(0070,0086)":{tag:"(0070,0086)",vr:"SQ",name:"ContentCreatorIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0070,0087)":{tag:"(0070,0087)",vr:"SQ",name:"AlternateContentDescriptionSequence",vm:"1",version:"DICOM"},"(0070,0100)":{tag:"(0070,0100)",vr:"CS",name:"PresentationSizeMode",vm:"1",version:"DICOM"},"(0070,0101)":{tag:"(0070,0101)",vr:"DS",name:"PresentationPixelSpacing",vm:"2",version:"DICOM"},"(0070,0102)":{tag:"(0070,0102)",vr:"IS",name:"PresentationPixelAspectRatio",vm:"2",version:"DICOM"},"(0070,0103)":{tag:"(0070,0103)",vr:"FL",name:"PresentationPixelMagnificationRatio",vm:"1",version:"DICOM"},"(0070,0207)":{tag:"(0070,0207)",vr:"LO",name:"GraphicGroupLabel",vm:"1",version:"DICOM"},"(0070,0208)":{tag:"(0070,0208)",vr:"ST",name:"GraphicGroupDescription",vm:"1",version:"DICOM"},"(0070,0209)":{tag:"(0070,0209)",vr:"SQ",name:"CompoundGraphicSequence",vm:"1",version:"DICOM"},"(0070,0226)":{tag:"(0070,0226)",vr:"UL",name:"CompoundGraphicInstanceID",vm:"1",version:"DICOM"},"(0070,0227)":{tag:"(0070,0227)",vr:"LO",name:"FontName",vm:"1",version:"DICOM"},"(0070,0228)":{tag:"(0070,0228)",vr:"CS",name:"FontNameType",vm:"1",version:"DICOM"},"(0070,0229)":{tag:"(0070,0229)",vr:"LO",name:"CSSFontName",vm:"1",version:"DICOM"},"(0070,0230)":{tag:"(0070,0230)",vr:"FD",name:"RotationAngle",vm:"1",version:"DICOM"},"(0070,0231)":{tag:"(0070,0231)",vr:"SQ",name:"TextStyleSequence",vm:"1",version:"DICOM"},"(0070,0232)":{tag:"(0070,0232)",vr:"SQ",name:"LineStyleSequence",vm:"1",version:"DICOM"},"(0070,0233)":{tag:"(0070,0233)",vr:"SQ",name:"FillStyleSequence",vm:"1",version:"DICOM"},"(0070,0234)":{tag:"(0070,0234)",vr:"SQ",name:"GraphicGroupSequence",vm:"1",version:"DICOM"},"(0070,0241)":{tag:"(0070,0241)",vr:"US",name:"TextColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0242)":{tag:"(0070,0242)",vr:"CS",name:"HorizontalAlignment",vm:"1",version:"DICOM"},"(0070,0243)":{tag:"(0070,0243)",vr:"CS",name:"VerticalAlignment",vm:"1",version:"DICOM"},"(0070,0244)":{tag:"(0070,0244)",vr:"CS",name:"ShadowStyle",vm:"1",version:"DICOM"},"(0070,0245)":{tag:"(0070,0245)",vr:"FL",name:"ShadowOffsetX",vm:"1",version:"DICOM"},"(0070,0246)":{tag:"(0070,0246)",vr:"FL",name:"ShadowOffsetY",vm:"1",version:"DICOM"},"(0070,0247)":{tag:"(0070,0247)",vr:"US",name:"ShadowColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0248)":{tag:"(0070,0248)",vr:"CS",name:"Underlined",vm:"1",version:"DICOM"},"(0070,0249)":{tag:"(0070,0249)",vr:"CS",name:"Bold",vm:"1",version:"DICOM"},"(0070,0250)":{tag:"(0070,0250)",vr:"CS",name:"Italic",vm:"1",version:"DICOM"},"(0070,0251)":{tag:"(0070,0251)",vr:"US",name:"PatternOnColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0252)":{tag:"(0070,0252)",vr:"US",name:"PatternOffColorCIELabValue",vm:"3",version:"DICOM"},"(0070,0253)":{tag:"(0070,0253)",vr:"FL",name:"LineThickness",vm:"1",version:"DICOM"},"(0070,0254)":{tag:"(0070,0254)",vr:"CS",name:"LineDashingStyle",vm:"1",version:"DICOM"},"(0070,0255)":{tag:"(0070,0255)",vr:"UL",name:"LinePattern",vm:"1",version:"DICOM"},"(0070,0256)":{tag:"(0070,0256)",vr:"OB",name:"FillPattern",vm:"1",version:"DICOM"},"(0070,0257)":{tag:"(0070,0257)",vr:"CS",name:"FillMode",vm:"1",version:"DICOM"},"(0070,0258)":{tag:"(0070,0258)",vr:"FL",name:"ShadowOpacity",vm:"1",version:"DICOM"},"(0070,0261)":{tag:"(0070,0261)",vr:"FL",name:"GapLength",vm:"1",version:"DICOM"},"(0070,0262)":{tag:"(0070,0262)",vr:"FL",name:"DiameterOfVisibility",vm:"1",version:"DICOM"},"(0070,0273)":{tag:"(0070,0273)",vr:"FL",name:"RotationPoint",vm:"2",version:"DICOM"},"(0070,0274)":{tag:"(0070,0274)",vr:"CS",name:"TickAlignment",vm:"1",version:"DICOM"},"(0070,0278)":{tag:"(0070,0278)",vr:"CS",name:"ShowTickLabel",vm:"1",version:"DICOM"},"(0070,0279)":{tag:"(0070,0279)",vr:"CS",name:"TickLabelAlignment",vm:"1",version:"DICOM"},"(0070,0282)":{tag:"(0070,0282)",vr:"CS",name:"CompoundGraphicUnits",vm:"1",version:"DICOM"},"(0070,0284)":{tag:"(0070,0284)",vr:"FL",name:"PatternOnOpacity",vm:"1",version:"DICOM"},"(0070,0285)":{tag:"(0070,0285)",vr:"FL",name:"PatternOffOpacity",vm:"1",version:"DICOM"},"(0070,0287)":{tag:"(0070,0287)",vr:"SQ",name:"MajorTicksSequence",vm:"1",version:"DICOM"},"(0070,0288)":{tag:"(0070,0288)",vr:"FL",name:"TickPosition",vm:"1",version:"DICOM"},"(0070,0289)":{tag:"(0070,0289)",vr:"SH",name:"TickLabel",vm:"1",version:"DICOM"},"(0070,0294)":{tag:"(0070,0294)",vr:"CS",name:"CompoundGraphicType",vm:"1",version:"DICOM"},"(0070,0295)":{tag:"(0070,0295)",vr:"UL",name:"GraphicGroupID",vm:"1",version:"DICOM"},"(0070,0306)":{tag:"(0070,0306)",vr:"CS",name:"ShapeType",vm:"1",version:"DICOM"},"(0070,0308)":{tag:"(0070,0308)",vr:"SQ",name:"RegistrationSequence",vm:"1",version:"DICOM"},"(0070,0309)":{tag:"(0070,0309)",vr:"SQ",name:"MatrixRegistrationSequence",vm:"1",version:"DICOM"},"(0070,030A)":{tag:"(0070,030A)",vr:"SQ",name:"MatrixSequence",vm:"1",version:"DICOM"},"(0070,030B)":{tag:"(0070,030B)",vr:"FD",name:"FrameOfReferenceToDisplayedCoordinateSystemTransformationMatrix",vm:"16",version:"DICOM"},"(0070,030C)":{tag:"(0070,030C)",vr:"CS",name:"FrameOfReferenceTransformationMatrixType",vm:"1",version:"DICOM"},"(0070,030D)":{tag:"(0070,030D)",vr:"SQ",name:"RegistrationTypeCodeSequence",vm:"1",version:"DICOM"},"(0070,030F)":{tag:"(0070,030F)",vr:"ST",name:"FiducialDescription",vm:"1",version:"DICOM"},"(0070,0310)":{tag:"(0070,0310)",vr:"SH",name:"FiducialIdentifier",vm:"1",version:"DICOM"},"(0070,0311)":{tag:"(0070,0311)",vr:"SQ",name:"FiducialIdentifierCodeSequence",vm:"1",version:"DICOM"},"(0070,0312)":{tag:"(0070,0312)",vr:"FD",name:"ContourUncertaintyRadius",vm:"1",version:"DICOM"},"(0070,0314)":{tag:"(0070,0314)",vr:"SQ",name:"UsedFiducialsSequence",vm:"1",version:"DICOM"},"(0070,0318)":{tag:"(0070,0318)",vr:"SQ",name:"GraphicCoordinatesDataSequence",vm:"1",version:"DICOM"},"(0070,031A)":{tag:"(0070,031A)",vr:"UI",name:"FiducialUID",vm:"1",version:"DICOM"},"(0070,031B)":{tag:"(0070,031B)",vr:"UI",name:"ReferencedFiducialUID",vm:"1",version:"DICOM"},"(0070,031C)":{tag:"(0070,031C)",vr:"SQ",name:"FiducialSetSequence",vm:"1",version:"DICOM"},"(0070,031E)":{tag:"(0070,031E)",vr:"SQ",name:"FiducialSequence",vm:"1",version:"DICOM"},"(0070,031F)":{tag:"(0070,031F)",vr:"SQ",name:"FiducialsPropertyCategoryCodeSequence",vm:"1",version:"DICOM"},"(0070,0401)":{tag:"(0070,0401)",vr:"US",name:"GraphicLayerRecommendedDisplayCIELabValue",vm:"3",version:"DICOM"},"(0070,0402)":{tag:"(0070,0402)",vr:"SQ",name:"BlendingSequence",vm:"1",version:"DICOM"},"(0070,0403)":{tag:"(0070,0403)",vr:"FL",name:"RelativeOpacity",vm:"1",version:"DICOM"},"(0070,0404)":{tag:"(0070,0404)",vr:"SQ",name:"ReferencedSpatialRegistrationSequence",vm:"1",version:"DICOM"},"(0070,0405)":{tag:"(0070,0405)",vr:"CS",name:"BlendingPosition",vm:"1",version:"DICOM"},"(0070,1209)":{tag:"(0070,1209)",vr:"UI",name:"VolumetricPresentationInputSetUID",vm:"1",version:"DICOM"},"(0070,120A)":{tag:"(0070,120A)",vr:"SQ",name:"VolumetricPresentationInputSetSequence",vm:"1",version:"DICOM"},"(0070,120B)":{tag:"(0070,120B)",vr:"CS",name:"GlobalCrop",vm:"1",version:"DICOM"},"(0070,120C)":{tag:"(0070,120C)",vr:"US",name:"GlobalCroppingSpecificationIndex",vm:"1-n",version:"DICOM"},"(0070,120D)":{tag:"(0070,120D)",vr:"CS",name:"RenderingMethod",vm:"1",version:"DICOM"},"(0070,1602)":{tag:"(0070,1602)",vr:"CS",name:"RenderProjection",vm:"1",version:"DICOM"},"(0070,1603)":{tag:"(0070,1603)",vr:"FD",name:"ViewpointPosition",vm:"3",version:"DICOM"},"(0070,1604)":{tag:"(0070,1604)",vr:"FD",name:"ViewpointLookAtPoint",vm:"3",version:"DICOM"},"(0070,1605)":{tag:"(0070,1605)",vr:"FD",name:"ViewpointUpDirection",vm:"3",version:"DICOM"},"(0070,1606)":{tag:"(0070,1606)",vr:"FD",name:"RenderFieldOfView",vm:"6",version:"DICOM"},"(0070,1607)":{tag:"(0070,1607)",vr:"FD",name:"SamplingStepSize",vm:"1",version:"DICOM"},"(0070,1701)":{tag:"(0070,1701)",vr:"CS",name:"ShadingStyle",vm:"1",version:"DICOM"},"(0070,1702)":{tag:"(0070,1702)",vr:"FD",name:"AmbientReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1703)":{tag:"(0070,1703)",vr:"FD",name:"LightDirection",vm:"3",version:"DICOM"},"(0070,1704)":{tag:"(0070,1704)",vr:"FD",name:"DiffuseReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1705)":{tag:"(0070,1705)",vr:"FD",name:"SpecularReflectionIntensity",vm:"1",version:"DICOM"},"(0070,1706)":{tag:"(0070,1706)",vr:"FD",name:"Shininess",vm:"1",version:"DICOM"},"(0070,1A06)":{tag:"(0070,1A06)",vr:"FD",name:"SwivelRange",vm:"1",version:"DICOM"},"(0070,1A07)":{tag:"(0070,1A07)",vr:"OD",name:"VolumetricCurveUpDirections",vm:"1",version:"DICOM"},"(0070,1A08)":{tag:"(0070,1A08)",vr:"SQ",name:"VolumeStreamSequence",vm:"1",version:"DICOM"},"(0070,1A09)":{tag:"(0070,1A09)",vr:"LO",name:"RGBATransferFunctionDescription",vm:"1",version:"DICOM"},"(0070,1B01)":{tag:"(0070,1B01)",vr:"SQ",name:"AdvancedBlendingSequence",vm:"1",version:"DICOM"},"(0070,1B02)":{tag:"(0070,1B02)",vr:"US",name:"BlendingInputNumber",vm:"1",version:"DICOM"},"(0070,1B03)":{tag:"(0070,1B03)",vr:"SQ",name:"BlendingDisplayInputSequence",vm:"1",version:"DICOM"},"(0070,1B04)":{tag:"(0070,1B04)",vr:"SQ",name:"BlendingDisplaySequence",vm:"1",version:"DICOM"},"(0070,1B06)":{tag:"(0070,1B06)",vr:"CS",name:"BlendingMode",vm:"1",version:"DICOM"},"(0070,1B07)":{tag:"(0070,1B07)",vr:"CS",name:"TimeSeriesBlending",vm:"1",version:"DICOM"},"(0070,1B08)":{tag:"(0070,1B08)",vr:"CS",name:"GeometryForDisplay",vm:"1",version:"DICOM"},"(0070,1B11)":{tag:"(0070,1B11)",vr:"SQ",name:"ThresholdSequence",vm:"1",version:"DICOM"},"(0070,1B12)":{tag:"(0070,1B12)",vr:"SQ",name:"ThresholdValueSequence",vm:"1",version:"DICOM"},"(0070,1B13)":{tag:"(0070,1B13)",vr:"CS",name:"ThresholdType",vm:"1",version:"DICOM"},"(0070,1B14)":{tag:"(0070,1B14)",vr:"FD",name:"ThresholdValue",vm:"1",version:"DICOM"},"(0072,0002)":{tag:"(0072,0002)",vr:"SH",name:"HangingProtocolName",vm:"1",version:"DICOM"},"(0072,0004)":{tag:"(0072,0004)",vr:"LO",name:"HangingProtocolDescription",vm:"1",version:"DICOM"},"(0072,0006)":{tag:"(0072,0006)",vr:"CS",name:"HangingProtocolLevel",vm:"1",version:"DICOM"},"(0072,0008)":{tag:"(0072,0008)",vr:"LO",name:"HangingProtocolCreator",vm:"1",version:"DICOM"},"(0072,000A)":{tag:"(0072,000A)",vr:"DT",name:"HangingProtocolCreationDateTime",vm:"1",version:"DICOM"},"(0072,000C)":{tag:"(0072,000C)",vr:"SQ",name:"HangingProtocolDefinitionSequence",vm:"1",version:"DICOM"},"(0072,000E)":{tag:"(0072,000E)",vr:"SQ",name:"HangingProtocolUserIdentificationCodeSequence",vm:"1",version:"DICOM"},"(0072,0010)":{tag:"(0072,0010)",vr:"LO",name:"HangingProtocolUserGroupName",vm:"1",version:"DICOM"},"(0072,0012)":{tag:"(0072,0012)",vr:"SQ",name:"SourceHangingProtocolSequence",vm:"1",version:"DICOM"},"(0072,0014)":{tag:"(0072,0014)",vr:"US",name:"NumberOfPriorsReferenced",vm:"1",version:"DICOM"},"(0072,0020)":{tag:"(0072,0020)",vr:"SQ",name:"ImageSetsSequence",vm:"1",version:"DICOM"},"(0072,0022)":{tag:"(0072,0022)",vr:"SQ",name:"ImageSetSelectorSequence",vm:"1",version:"DICOM"},"(0072,0024)":{tag:"(0072,0024)",vr:"CS",name:"ImageSetSelectorUsageFlag",vm:"1",version:"DICOM"},"(0072,0026)":{tag:"(0072,0026)",vr:"AT",name:"SelectorAttribute",vm:"1",version:"DICOM"},"(0072,0028)":{tag:"(0072,0028)",vr:"US",name:"SelectorValueNumber",vm:"1",version:"DICOM"},"(0072,0030)":{tag:"(0072,0030)",vr:"SQ",name:"TimeBasedImageSetsSequence",vm:"1",version:"DICOM"},"(0072,0032)":{tag:"(0072,0032)",vr:"US",name:"ImageSetNumber",vm:"1",version:"DICOM"},"(0072,0034)":{tag:"(0072,0034)",vr:"CS",name:"ImageSetSelectorCategory",vm:"1",version:"DICOM"},"(0072,0038)":{tag:"(0072,0038)",vr:"US",name:"RelativeTime",vm:"2",version:"DICOM"},"(0072,003A)":{tag:"(0072,003A)",vr:"CS",name:"RelativeTimeUnits",vm:"1",version:"DICOM"},"(0072,003C)":{tag:"(0072,003C)",vr:"SS",name:"AbstractPriorValue",vm:"2",version:"DICOM"},"(0072,003E)":{tag:"(0072,003E)",vr:"SQ",name:"AbstractPriorCodeSequence",vm:"1",version:"DICOM"},"(0072,0040)":{tag:"(0072,0040)",vr:"LO",name:"ImageSetLabel",vm:"1",version:"DICOM"},"(0072,0050)":{tag:"(0072,0050)",vr:"CS",name:"SelectorAttributeVR",vm:"1",version:"DICOM"},"(0072,0052)":{tag:"(0072,0052)",vr:"AT",name:"SelectorSequencePointer",vm:"1-n",version:"DICOM"},"(0072,0054)":{tag:"(0072,0054)",vr:"LO",name:"SelectorSequencePointerPrivateCreator",vm:"1-n",version:"DICOM"},"(0072,0056)":{tag:"(0072,0056)",vr:"LO",name:"SelectorAttributePrivateCreator",vm:"1",version:"DICOM"},"(0072,005E)":{tag:"(0072,005E)",vr:"AE",name:"SelectorAEValue",vm:"1-n",version:"DICOM"},"(0072,005F)":{tag:"(0072,005F)",vr:"AS",name:"SelectorASValue",vm:"1-n",version:"DICOM"},"(0072,0060)":{tag:"(0072,0060)",vr:"AT",name:"SelectorATValue",vm:"1-n",version:"DICOM"},"(0072,0061)":{tag:"(0072,0061)",vr:"DA",name:"SelectorDAValue",vm:"1-n",version:"DICOM"},"(0072,0062)":{tag:"(0072,0062)",vr:"CS",name:"SelectorCSValue",vm:"1-n",version:"DICOM"},"(0072,0063)":{tag:"(0072,0063)",vr:"DT",name:"SelectorDTValue",vm:"1-n",version:"DICOM"},"(0072,0064)":{tag:"(0072,0064)",vr:"IS",name:"SelectorISValue",vm:"1-n",version:"DICOM"},"(0072,0065)":{tag:"(0072,0065)",vr:"OB",name:"SelectorOBValue",vm:"1",version:"DICOM"},"(0072,0066)":{tag:"(0072,0066)",vr:"LO",name:"SelectorLOValue",vm:"1-n",version:"DICOM"},"(0072,0067)":{tag:"(0072,0067)",vr:"OF",name:"SelectorOFValue",vm:"1",version:"DICOM"},"(0072,0068)":{tag:"(0072,0068)",vr:"LT",name:"SelectorLTValue",vm:"1",version:"DICOM"},"(0072,0069)":{tag:"(0072,0069)",vr:"OW",name:"SelectorOWValue",vm:"1",version:"DICOM"},"(0072,006A)":{tag:"(0072,006A)",vr:"PN",name:"SelectorPNValue",vm:"1-n",version:"DICOM"},"(0072,006B)":{tag:"(0072,006B)",vr:"TM",name:"SelectorTMValue",vm:"1-n",version:"DICOM"},"(0072,006C)":{tag:"(0072,006C)",vr:"SH",name:"SelectorSHValue",vm:"1-n",version:"DICOM"},"(0072,006D)":{tag:"(0072,006D)",vr:"UN",name:"SelectorUNValue",vm:"1",version:"DICOM"},"(0072,006E)":{tag:"(0072,006E)",vr:"ST",name:"SelectorSTValue",vm:"1",version:"DICOM"},"(0072,006F)":{tag:"(0072,006F)",vr:"UC",name:"SelectorUCValue",vm:"1-n",version:"DICOM"},"(0072,0070)":{tag:"(0072,0070)",vr:"UT",name:"SelectorUTValue",vm:"1",version:"DICOM"},"(0072,0071)":{tag:"(0072,0071)",vr:"UR",name:"SelectorURValue",vm:"1",version:"DICOM"},"(0072,0072)":{tag:"(0072,0072)",vr:"DS",name:"SelectorDSValue",vm:"1-n",version:"DICOM"},"(0072,0073)":{tag:"(0072,0073)",vr:"OD",name:"SelectorODValue",vm:"1",version:"DICOM"},"(0072,0074)":{tag:"(0072,0074)",vr:"FD",name:"SelectorFDValue",vm:"1-n",version:"DICOM"},"(0072,0075)":{tag:"(0072,0075)",vr:"OL",name:"SelectorOLValue",vm:"1",version:"DICOM"},"(0072,0076)":{tag:"(0072,0076)",vr:"FL",name:"SelectorFLValue",vm:"1-n",version:"DICOM"},"(0072,0078)":{tag:"(0072,0078)",vr:"UL",name:"SelectorULValue",vm:"1-n",version:"DICOM"},"(0072,007A)":{tag:"(0072,007A)",vr:"US",name:"SelectorUSValue",vm:"1-n",version:"DICOM"},"(0072,007C)":{tag:"(0072,007C)",vr:"SL",name:"SelectorSLValue",vm:"1-n",version:"DICOM"},"(0072,007E)":{tag:"(0072,007E)",vr:"SS",name:"SelectorSSValue",vm:"1-n",version:"DICOM"},"(0072,007F)":{tag:"(0072,007F)",vr:"UI",name:"SelectorUIValue",vm:"1-n",version:"DICOM"},"(0072,0080)":{tag:"(0072,0080)",vr:"SQ",name:"SelectorCodeSequenceValue",vm:"1",version:"DICOM"},"(0072,0081)":{tag:"(0072,0081)",vr:"OV",name:"SelectorOVValue",vm:"1",version:"DICOM"},"(0072,0082)":{tag:"(0072,0082)",vr:"SV",name:"SelectorSVValue",vm:"1-n",version:"DICOM"},"(0072,0083)":{tag:"(0072,0083)",vr:"UV",name:"SelectorUVValue",vm:"1-n",version:"DICOM"},"(0072,0100)":{tag:"(0072,0100)",vr:"US",name:"NumberOfScreens",vm:"1",version:"DICOM"},"(0072,0102)":{tag:"(0072,0102)",vr:"SQ",name:"NominalScreenDefinitionSequence",vm:"1",version:"DICOM"},"(0072,0104)":{tag:"(0072,0104)",vr:"US",name:"NumberOfVerticalPixels",vm:"1",version:"DICOM"},"(0072,0106)":{tag:"(0072,0106)",vr:"US",name:"NumberOfHorizontalPixels",vm:"1",version:"DICOM"},"(0072,0108)":{tag:"(0072,0108)",vr:"FD",name:"DisplayEnvironmentSpatialPosition",vm:"4",version:"DICOM"},"(0072,010A)":{tag:"(0072,010A)",vr:"US",name:"ScreenMinimumGrayscaleBitDepth",vm:"1",version:"DICOM"},"(0072,010C)":{tag:"(0072,010C)",vr:"US",name:"ScreenMinimumColorBitDepth",vm:"1",version:"DICOM"},"(0072,010E)":{tag:"(0072,010E)",vr:"US",name:"ApplicationMaximumRepaintTime",vm:"1",version:"DICOM"},"(0072,0200)":{tag:"(0072,0200)",vr:"SQ",name:"DisplaySetsSequence",vm:"1",version:"DICOM"},"(0072,0202)":{tag:"(0072,0202)",vr:"US",name:"DisplaySetNumber",vm:"1",version:"DICOM"},"(0072,0203)":{tag:"(0072,0203)",vr:"LO",name:"DisplaySetLabel",vm:"1",version:"DICOM"},"(0072,0204)":{tag:"(0072,0204)",vr:"US",name:"DisplaySetPresentationGroup",vm:"1",version:"DICOM"},"(0072,0206)":{tag:"(0072,0206)",vr:"LO",name:"DisplaySetPresentationGroupDescription",vm:"1",version:"DICOM"},"(0072,0208)":{tag:"(0072,0208)",vr:"CS",name:"PartialDataDisplayHandling",vm:"1",version:"DICOM"},"(0072,0210)":{tag:"(0072,0210)",vr:"SQ",name:"SynchronizedScrollingSequence",vm:"1",version:"DICOM"},"(0072,0212)":{tag:"(0072,0212)",vr:"US",name:"DisplaySetScrollingGroup",vm:"2-n",version:"DICOM"},"(0072,0214)":{tag:"(0072,0214)",vr:"SQ",name:"NavigationIndicatorSequence",vm:"1",version:"DICOM"},"(0072,0216)":{tag:"(0072,0216)",vr:"US",name:"NavigationDisplaySet",vm:"1",version:"DICOM"},"(0072,0218)":{tag:"(0072,0218)",vr:"US",name:"ReferenceDisplaySets",vm:"1-n",version:"DICOM"},"(0072,0300)":{tag:"(0072,0300)",vr:"SQ",name:"ImageBoxesSequence",vm:"1",version:"DICOM"},"(0072,0302)":{tag:"(0072,0302)",vr:"US",name:"ImageBoxNumber",vm:"1",version:"DICOM"},"(0072,0304)":{tag:"(0072,0304)",vr:"CS",name:"ImageBoxLayoutType",vm:"1",version:"DICOM"},"(0072,0306)":{tag:"(0072,0306)",vr:"US",name:"ImageBoxTileHorizontalDimension",vm:"1",version:"DICOM"},"(0072,0308)":{tag:"(0072,0308)",vr:"US",name:"ImageBoxTileVerticalDimension",vm:"1",version:"DICOM"},"(0072,0310)":{tag:"(0072,0310)",vr:"CS",name:"ImageBoxScrollDirection",vm:"1",version:"DICOM"},"(0072,0312)":{tag:"(0072,0312)",vr:"CS",name:"ImageBoxSmallScrollType",vm:"1",version:"DICOM"},"(0072,0314)":{tag:"(0072,0314)",vr:"US",name:"ImageBoxSmallScrollAmount",vm:"1",version:"DICOM"},"(0072,0316)":{tag:"(0072,0316)",vr:"CS",name:"ImageBoxLargeScrollType",vm:"1",version:"DICOM"},"(0072,0318)":{tag:"(0072,0318)",vr:"US",name:"ImageBoxLargeScrollAmount",vm:"1",version:"DICOM"},"(0072,0320)":{tag:"(0072,0320)",vr:"US",name:"ImageBoxOverlapPriority",vm:"1",version:"DICOM"},"(0072,0330)":{tag:"(0072,0330)",vr:"FD",name:"CineRelativeToRealTime",vm:"1",version:"DICOM"},"(0072,0400)":{tag:"(0072,0400)",vr:"SQ",name:"FilterOperationsSequence",vm:"1",version:"DICOM"},"(0072,0402)":{tag:"(0072,0402)",vr:"CS",name:"FilterByCategory",vm:"1",version:"DICOM"},"(0072,0404)":{tag:"(0072,0404)",vr:"CS",name:"FilterByAttributePresence",vm:"1",version:"DICOM"},"(0072,0406)":{tag:"(0072,0406)",vr:"CS",name:"FilterByOperator",vm:"1",version:"DICOM"},"(0072,0420)":{tag:"(0072,0420)",vr:"US",name:"StructuredDisplayBackgroundCIELabValue",vm:"3",version:"DICOM"},"(0072,0421)":{tag:"(0072,0421)",vr:"US",name:"EmptyImageBoxCIELabValue",vm:"3",version:"DICOM"},"(0072,0422)":{tag:"(0072,0422)",vr:"SQ",name:"StructuredDisplayImageBoxSequence",vm:"1",version:"DICOM"},"(0072,0424)":{tag:"(0072,0424)",vr:"SQ",name:"StructuredDisplayTextBoxSequence",vm:"1",version:"DICOM"},"(0072,0427)":{tag:"(0072,0427)",vr:"SQ",name:"ReferencedFirstFrameSequence",vm:"1",version:"DICOM"},"(0072,0430)":{tag:"(0072,0430)",vr:"SQ",name:"ImageBoxSynchronizationSequence",vm:"1",version:"DICOM"},"(0072,0432)":{tag:"(0072,0432)",vr:"US",name:"SynchronizedImageBoxList",vm:"2-n",version:"DICOM"},"(0072,0434)":{tag:"(0072,0434)",vr:"CS",name:"TypeOfSynchronization",vm:"1",version:"DICOM"},"(0072,0500)":{tag:"(0072,0500)",vr:"CS",name:"BlendingOperationType",vm:"1",version:"DICOM"},"(0072,0510)":{tag:"(0072,0510)",vr:"CS",name:"ReformattingOperationType",vm:"1",version:"DICOM"},"(0072,0512)":{tag:"(0072,0512)",vr:"FD",name:"ReformattingThickness",vm:"1",version:"DICOM"},"(0072,0514)":{tag:"(0072,0514)",vr:"FD",name:"ReformattingInterval",vm:"1",version:"DICOM"},"(0072,0516)":{tag:"(0072,0516)",vr:"CS",name:"ReformattingOperationInitialViewDirection",vm:"1",version:"DICOM"},"(0072,0520)":{tag:"(0072,0520)",vr:"CS",name:"ThreeDRenderingType",vm:"1-n",version:"DICOM"},"(0072,0600)":{tag:"(0072,0600)",vr:"SQ",name:"SortingOperationsSequence",vm:"1",version:"DICOM"},"(0072,0602)":{tag:"(0072,0602)",vr:"CS",name:"SortByCategory",vm:"1",version:"DICOM"},"(0072,0604)":{tag:"(0072,0604)",vr:"CS",name:"SortingDirection",vm:"1",version:"DICOM"},"(0072,0700)":{tag:"(0072,0700)",vr:"CS",name:"DisplaySetPatientOrientation",vm:"2",version:"DICOM"},"(0072,0702)":{tag:"(0072,0702)",vr:"CS",name:"VOIType",vm:"1",version:"DICOM"},"(0072,0704)":{tag:"(0072,0704)",vr:"CS",name:"PseudoColorType",vm:"1",version:"DICOM"},"(0072,0705)":{tag:"(0072,0705)",vr:"SQ",name:"PseudoColorPaletteInstanceReferenceSequence",vm:"1",version:"DICOM"},"(0072,0706)":{tag:"(0072,0706)",vr:"CS",name:"ShowGrayscaleInverted",vm:"1",version:"DICOM"},"(0072,0710)":{tag:"(0072,0710)",vr:"CS",name:"ShowImageTrueSizeFlag",vm:"1",version:"DICOM"},"(0072,0712)":{tag:"(0072,0712)",vr:"CS",name:"ShowGraphicAnnotationFlag",vm:"1",version:"DICOM"},"(0072,0714)":{tag:"(0072,0714)",vr:"CS",name:"ShowPatientDemographicsFlag",vm:"1",version:"DICOM"},"(0072,0716)":{tag:"(0072,0716)",vr:"CS",name:"ShowAcquisitionTechniquesFlag",vm:"1",version:"DICOM"},"(0072,0717)":{tag:"(0072,0717)",vr:"CS",name:"DisplaySetHorizontalJustification",vm:"1",version:"DICOM"},"(0072,0718)":{tag:"(0072,0718)",vr:"CS",name:"DisplaySetVerticalJustification",vm:"1",version:"DICOM"},"(0074,0120)":{tag:"(0074,0120)",vr:"FD",name:"ContinuationStartMeterset",vm:"1",version:"DICOM"},"(0074,0121)":{tag:"(0074,0121)",vr:"FD",name:"ContinuationEndMeterset",vm:"1",version:"DICOM"},"(0074,1000)":{tag:"(0074,1000)",vr:"CS",name:"ProcedureStepState",vm:"1",version:"DICOM"},"(0074,1002)":{tag:"(0074,1002)",vr:"SQ",name:"ProcedureStepProgressInformationSequence",vm:"1",version:"DICOM"},"(0074,1004)":{tag:"(0074,1004)",vr:"DS",name:"ProcedureStepProgress",vm:"1",version:"DICOM"},"(0074,1006)":{tag:"(0074,1006)",vr:"ST",name:"ProcedureStepProgressDescription",vm:"1",version:"DICOM"},"(0074,1007)":{tag:"(0074,1007)",vr:"SQ",name:"ProcedureStepProgressParametersSequence",vm:"1",version:"DICOM"},"(0074,1008)":{tag:"(0074,1008)",vr:"SQ",name:"ProcedureStepCommunicationsURISequence",vm:"1",version:"DICOM"},"(0074,100A)":{tag:"(0074,100A)",vr:"UR",name:"ContactURI",vm:"1",version:"DICOM"},"(0074,100C)":{tag:"(0074,100C)",vr:"LO",name:"ContactDisplayName",vm:"1",version:"DICOM"},"(0074,100E)":{tag:"(0074,100E)",vr:"SQ",name:"ProcedureStepDiscontinuationReasonCodeSequence",vm:"1",version:"DICOM"},"(0074,1020)":{tag:"(0074,1020)",vr:"SQ",name:"BeamTaskSequence",vm:"1",version:"DICOM"},"(0074,1022)":{tag:"(0074,1022)",vr:"CS",name:"BeamTaskType",vm:"1",version:"DICOM"},"(0074,1025)":{tag:"(0074,1025)",vr:"CS",name:"AutosequenceFlag",vm:"1",version:"DICOM"},"(0074,1026)":{tag:"(0074,1026)",vr:"FD",name:"TableTopVerticalAdjustedPosition",vm:"1",version:"DICOM"},"(0074,1027)":{tag:"(0074,1027)",vr:"FD",name:"TableTopLongitudinalAdjustedPosition",vm:"1",version:"DICOM"},"(0074,1028)":{tag:"(0074,1028)",vr:"FD",name:"TableTopLateralAdjustedPosition",vm:"1",version:"DICOM"},"(0074,102A)":{tag:"(0074,102A)",vr:"FD",name:"PatientSupportAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102B)":{tag:"(0074,102B)",vr:"FD",name:"TableTopEccentricAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102C)":{tag:"(0074,102C)",vr:"FD",name:"TableTopPitchAdjustedAngle",vm:"1",version:"DICOM"},"(0074,102D)":{tag:"(0074,102D)",vr:"FD",name:"TableTopRollAdjustedAngle",vm:"1",version:"DICOM"},"(0074,1030)":{tag:"(0074,1030)",vr:"SQ",name:"DeliveryVerificationImageSequence",vm:"1",version:"DICOM"},"(0074,1032)":{tag:"(0074,1032)",vr:"CS",name:"VerificationImageTiming",vm:"1",version:"DICOM"},"(0074,1034)":{tag:"(0074,1034)",vr:"CS",name:"DoubleExposureFlag",vm:"1",version:"DICOM"},"(0074,1036)":{tag:"(0074,1036)",vr:"CS",name:"DoubleExposureOrdering",vm:"1",version:"DICOM"},"(0074,1040)":{tag:"(0074,1040)",vr:"SQ",name:"RelatedReferenceRTImageSequence",vm:"1",version:"DICOM"},"(0074,1042)":{tag:"(0074,1042)",vr:"SQ",name:"GeneralMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1044)":{tag:"(0074,1044)",vr:"SQ",name:"ConventionalMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1046)":{tag:"(0074,1046)",vr:"SQ",name:"IonMachineVerificationSequence",vm:"1",version:"DICOM"},"(0074,1048)":{tag:"(0074,1048)",vr:"SQ",name:"FailedAttributesSequence",vm:"1",version:"DICOM"},"(0074,104A)":{tag:"(0074,104A)",vr:"SQ",name:"OverriddenAttributesSequence",vm:"1",version:"DICOM"},"(0074,104C)":{tag:"(0074,104C)",vr:"SQ",name:"ConventionalControlPointVerificationSequence",vm:"1",version:"DICOM"},"(0074,104E)":{tag:"(0074,104E)",vr:"SQ",name:"IonControlPointVerificationSequence",vm:"1",version:"DICOM"},"(0074,1050)":{tag:"(0074,1050)",vr:"SQ",name:"AttributeOccurrenceSequence",vm:"1",version:"DICOM"},"(0074,1052)":{tag:"(0074,1052)",vr:"AT",name:"AttributeOccurrencePointer",vm:"1",version:"DICOM"},"(0074,1054)":{tag:"(0074,1054)",vr:"UL",name:"AttributeItemSelector",vm:"1",version:"DICOM"},"(0074,1056)":{tag:"(0074,1056)",vr:"LO",name:"AttributeOccurrencePrivateCreator",vm:"1",version:"DICOM"},"(0074,1057)":{tag:"(0074,1057)",vr:"IS",name:"SelectorSequencePointerItems",vm:"1-n",version:"DICOM"},"(0074,1200)":{tag:"(0074,1200)",vr:"CS",name:"ScheduledProcedureStepPriority",vm:"1",version:"DICOM"},"(0074,1202)":{tag:"(0074,1202)",vr:"LO",name:"WorklistLabel",vm:"1",version:"DICOM"},"(0074,1204)":{tag:"(0074,1204)",vr:"LO",name:"ProcedureStepLabel",vm:"1",version:"DICOM"},"(0074,1210)":{tag:"(0074,1210)",vr:"SQ",name:"ScheduledProcessingParametersSequence",vm:"1",version:"DICOM"},"(0074,1212)":{tag:"(0074,1212)",vr:"SQ",name:"PerformedProcessingParametersSequence",vm:"1",version:"DICOM"},"(0074,1216)":{tag:"(0074,1216)",vr:"SQ",name:"UnifiedProcedureStepPerformedProcedureSequence",vm:"1",version:"DICOM"},"(0074,1224)":{tag:"(0074,1224)",vr:"SQ",name:"ReplacedProcedureStepSequence",vm:"1",version:"DICOM"},"(0074,1230)":{tag:"(0074,1230)",vr:"LO",name:"DeletionLock",vm:"1",version:"DICOM"},"(0074,1234)":{tag:"(0074,1234)",vr:"AE",name:"ReceivingAE",vm:"1",version:"DICOM"},"(0074,1236)":{tag:"(0074,1236)",vr:"AE",name:"RequestingAE",vm:"1",version:"DICOM"},"(0074,1238)":{tag:"(0074,1238)",vr:"LT",name:"ReasonForCancellation",vm:"1",version:"DICOM"},"(0074,1242)":{tag:"(0074,1242)",vr:"CS",name:"SCPStatus",vm:"1",version:"DICOM"},"(0074,1244)":{tag:"(0074,1244)",vr:"CS",name:"SubscriptionListStatus",vm:"1",version:"DICOM"},"(0074,1246)":{tag:"(0074,1246)",vr:"CS",name:"UnifiedProcedureStepListStatus",vm:"1",version:"DICOM"},"(0074,1324)":{tag:"(0074,1324)",vr:"UL",name:"BeamOrderIndex",vm:"1",version:"DICOM"},"(0074,1338)":{tag:"(0074,1338)",vr:"FD",name:"DoubleExposureMeterset",vm:"1",version:"DICOM"},"(0074,133A)":{tag:"(0074,133A)",vr:"FD",name:"DoubleExposureFieldDelta",vm:"4",version:"DICOM"},"(0074,1401)":{tag:"(0074,1401)",vr:"SQ",name:"BrachyTaskSequence",vm:"1",version:"DICOM"},"(0074,1402)":{tag:"(0074,1402)",vr:"DS",name:"ContinuationStartTotalReferenceAirKerma",vm:"1",version:"DICOM"},"(0074,1403)":{tag:"(0074,1403)",vr:"DS",name:"ContinuationEndTotalReferenceAirKerma",vm:"1",version:"DICOM"},"(0074,1404)":{tag:"(0074,1404)",vr:"IS",name:"ContinuationPulseNumber",vm:"1",version:"DICOM"},"(0074,1405)":{tag:"(0074,1405)",vr:"SQ",name:"ChannelDeliveryOrderSequence",vm:"1",version:"DICOM"},"(0074,1406)":{tag:"(0074,1406)",vr:"IS",name:"ReferencedChannelNumber",vm:"1",version:"DICOM"},"(0074,1407)":{tag:"(0074,1407)",vr:"DS",name:"StartCumulativeTimeWeight",vm:"1",version:"DICOM"},"(0074,1408)":{tag:"(0074,1408)",vr:"DS",name:"EndCumulativeTimeWeight",vm:"1",version:"DICOM"},"(0074,1409)":{tag:"(0074,1409)",vr:"SQ",name:"OmittedChannelSequence",vm:"1",version:"DICOM"},"(0074,140A)":{tag:"(0074,140A)",vr:"CS",name:"ReasonForChannelOmission",vm:"1",version:"DICOM"},"(0074,140B)":{tag:"(0074,140B)",vr:"LO",name:"ReasonForChannelOmissionDescription",vm:"1",version:"DICOM"},"(0074,140C)":{tag:"(0074,140C)",vr:"IS",name:"ChannelDeliveryOrderIndex",vm:"1",version:"DICOM"},"(0074,140D)":{tag:"(0074,140D)",vr:"SQ",name:"ChannelDeliveryContinuationSequence",vm:"1",version:"DICOM"},"(0074,140E)":{tag:"(0074,140E)",vr:"SQ",name:"OmittedApplicationSetupSequence",vm:"1",version:"DICOM"},"(0076,0001)":{tag:"(0076,0001)",vr:"LO",name:"ImplantAssemblyTemplateName",vm:"1",version:"DICOM"},"(0076,0003)":{tag:"(0076,0003)",vr:"LO",name:"ImplantAssemblyTemplateIssuer",vm:"1",version:"DICOM"},"(0076,0006)":{tag:"(0076,0006)",vr:"LO",name:"ImplantAssemblyTemplateVersion",vm:"1",version:"DICOM"},"(0076,0008)":{tag:"(0076,0008)",vr:"SQ",name:"ReplacedImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,000A)":{tag:"(0076,000A)",vr:"CS",name:"ImplantAssemblyTemplateType",vm:"1",version:"DICOM"},"(0076,000C)":{tag:"(0076,000C)",vr:"SQ",name:"OriginalImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,000E)":{tag:"(0076,000E)",vr:"SQ",name:"DerivationImplantAssemblyTemplateSequence",vm:"1",version:"DICOM"},"(0076,0010)":{tag:"(0076,0010)",vr:"SQ",name:"ImplantAssemblyTemplateTargetAnatomySequence",vm:"1",version:"DICOM"},"(0076,0020)":{tag:"(0076,0020)",vr:"SQ",name:"ProcedureTypeCodeSequence",vm:"1",version:"DICOM"},"(0076,0030)":{tag:"(0076,0030)",vr:"LO",name:"SurgicalTechnique",vm:"1",version:"DICOM"},"(0076,0032)":{tag:"(0076,0032)",vr:"SQ",name:"ComponentTypesSequence",vm:"1",version:"DICOM"},"(0076,0034)":{tag:"(0076,0034)",vr:"CS",name:"ComponentTypeCodeSequence",vm:"1",version:"DICOM"},"(0076,0036)":{tag:"(0076,0036)",vr:"CS",name:"ExclusiveComponentType",vm:"1",version:"DICOM"},"(0076,0038)":{tag:"(0076,0038)",vr:"CS",name:"MandatoryComponentType",vm:"1",version:"DICOM"},"(0076,0040)":{tag:"(0076,0040)",vr:"SQ",name:"ComponentSequence",vm:"1",version:"DICOM"},"(0076,0055)":{tag:"(0076,0055)",vr:"US",name:"ComponentID",vm:"1",version:"DICOM"},"(0076,0060)":{tag:"(0076,0060)",vr:"SQ",name:"ComponentAssemblySequence",vm:"1",version:"DICOM"},"(0076,0070)":{tag:"(0076,0070)",vr:"US",name:"Component1ReferencedID",vm:"1",version:"DICOM"},"(0076,0080)":{tag:"(0076,0080)",vr:"US",name:"Component1ReferencedMatingFeatureSetID",vm:"1",version:"DICOM"},"(0076,0090)":{tag:"(0076,0090)",vr:"US",name:"Component1ReferencedMatingFeatureID",vm:"1",version:"DICOM"},"(0076,00A0)":{tag:"(0076,00A0)",vr:"US",name:"Component2ReferencedID",vm:"1",version:"DICOM"},"(0076,00B0)":{tag:"(0076,00B0)",vr:"US",name:"Component2ReferencedMatingFeatureSetID",vm:"1",version:"DICOM"},"(0076,00C0)":{tag:"(0076,00C0)",vr:"US",name:"Component2ReferencedMatingFeatureID",vm:"1",version:"DICOM"},"(0078,0001)":{tag:"(0078,0001)",vr:"LO",name:"ImplantTemplateGroupName",vm:"1",version:"DICOM"},"(0078,0010)":{tag:"(0078,0010)",vr:"ST",name:"ImplantTemplateGroupDescription",vm:"1",version:"DICOM"},"(0078,0020)":{tag:"(0078,0020)",vr:"LO",name:"ImplantTemplateGroupIssuer",vm:"1",version:"DICOM"},"(0078,0024)":{tag:"(0078,0024)",vr:"LO",name:"ImplantTemplateGroupVersion",vm:"1",version:"DICOM"},"(0078,0026)":{tag:"(0078,0026)",vr:"SQ",name:"ReplacedImplantTemplateGroupSequence",vm:"1",version:"DICOM"},"(0078,0028)":{tag:"(0078,0028)",vr:"SQ",name:"ImplantTemplateGroupTargetAnatomySequence",vm:"1",version:"DICOM"},"(0078,002A)":{tag:"(0078,002A)",vr:"SQ",name:"ImplantTemplateGroupMembersSequence",vm:"1",version:"DICOM"},"(0078,002E)":{tag:"(0078,002E)",vr:"US",name:"ImplantTemplateGroupMemberID",vm:"1",version:"DICOM"},"(0078,0050)":{tag:"(0078,0050)",vr:"FD",name:"ThreeDImplantTemplateGroupMemberMatchingPoint",vm:"3",version:"DICOM"},"(0078,0060)":{tag:"(0078,0060)",vr:"FD",name:"ThreeDImplantTemplateGroupMemberMatchingAxes",vm:"9",version:"DICOM"},"(0078,0070)":{tag:"(0078,0070)",vr:"SQ",name:"ImplantTemplateGroupMemberMatching2DCoordinatesSequence",vm:"1",version:"DICOM"},"(0078,0090)":{tag:"(0078,0090)",vr:"FD",name:"TwoDImplantTemplateGroupMemberMatchingPoint",vm:"2",version:"DICOM"},"(0078,00A0)":{tag:"(0078,00A0)",vr:"FD",name:"TwoDImplantTemplateGroupMemberMatchingAxes",vm:"4",version:"DICOM"},"(0078,00B0)":{tag:"(0078,00B0)",vr:"SQ",name:"ImplantTemplateGroupVariationDimensionSequence",vm:"1",version:"DICOM"},"(0078,00B2)":{tag:"(0078,00B2)",vr:"LO",name:"ImplantTemplateGroupVariationDimensionName",vm:"1",version:"DICOM"},"(0078,00B4)":{tag:"(0078,00B4)",vr:"SQ",name:"ImplantTemplateGroupVariationDimensionRankSequence",vm:"1",version:"DICOM"},"(0078,00B6)":{tag:"(0078,00B6)",vr:"US",name:"ReferencedImplantTemplateGroupMemberID",vm:"1",version:"DICOM"},"(0078,00B8)":{tag:"(0078,00B8)",vr:"US",name:"ImplantTemplateGroupVariationDimensionRank",vm:"1",version:"DICOM"},"(0080,0001)":{tag:"(0080,0001)",vr:"SQ",name:"SurfaceScanAcquisitionTypeCodeSequence",vm:"1",version:"DICOM"},"(0080,0002)":{tag:"(0080,0002)",vr:"SQ",name:"SurfaceScanModeCodeSequence",vm:"1",version:"DICOM"},"(0080,0003)":{tag:"(0080,0003)",vr:"SQ",name:"RegistrationMethodCodeSequence",vm:"1",version:"DICOM"},"(0080,0004)":{tag:"(0080,0004)",vr:"FD",name:"ShotDurationTime",vm:"1",version:"DICOM"},"(0080,0005)":{tag:"(0080,0005)",vr:"FD",name:"ShotOffsetTime",vm:"1",version:"DICOM"},"(0080,0006)":{tag:"(0080,0006)",vr:"US",name:"SurfacePointPresentationValueData",vm:"1-n",version:"DICOM"},"(0080,0007)":{tag:"(0080,0007)",vr:"US",name:"SurfacePointColorCIELabValueData",vm:"3-3n",version:"DICOM"},"(0080,0008)":{tag:"(0080,0008)",vr:"SQ",name:"UVMappingSequence",vm:"1",version:"DICOM"},"(0080,0009)":{tag:"(0080,0009)",vr:"SH",name:"TextureLabel",vm:"1",version:"DICOM"},"(0080,0010)":{tag:"(0080,0010)",vr:"OF",name:"UValueData",vm:"1-n",version:"DICOM"},"(0080,0011)":{tag:"(0080,0011)",vr:"OF",name:"VValueData",vm:"1-n",version:"DICOM"},"(0080,0012)":{tag:"(0080,0012)",vr:"SQ",name:"ReferencedTextureSequence",vm:"1",version:"DICOM"},"(0080,0013)":{tag:"(0080,0013)",vr:"SQ",name:"ReferencedSurfaceDataSequence",vm:"1",version:"DICOM"},"(0082,0001)":{tag:"(0082,0001)",vr:"CS",name:"AssessmentSummary",vm:"1",version:"DICOM"},"(0082,0003)":{tag:"(0082,0003)",vr:"UT",name:"AssessmentSummaryDescription",vm:"1",version:"DICOM"},"(0082,0004)":{tag:"(0082,0004)",vr:"SQ",name:"AssessedSOPInstanceSequence",vm:"1",version:"DICOM"},"(0082,0005)":{tag:"(0082,0005)",vr:"SQ",name:"ReferencedComparisonSOPInstanceSequence",vm:"1",version:"DICOM"},"(0082,0006)":{tag:"(0082,0006)",vr:"UL",name:"NumberOfAssessmentObservations",vm:"1",version:"DICOM"},"(0082,0007)":{tag:"(0082,0007)",vr:"SQ",name:"AssessmentObservationsSequence",vm:"1",version:"DICOM"},"(0082,0008)":{tag:"(0082,0008)",vr:"CS",name:"ObservationSignificance",vm:"1",version:"DICOM"},"(0082,000A)":{tag:"(0082,000A)",vr:"UT",name:"ObservationDescription",vm:"1",version:"DICOM"},"(0082,000C)":{tag:"(0082,000C)",vr:"SQ",name:"StructuredConstraintObservationSequence",vm:"1",version:"DICOM"},"(0082,0010)":{tag:"(0082,0010)",vr:"SQ",name:"AssessedAttributeValueSequence",vm:"1",version:"DICOM"},"(0082,0016)":{tag:"(0082,0016)",vr:"LO",name:"AssessmentSetID",vm:"1",version:"DICOM"},"(0082,0017)":{tag:"(0082,0017)",vr:"SQ",name:"AssessmentRequesterSequence",vm:"1",version:"DICOM"},"(0082,0018)":{tag:"(0082,0018)",vr:"LO",name:"SelectorAttributeName",vm:"1",version:"DICOM"},"(0082,0019)":{tag:"(0082,0019)",vr:"LO",name:"SelectorAttributeKeyword",vm:"1",version:"DICOM"},"(0082,0021)":{tag:"(0082,0021)",vr:"SQ",name:"AssessmentTypeCodeSequence",vm:"1",version:"DICOM"},"(0082,0022)":{tag:"(0082,0022)",vr:"SQ",name:"ObservationBasisCodeSequence",vm:"1",version:"DICOM"},"(0082,0023)":{tag:"(0082,0023)",vr:"LO",name:"AssessmentLabel",vm:"1",version:"DICOM"},"(0082,0032)":{tag:"(0082,0032)",vr:"CS",name:"ConstraintType",vm:"1",version:"DICOM"},"(0082,0033)":{tag:"(0082,0033)",vr:"UT",name:"SpecificationSelectionGuidance",vm:"1",version:"DICOM"},"(0082,0034)":{tag:"(0082,0034)",vr:"SQ",name:"ConstraintValueSequence",vm:"1",version:"DICOM"},"(0082,0035)":{tag:"(0082,0035)",vr:"SQ",name:"RecommendedDefaultValueSequence",vm:"1",version:"DICOM"},"(0082,0036)":{tag:"(0082,0036)",vr:"CS",name:"ConstraintViolationSignificance",vm:"1",version:"DICOM"},"(0082,0037)":{tag:"(0082,0037)",vr:"UT",name:"ConstraintViolationCondition",vm:"1",version:"DICOM"},"(0082,0038)":{tag:"(0082,0038)",vr:"CS",name:"ModifiableConstraintFlag",vm:"1",version:"DICOM"},"(0088,0130)":{tag:"(0088,0130)",vr:"SH",name:"StorageMediaFileSetID",vm:"1",version:"DICOM"},"(0088,0140)":{tag:"(0088,0140)",vr:"UI",name:"StorageMediaFileSetUID",vm:"1",version:"DICOM"},"(0088,0200)":{tag:"(0088,0200)",vr:"SQ",name:"IconImageSequence",vm:"1",version:"DICOM"},"(0100,0410)":{tag:"(0100,0410)",vr:"CS",name:"SOPInstanceStatus",vm:"1",version:"DICOM"},"(0100,0420)":{tag:"(0100,0420)",vr:"DT",name:"SOPAuthorizationDateTime",vm:"1",version:"DICOM"},"(0100,0424)":{tag:"(0100,0424)",vr:"LT",name:"SOPAuthorizationComment",vm:"1",version:"DICOM"},"(0100,0426)":{tag:"(0100,0426)",vr:"LO",name:"AuthorizationEquipmentCertificationNumber",vm:"1",version:"DICOM"},"(0400,0005)":{tag:"(0400,0005)",vr:"US",name:"MACIDNumber",vm:"1",version:"DICOM"},"(0400,0010)":{tag:"(0400,0010)",vr:"UI",name:"MACCalculationTransferSyntaxUID",vm:"1",version:"DICOM"},"(0400,0015)":{tag:"(0400,0015)",vr:"CS",name:"MACAlgorithm",vm:"1",version:"DICOM"},"(0400,0020)":{tag:"(0400,0020)",vr:"AT",name:"DataElementsSigned",vm:"1-n",version:"DICOM"},"(0400,0100)":{tag:"(0400,0100)",vr:"UI",name:"DigitalSignatureUID",vm:"1",version:"DICOM"},"(0400,0105)":{tag:"(0400,0105)",vr:"DT",name:"DigitalSignatureDateTime",vm:"1",version:"DICOM"},"(0400,0110)":{tag:"(0400,0110)",vr:"CS",name:"CertificateType",vm:"1",version:"DICOM"},"(0400,0115)":{tag:"(0400,0115)",vr:"OB",name:"CertificateOfSigner",vm:"1",version:"DICOM"},"(0400,0120)":{tag:"(0400,0120)",vr:"OB",name:"Signature",vm:"1",version:"DICOM"},"(0400,0305)":{tag:"(0400,0305)",vr:"CS",name:"CertifiedTimestampType",vm:"1",version:"DICOM"},"(0400,0310)":{tag:"(0400,0310)",vr:"OB",name:"CertifiedTimestamp",vm:"1",version:"DICOM"},"(0400,0401)":{tag:"(0400,0401)",vr:"SQ",name:"DigitalSignaturePurposeCodeSequence",vm:"1",version:"DICOM"},"(0400,0402)":{tag:"(0400,0402)",vr:"SQ",name:"ReferencedDigitalSignatureSequence",vm:"1",version:"DICOM"},"(0400,0403)":{tag:"(0400,0403)",vr:"SQ",name:"ReferencedSOPInstanceMACSequence",vm:"1",version:"DICOM"},"(0400,0404)":{tag:"(0400,0404)",vr:"OB",name:"MAC",vm:"1",version:"DICOM"},"(0400,0500)":{tag:"(0400,0500)",vr:"SQ",name:"EncryptedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0510)":{tag:"(0400,0510)",vr:"UI",name:"EncryptedContentTransferSyntaxUID",vm:"1",version:"DICOM"},"(0400,0520)":{tag:"(0400,0520)",vr:"OB",name:"EncryptedContent",vm:"1",version:"DICOM"},"(0400,0550)":{tag:"(0400,0550)",vr:"SQ",name:"ModifiedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0551)":{tag:"(0400,0551)",vr:"SQ",name:"NonconformingModifiedAttributesSequence",vm:"1",version:"DICOM"},"(0400,0552)":{tag:"(0400,0552)",vr:"OB",name:"NonconformingDataElementValue",vm:"1",version:"DICOM"},"(0400,0561)":{tag:"(0400,0561)",vr:"SQ",name:"OriginalAttributesSequence",vm:"1",version:"DICOM"},"(0400,0562)":{tag:"(0400,0562)",vr:"DT",name:"AttributeModificationDateTime",vm:"1",version:"DICOM"},"(0400,0563)":{tag:"(0400,0563)",vr:"LO",name:"ModifyingSystem",vm:"1",version:"DICOM"},"(0400,0564)":{tag:"(0400,0564)",vr:"LO",name:"SourceOfPreviousValues",vm:"1",version:"DICOM"},"(0400,0565)":{tag:"(0400,0565)",vr:"CS",name:"ReasonForTheAttributeModification",vm:"1",version:"DICOM"},"(0400,0600)":{tag:"(0400,0600)",vr:"CS",name:"InstanceOriginStatus",vm:"1",version:"DICOM"},"(2000,0010)":{tag:"(2000,0010)",vr:"IS",name:"NumberOfCopies",vm:"1",version:"DICOM"},"(2000,001E)":{tag:"(2000,001E)",vr:"SQ",name:"PrinterConfigurationSequence",vm:"1",version:"DICOM"},"(2000,0020)":{tag:"(2000,0020)",vr:"CS",name:"PrintPriority",vm:"1",version:"DICOM"},"(2000,0030)":{tag:"(2000,0030)",vr:"CS",name:"MediumType",vm:"1",version:"DICOM"},"(2000,0040)":{tag:"(2000,0040)",vr:"CS",name:"FilmDestination",vm:"1",version:"DICOM"},"(2000,0050)":{tag:"(2000,0050)",vr:"LO",name:"FilmSessionLabel",vm:"1",version:"DICOM"},"(2000,0060)":{tag:"(2000,0060)",vr:"IS",name:"MemoryAllocation",vm:"1",version:"DICOM"},"(2000,0061)":{tag:"(2000,0061)",vr:"IS",name:"MaximumMemoryAllocation",vm:"1",version:"DICOM"},"(2000,00A0)":{tag:"(2000,00A0)",vr:"US",name:"MemoryBitDepth",vm:"1",version:"DICOM"},"(2000,00A1)":{tag:"(2000,00A1)",vr:"US",name:"PrintingBitDepth",vm:"1",version:"DICOM"},"(2000,00A2)":{tag:"(2000,00A2)",vr:"SQ",name:"MediaInstalledSequence",vm:"1",version:"DICOM"},"(2000,00A4)":{tag:"(2000,00A4)",vr:"SQ",name:"OtherMediaAvailableSequence",vm:"1",version:"DICOM"},"(2000,00A8)":{tag:"(2000,00A8)",vr:"SQ",name:"SupportedImageDisplayFormatsSequence",vm:"1",version:"DICOM"},"(2000,0500)":{tag:"(2000,0500)",vr:"SQ",name:"ReferencedFilmBoxSequence",vm:"1",version:"DICOM"},"(2010,0010)":{tag:"(2010,0010)",vr:"ST",name:"ImageDisplayFormat",vm:"1",version:"DICOM"},"(2010,0030)":{tag:"(2010,0030)",vr:"CS",name:"AnnotationDisplayFormatID",vm:"1",version:"DICOM"},"(2010,0040)":{tag:"(2010,0040)",vr:"CS",name:"FilmOrientation",vm:"1",version:"DICOM"},"(2010,0050)":{tag:"(2010,0050)",vr:"CS",name:"FilmSizeID",vm:"1",version:"DICOM"},"(2010,0052)":{tag:"(2010,0052)",vr:"CS",name:"PrinterResolutionID",vm:"1",version:"DICOM"},"(2010,0054)":{tag:"(2010,0054)",vr:"CS",name:"DefaultPrinterResolutionID",vm:"1",version:"DICOM"},"(2010,0060)":{tag:"(2010,0060)",vr:"CS",name:"MagnificationType",vm:"1",version:"DICOM"},"(2010,0080)":{tag:"(2010,0080)",vr:"CS",name:"SmoothingType",vm:"1",version:"DICOM"},"(2010,00A6)":{tag:"(2010,00A6)",vr:"CS",name:"DefaultMagnificationType",vm:"1",version:"DICOM"},"(2010,00A7)":{tag:"(2010,00A7)",vr:"CS",name:"OtherMagnificationTypesAvailable",vm:"1-n",version:"DICOM"},"(2010,00A8)":{tag:"(2010,00A8)",vr:"CS",name:"DefaultSmoothingType",vm:"1",version:"DICOM"},"(2010,00A9)":{tag:"(2010,00A9)",vr:"CS",name:"OtherSmoothingTypesAvailable",vm:"1-n",version:"DICOM"},"(2010,0100)":{tag:"(2010,0100)",vr:"CS",name:"BorderDensity",vm:"1",version:"DICOM"},"(2010,0110)":{tag:"(2010,0110)",vr:"CS",name:"EmptyImageDensity",vm:"1",version:"DICOM"},"(2010,0120)":{tag:"(2010,0120)",vr:"US",name:"MinDensity",vm:"1",version:"DICOM"},"(2010,0130)":{tag:"(2010,0130)",vr:"US",name:"MaxDensity",vm:"1",version:"DICOM"},"(2010,0140)":{tag:"(2010,0140)",vr:"CS",name:"Trim",vm:"1",version:"DICOM"},"(2010,0150)":{tag:"(2010,0150)",vr:"ST",name:"ConfigurationInformation",vm:"1",version:"DICOM"},"(2010,0152)":{tag:"(2010,0152)",vr:"LT",name:"ConfigurationInformationDescription",vm:"1",version:"DICOM"},"(2010,0154)":{tag:"(2010,0154)",vr:"IS",name:"MaximumCollatedFilms",vm:"1",version:"DICOM"},"(2010,015E)":{tag:"(2010,015E)",vr:"US",name:"Illumination",vm:"1",version:"DICOM"},"(2010,0160)":{tag:"(2010,0160)",vr:"US",name:"ReflectedAmbientLight",vm:"1",version:"DICOM"},"(2010,0376)":{tag:"(2010,0376)",vr:"DS",name:"PrinterPixelSpacing",vm:"2",version:"DICOM"},"(2010,0500)":{tag:"(2010,0500)",vr:"SQ",name:"ReferencedFilmSessionSequence",vm:"1",version:"DICOM"},"(2010,0510)":{tag:"(2010,0510)",vr:"SQ",name:"ReferencedImageBoxSequence",vm:"1",version:"DICOM"},"(2010,0520)":{tag:"(2010,0520)",vr:"SQ",name:"ReferencedBasicAnnotationBoxSequence",vm:"1",version:"DICOM"},"(2020,0010)":{tag:"(2020,0010)",vr:"US",name:"ImageBoxPosition",vm:"1",version:"DICOM"},"(2020,0020)":{tag:"(2020,0020)",vr:"CS",name:"Polarity",vm:"1",version:"DICOM"},"(2020,0030)":{tag:"(2020,0030)",vr:"DS",name:"RequestedImageSize",vm:"1",version:"DICOM"},"(2020,0040)":{tag:"(2020,0040)",vr:"CS",name:"RequestedDecimateCropBehavior",vm:"1",version:"DICOM"},"(2020,0050)":{tag:"(2020,0050)",vr:"CS",name:"RequestedResolutionID",vm:"1",version:"DICOM"},"(2020,00A0)":{tag:"(2020,00A0)",vr:"CS",name:"RequestedImageSizeFlag",vm:"1",version:"DICOM"},"(2020,00A2)":{tag:"(2020,00A2)",vr:"CS",name:"DecimateCropResult",vm:"1",version:"DICOM"},"(2020,0110)":{tag:"(2020,0110)",vr:"SQ",name:"BasicGrayscaleImageSequence",vm:"1",version:"DICOM"},"(2020,0111)":{tag:"(2020,0111)",vr:"SQ",name:"BasicColorImageSequence",vm:"1",version:"DICOM"},"(2030,0010)":{tag:"(2030,0010)",vr:"US",name:"AnnotationPosition",vm:"1",version:"DICOM"},"(2030,0020)":{tag:"(2030,0020)",vr:"LO",name:"TextString",vm:"1",version:"DICOM"},"(2050,0010)":{tag:"(2050,0010)",vr:"SQ",name:"PresentationLUTSequence",vm:"1",version:"DICOM"},"(2050,0020)":{tag:"(2050,0020)",vr:"CS",name:"PresentationLUTShape",vm:"1",version:"DICOM"},"(2050,0500)":{tag:"(2050,0500)",vr:"SQ",name:"ReferencedPresentationLUTSequence",vm:"1",version:"DICOM"},"(2100,0020)":{tag:"(2100,0020)",vr:"CS",name:"ExecutionStatus",vm:"1",version:"DICOM"},"(2100,0030)":{tag:"(2100,0030)",vr:"CS",name:"ExecutionStatusInfo",vm:"1",version:"DICOM"},"(2100,0040)":{tag:"(2100,0040)",vr:"DA",name:"CreationDate",vm:"1",version:"DICOM"},"(2100,0050)":{tag:"(2100,0050)",vr:"TM",name:"CreationTime",vm:"1",version:"DICOM"},"(2100,0070)":{tag:"(2100,0070)",vr:"AE",name:"Originator",vm:"1",version:"DICOM"},"(2100,0160)":{tag:"(2100,0160)",vr:"SH",name:"OwnerID",vm:"1",version:"DICOM"},"(2100,0170)":{tag:"(2100,0170)",vr:"IS",name:"NumberOfFilms",vm:"1",version:"DICOM"},"(2110,0010)":{tag:"(2110,0010)",vr:"CS",name:"PrinterStatus",vm:"1",version:"DICOM"},"(2110,0020)":{tag:"(2110,0020)",vr:"CS",name:"PrinterStatusInfo",vm:"1",version:"DICOM"},"(2110,0030)":{tag:"(2110,0030)",vr:"LO",name:"PrinterName",vm:"1",version:"DICOM"},"(2200,0001)":{tag:"(2200,0001)",vr:"CS",name:"LabelUsingInformationExtractedFromInstances",vm:"1",version:"DICOM"},"(2200,0002)":{tag:"(2200,0002)",vr:"UT",name:"LabelText",vm:"1",version:"DICOM"},"(2200,0003)":{tag:"(2200,0003)",vr:"CS",name:"LabelStyleSelection",vm:"1",version:"DICOM"},"(2200,0004)":{tag:"(2200,0004)",vr:"LT",name:"MediaDisposition",vm:"1",version:"DICOM"},"(2200,0005)":{tag:"(2200,0005)",vr:"LT",name:"BarcodeValue",vm:"1",version:"DICOM"},"(2200,0006)":{tag:"(2200,0006)",vr:"CS",name:"BarcodeSymbology",vm:"1",version:"DICOM"},"(2200,0007)":{tag:"(2200,0007)",vr:"CS",name:"AllowMediaSplitting",vm:"1",version:"DICOM"},"(2200,0008)":{tag:"(2200,0008)",vr:"CS",name:"IncludeNonDICOMObjects",vm:"1",version:"DICOM"},"(2200,0009)":{tag:"(2200,0009)",vr:"CS",name:"IncludeDisplayApplication",vm:"1",version:"DICOM"},"(2200,000A)":{tag:"(2200,000A)",vr:"CS",name:"PreserveCompositeInstancesAfterMediaCreation",vm:"1",version:"DICOM"},"(2200,000B)":{tag:"(2200,000B)",vr:"US",name:"TotalNumberOfPiecesOfMediaCreated",vm:"1",version:"DICOM"},"(2200,000C)":{tag:"(2200,000C)",vr:"LO",name:"RequestedMediaApplicationProfile",vm:"1",version:"DICOM"},"(2200,000D)":{tag:"(2200,000D)",vr:"SQ",name:"ReferencedStorageMediaSequence",vm:"1",version:"DICOM"},"(2200,000E)":{tag:"(2200,000E)",vr:"AT",name:"FailureAttributes",vm:"1-n",version:"DICOM"},"(2200,000F)":{tag:"(2200,000F)",vr:"CS",name:"AllowLossyCompression",vm:"1",version:"DICOM"},"(2200,0020)":{tag:"(2200,0020)",vr:"CS",name:"RequestPriority",vm:"1",version:"DICOM"},"(3002,0002)":{tag:"(3002,0002)",vr:"SH",name:"RTImageLabel",vm:"1",version:"DICOM"},"(3002,0003)":{tag:"(3002,0003)",vr:"LO",name:"RTImageName",vm:"1",version:"DICOM"},"(3002,0004)":{tag:"(3002,0004)",vr:"ST",name:"RTImageDescription",vm:"1",version:"DICOM"},"(3002,000A)":{tag:"(3002,000A)",vr:"CS",name:"ReportedValuesOrigin",vm:"1",version:"DICOM"},"(3002,000C)":{tag:"(3002,000C)",vr:"CS",name:"RTImagePlane",vm:"1",version:"DICOM"},"(3002,000D)":{tag:"(3002,000D)",vr:"DS",name:"XRayImageReceptorTranslation",vm:"3",version:"DICOM"},"(3002,000E)":{tag:"(3002,000E)",vr:"DS",name:"XRayImageReceptorAngle",vm:"1",version:"DICOM"},"(3002,0010)":{tag:"(3002,0010)",vr:"DS",name:"RTImageOrientation",vm:"6",version:"DICOM"},"(3002,0011)":{tag:"(3002,0011)",vr:"DS",name:"ImagePlanePixelSpacing",vm:"2",version:"DICOM"},"(3002,0012)":{tag:"(3002,0012)",vr:"DS",name:"RTImagePosition",vm:"2",version:"DICOM"},"(3002,0020)":{tag:"(3002,0020)",vr:"SH",name:"RadiationMachineName",vm:"1",version:"DICOM"},"(3002,0022)":{tag:"(3002,0022)",vr:"DS",name:"RadiationMachineSAD",vm:"1",version:"DICOM"},"(3002,0024)":{tag:"(3002,0024)",vr:"DS",name:"RadiationMachineSSD",vm:"1",version:"DICOM"},"(3002,0026)":{tag:"(3002,0026)",vr:"DS",name:"RTImageSID",vm:"1",version:"DICOM"},"(3002,0028)":{tag:"(3002,0028)",vr:"DS",name:"SourceToReferenceObjectDistance",vm:"1",version:"DICOM"},"(3002,0029)":{tag:"(3002,0029)",vr:"IS",name:"FractionNumber",vm:"1",version:"DICOM"},"(3002,0030)":{tag:"(3002,0030)",vr:"SQ",name:"ExposureSequence",vm:"1",version:"DICOM"},"(3002,0032)":{tag:"(3002,0032)",vr:"DS",name:"MetersetExposure",vm:"1",version:"DICOM"},"(3002,0034)":{tag:"(3002,0034)",vr:"DS",name:"DiaphragmPosition",vm:"4",version:"DICOM"},"(3002,0040)":{tag:"(3002,0040)",vr:"SQ",name:"FluenceMapSequence",vm:"1",version:"DICOM"},"(3002,0041)":{tag:"(3002,0041)",vr:"CS",name:"FluenceDataSource",vm:"1",version:"DICOM"},"(3002,0042)":{tag:"(3002,0042)",vr:"DS",name:"FluenceDataScale",vm:"1",version:"DICOM"},"(3002,0050)":{tag:"(3002,0050)",vr:"SQ",name:"PrimaryFluenceModeSequence",vm:"1",version:"DICOM"},"(3002,0051)":{tag:"(3002,0051)",vr:"CS",name:"FluenceMode",vm:"1",version:"DICOM"},"(3002,0052)":{tag:"(3002,0052)",vr:"SH",name:"FluenceModeID",vm:"1",version:"DICOM"},"(3004,0001)":{tag:"(3004,0001)",vr:"CS",name:"DVHType",vm:"1",version:"DICOM"},"(3004,0002)":{tag:"(3004,0002)",vr:"CS",name:"DoseUnits",vm:"1",version:"DICOM"},"(3004,0004)":{tag:"(3004,0004)",vr:"CS",name:"DoseType",vm:"1",version:"DICOM"},"(3004,0005)":{tag:"(3004,0005)",vr:"CS",name:"SpatialTransformOfDose",vm:"1",version:"DICOM"},"(3004,0006)":{tag:"(3004,0006)",vr:"LO",name:"DoseComment",vm:"1",version:"DICOM"},"(3004,0008)":{tag:"(3004,0008)",vr:"DS",name:"NormalizationPoint",vm:"3",version:"DICOM"},"(3004,000A)":{tag:"(3004,000A)",vr:"CS",name:"DoseSummationType",vm:"1",version:"DICOM"},"(3004,000C)":{tag:"(3004,000C)",vr:"DS",name:"GridFrameOffsetVector",vm:"2-n",version:"DICOM"},"(3004,000E)":{tag:"(3004,000E)",vr:"DS",name:"DoseGridScaling",vm:"1",version:"DICOM"},"(3004,0010)":{tag:"(3004,0010)",vr:"SQ",name:"RTDoseROISequence",vm:"1",version:"DICOM"},"(3004,0012)":{tag:"(3004,0012)",vr:"DS",name:"DoseValue",vm:"1",version:"DICOM"},"(3004,0014)":{tag:"(3004,0014)",vr:"CS",name:"TissueHeterogeneityCorrection",vm:"1-3",version:"DICOM"},"(3004,0040)":{tag:"(3004,0040)",vr:"DS",name:"DVHNormalizationPoint",vm:"3",version:"DICOM"},"(3004,0042)":{tag:"(3004,0042)",vr:"DS",name:"DVHNormalizationDoseValue",vm:"1",version:"DICOM"},"(3004,0050)":{tag:"(3004,0050)",vr:"SQ",name:"DVHSequence",vm:"1",version:"DICOM"},"(3004,0052)":{tag:"(3004,0052)",vr:"DS",name:"DVHDoseScaling",vm:"1",version:"DICOM"},"(3004,0054)":{tag:"(3004,0054)",vr:"CS",name:"DVHVolumeUnits",vm:"1",version:"DICOM"},"(3004,0056)":{tag:"(3004,0056)",vr:"IS",name:"DVHNumberOfBins",vm:"1",version:"DICOM"},"(3004,0058)":{tag:"(3004,0058)",vr:"DS",name:"DVHData",vm:"2-2n",version:"DICOM"},"(3004,0060)":{tag:"(3004,0060)",vr:"SQ",name:"DVHReferencedROISequence",vm:"1",version:"DICOM"},"(3004,0062)":{tag:"(3004,0062)",vr:"CS",name:"DVHROIContributionType",vm:"1",version:"DICOM"},"(3004,0070)":{tag:"(3004,0070)",vr:"DS",name:"DVHMinimumDose",vm:"1",version:"DICOM"},"(3004,0072)":{tag:"(3004,0072)",vr:"DS",name:"DVHMaximumDose",vm:"1",version:"DICOM"},"(3004,0074)":{tag:"(3004,0074)",vr:"DS",name:"DVHMeanDose",vm:"1",version:"DICOM"},"(3006,0002)":{tag:"(3006,0002)",vr:"SH",name:"StructureSetLabel",vm:"1",version:"DICOM"},"(3006,0004)":{tag:"(3006,0004)",vr:"LO",name:"StructureSetName",vm:"1",version:"DICOM"},"(3006,0006)":{tag:"(3006,0006)",vr:"ST",name:"StructureSetDescription",vm:"1",version:"DICOM"},"(3006,0008)":{tag:"(3006,0008)",vr:"DA",name:"StructureSetDate",vm:"1",version:"DICOM"},"(3006,0009)":{tag:"(3006,0009)",vr:"TM",name:"StructureSetTime",vm:"1",version:"DICOM"},"(3006,0010)":{tag:"(3006,0010)",vr:"SQ",name:"ReferencedFrameOfReferenceSequence",vm:"1",version:"DICOM"},"(3006,0012)":{tag:"(3006,0012)",vr:"SQ",name:"RTReferencedStudySequence",vm:"1",version:"DICOM"},"(3006,0014)":{tag:"(3006,0014)",vr:"SQ",name:"RTReferencedSeriesSequence",vm:"1",version:"DICOM"},"(3006,0016)":{tag:"(3006,0016)",vr:"SQ",name:"ContourImageSequence",vm:"1",version:"DICOM"},"(3006,0018)":{tag:"(3006,0018)",vr:"SQ",name:"PredecessorStructureSetSequence",vm:"1",version:"DICOM"},"(3006,0020)":{tag:"(3006,0020)",vr:"SQ",name:"StructureSetROISequence",vm:"1",version:"DICOM"},"(3006,0022)":{tag:"(3006,0022)",vr:"IS",name:"ROINumber",vm:"1",version:"DICOM"},"(3006,0024)":{tag:"(3006,0024)",vr:"UI",name:"ReferencedFrameOfReferenceUID",vm:"1",version:"DICOM"},"(3006,0026)":{tag:"(3006,0026)",vr:"LO",name:"ROIName",vm:"1",version:"DICOM"},"(3006,0028)":{tag:"(3006,0028)",vr:"ST",name:"ROIDescription",vm:"1",version:"DICOM"},"(3006,002A)":{tag:"(3006,002A)",vr:"IS",name:"ROIDisplayColor",vm:"3",version:"DICOM"},"(3006,002C)":{tag:"(3006,002C)",vr:"DS",name:"ROIVolume",vm:"1",version:"DICOM"},"(3006,0030)":{tag:"(3006,0030)",vr:"SQ",name:"RTRelatedROISequence",vm:"1",version:"DICOM"},"(3006,0033)":{tag:"(3006,0033)",vr:"CS",name:"RTROIRelationship",vm:"1",version:"DICOM"},"(3006,0036)":{tag:"(3006,0036)",vr:"CS",name:"ROIGenerationAlgorithm",vm:"1",version:"DICOM"},"(3006,0037)":{tag:"(3006,0037)",vr:"SQ",name:"ROIDerivationAlgorithmIdentificationSequence",vm:"1",version:"DICOM"},"(3006,0038)":{tag:"(3006,0038)",vr:"LO",name:"ROIGenerationDescription",vm:"1",version:"DICOM"},"(3006,0039)":{tag:"(3006,0039)",vr:"SQ",name:"ROIContourSequence",vm:"1",version:"DICOM"},"(3006,0040)":{tag:"(3006,0040)",vr:"SQ",name:"ContourSequence",vm:"1",version:"DICOM"},"(3006,0042)":{tag:"(3006,0042)",vr:"CS",name:"ContourGeometricType",vm:"1",version:"DICOM"},"(3006,0044)":{tag:"(3006,0044)",vr:"DS",name:"ContourSlabThickness",vm:"1",version:"DICOM"},"(3006,0045)":{tag:"(3006,0045)",vr:"DS",name:"ContourOffsetVector",vm:"3",version:"DICOM"},"(3006,0046)":{tag:"(3006,0046)",vr:"IS",name:"NumberOfContourPoints",vm:"1",version:"DICOM"},"(3006,0048)":{tag:"(3006,0048)",vr:"IS",name:"ContourNumber",vm:"1",version:"DICOM"},"(3006,0049)":{tag:"(3006,0049)",vr:"IS",name:"AttachedContours",vm:"1-n",version:"DICOM"},"(3006,004A)":{tag:"(3006,004A)",vr:"SQ",name:"SourcePixelPlanesCharacteristicsSequence",vm:"1",version:"DICOM"},"(3006,0050)":{tag:"(3006,0050)",vr:"DS",name:"ContourData",vm:"3-3n",version:"DICOM"},"(3006,0080)":{tag:"(3006,0080)",vr:"SQ",name:"RTROIObservationsSequence",vm:"1",version:"DICOM"},"(3006,0082)":{tag:"(3006,0082)",vr:"IS",name:"ObservationNumber",vm:"1",version:"DICOM"},"(3006,0084)":{tag:"(3006,0084)",vr:"IS",name:"ReferencedROINumber",vm:"1",version:"DICOM"},"(3006,0085)":{tag:"(3006,0085)",vr:"SH",name:"ROIObservationLabel",vm:"1",version:"DICOM"},"(3006,0086)":{tag:"(3006,0086)",vr:"SQ",name:"RTROIIdentificationCodeSequence",vm:"1",version:"DICOM"},"(3006,0088)":{tag:"(3006,0088)",vr:"ST",name:"ROIObservationDescription",vm:"1",version:"DICOM"},"(3006,00A0)":{tag:"(3006,00A0)",vr:"SQ",name:"RelatedRTROIObservationsSequence",vm:"1",version:"DICOM"},"(3006,00A4)":{tag:"(3006,00A4)",vr:"CS",name:"RTROIInterpretedType",vm:"1",version:"DICOM"},"(3006,00A6)":{tag:"(3006,00A6)",vr:"PN",name:"ROIInterpreter",vm:"1",version:"DICOM"},"(3006,00B0)":{tag:"(3006,00B0)",vr:"SQ",name:"ROIPhysicalPropertiesSequence",vm:"1",version:"DICOM"},"(3006,00B2)":{tag:"(3006,00B2)",vr:"CS",name:"ROIPhysicalProperty",vm:"1",version:"DICOM"},"(3006,00B4)":{tag:"(3006,00B4)",vr:"DS",name:"ROIPhysicalPropertyValue",vm:"1",version:"DICOM"},"(3006,00B6)":{tag:"(3006,00B6)",vr:"SQ",name:"ROIElementalCompositionSequence",vm:"1",version:"DICOM"},"(3006,00B7)":{tag:"(3006,00B7)",vr:"US",name:"ROIElementalCompositionAtomicNumber",vm:"1",version:"DICOM"},"(3006,00B8)":{tag:"(3006,00B8)",vr:"FL",name:"ROIElementalCompositionAtomicMassFraction",vm:"1",version:"DICOM"},"(3006,00B9)":{tag:"(3006,00B9)",vr:"SQ",name:"AdditionalRTROIIdentificationCodeSequence",vm:"1",version:"DICOM"},"(3006,00C6)":{tag:"(3006,00C6)",vr:"DS",name:"FrameOfReferenceTransformationMatrix",vm:"16",version:"DICOM"},"(3006,00C8)":{tag:"(3006,00C8)",vr:"LO",name:"FrameOfReferenceTransformationComment",vm:"1",version:"DICOM"},"(3006,00C9)":{tag:"(3006,00C9)",vr:"SQ",name:"PatientLocationCoordinatesSequence",vm:"1",version:"DICOM"},"(3006,00CA)":{tag:"(3006,00CA)",vr:"SQ",name:"PatientLocationCoordinatesCodeSequence",vm:"1",version:"DICOM"},"(3006,00CB)":{tag:"(3006,00CB)",vr:"SQ",name:"PatientSupportPositionSequence",vm:"1",version:"DICOM"},"(3008,0010)":{tag:"(3008,0010)",vr:"SQ",name:"MeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0012)":{tag:"(3008,0012)",vr:"ST",name:"MeasuredDoseDescription",vm:"1",version:"DICOM"},"(3008,0014)":{tag:"(3008,0014)",vr:"CS",name:"MeasuredDoseType",vm:"1",version:"DICOM"},"(3008,0016)":{tag:"(3008,0016)",vr:"DS",name:"MeasuredDoseValue",vm:"1",version:"DICOM"},"(3008,0020)":{tag:"(3008,0020)",vr:"SQ",name:"TreatmentSessionBeamSequence",vm:"1",version:"DICOM"},"(3008,0021)":{tag:"(3008,0021)",vr:"SQ",name:"TreatmentSessionIonBeamSequence",vm:"1",version:"DICOM"},"(3008,0022)":{tag:"(3008,0022)",vr:"IS",name:"CurrentFractionNumber",vm:"1",version:"DICOM"},"(3008,0024)":{tag:"(3008,0024)",vr:"DA",name:"TreatmentControlPointDate",vm:"1",version:"DICOM"},"(3008,0025)":{tag:"(3008,0025)",vr:"TM",name:"TreatmentControlPointTime",vm:"1",version:"DICOM"},"(3008,002A)":{tag:"(3008,002A)",vr:"CS",name:"TreatmentTerminationStatus",vm:"1",version:"DICOM"},"(3008,002B)":{tag:"(3008,002B)",vr:"SH",name:"TreatmentTerminationCode",vm:"1",version:"DICOM"},"(3008,002C)":{tag:"(3008,002C)",vr:"CS",name:"TreatmentVerificationStatus",vm:"1",version:"DICOM"},"(3008,0030)":{tag:"(3008,0030)",vr:"SQ",name:"ReferencedTreatmentRecordSequence",vm:"1",version:"DICOM"},"(3008,0032)":{tag:"(3008,0032)",vr:"DS",name:"SpecifiedPrimaryMeterset",vm:"1",version:"DICOM"},"(3008,0033)":{tag:"(3008,0033)",vr:"DS",name:"SpecifiedSecondaryMeterset",vm:"1",version:"DICOM"},"(3008,0036)":{tag:"(3008,0036)",vr:"DS",name:"DeliveredPrimaryMeterset",vm:"1",version:"DICOM"},"(3008,0037)":{tag:"(3008,0037)",vr:"DS",name:"DeliveredSecondaryMeterset",vm:"1",version:"DICOM"},"(3008,003A)":{tag:"(3008,003A)",vr:"DS",name:"SpecifiedTreatmentTime",vm:"1",version:"DICOM"},"(3008,003B)":{tag:"(3008,003B)",vr:"DS",name:"DeliveredTreatmentTime",vm:"1",version:"DICOM"},"(3008,0040)":{tag:"(3008,0040)",vr:"SQ",name:"ControlPointDeliverySequence",vm:"1",version:"DICOM"},"(3008,0041)":{tag:"(3008,0041)",vr:"SQ",name:"IonControlPointDeliverySequence",vm:"1",version:"DICOM"},"(3008,0042)":{tag:"(3008,0042)",vr:"DS",name:"SpecifiedMeterset",vm:"1",version:"DICOM"},"(3008,0044)":{tag:"(3008,0044)",vr:"DS",name:"DeliveredMeterset",vm:"1",version:"DICOM"},"(3008,0045)":{tag:"(3008,0045)",vr:"FL",name:"MetersetRateSet",vm:"1",version:"DICOM"},"(3008,0046)":{tag:"(3008,0046)",vr:"FL",name:"MetersetRateDelivered",vm:"1",version:"DICOM"},"(3008,0047)":{tag:"(3008,0047)",vr:"FL",name:"ScanSpotMetersetsDelivered",vm:"1-n",version:"DICOM"},"(3008,0048)":{tag:"(3008,0048)",vr:"DS",name:"DoseRateDelivered",vm:"1",version:"DICOM"},"(3008,0050)":{tag:"(3008,0050)",vr:"SQ",name:"TreatmentSummaryCalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0052)":{tag:"(3008,0052)",vr:"DS",name:"CumulativeDoseToDoseReference",vm:"1",version:"DICOM"},"(3008,0054)":{tag:"(3008,0054)",vr:"DA",name:"FirstTreatmentDate",vm:"1",version:"DICOM"},"(3008,0056)":{tag:"(3008,0056)",vr:"DA",name:"MostRecentTreatmentDate",vm:"1",version:"DICOM"},"(3008,005A)":{tag:"(3008,005A)",vr:"IS",name:"NumberOfFractionsDelivered",vm:"1",version:"DICOM"},"(3008,0060)":{tag:"(3008,0060)",vr:"SQ",name:"OverrideSequence",vm:"1",version:"DICOM"},"(3008,0061)":{tag:"(3008,0061)",vr:"AT",name:"ParameterSequencePointer",vm:"1",version:"DICOM"},"(3008,0062)":{tag:"(3008,0062)",vr:"AT",name:"OverrideParameterPointer",vm:"1",version:"DICOM"},"(3008,0063)":{tag:"(3008,0063)",vr:"IS",name:"ParameterItemIndex",vm:"1",version:"DICOM"},"(3008,0064)":{tag:"(3008,0064)",vr:"IS",name:"MeasuredDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0065)":{tag:"(3008,0065)",vr:"AT",name:"ParameterPointer",vm:"1",version:"DICOM"},"(3008,0066)":{tag:"(3008,0066)",vr:"ST",name:"OverrideReason",vm:"1",version:"DICOM"},"(3008,0067)":{tag:"(3008,0067)",vr:"US",name:"ParameterValueNumber",vm:"1",version:"DICOM"},"(3008,0068)":{tag:"(3008,0068)",vr:"SQ",name:"CorrectedParameterSequence",vm:"1",version:"DICOM"},"(3008,006A)":{tag:"(3008,006A)",vr:"FL",name:"CorrectionValue",vm:"1",version:"DICOM"},"(3008,0070)":{tag:"(3008,0070)",vr:"SQ",name:"CalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0072)":{tag:"(3008,0072)",vr:"IS",name:"CalculatedDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0074)":{tag:"(3008,0074)",vr:"ST",name:"CalculatedDoseReferenceDescription",vm:"1",version:"DICOM"},"(3008,0076)":{tag:"(3008,0076)",vr:"DS",name:"CalculatedDoseReferenceDoseValue",vm:"1",version:"DICOM"},"(3008,0078)":{tag:"(3008,0078)",vr:"DS",name:"StartMeterset",vm:"1",version:"DICOM"},"(3008,007A)":{tag:"(3008,007A)",vr:"DS",name:"EndMeterset",vm:"1",version:"DICOM"},"(3008,0080)":{tag:"(3008,0080)",vr:"SQ",name:"ReferencedMeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0082)":{tag:"(3008,0082)",vr:"IS",name:"ReferencedMeasuredDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,0090)":{tag:"(3008,0090)",vr:"SQ",name:"ReferencedCalculatedDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,0092)":{tag:"(3008,0092)",vr:"IS",name:"ReferencedCalculatedDoseReferenceNumber",vm:"1",version:"DICOM"},"(3008,00A0)":{tag:"(3008,00A0)",vr:"SQ",name:"BeamLimitingDeviceLeafPairsSequence",vm:"1",version:"DICOM"},"(3008,00B0)":{tag:"(3008,00B0)",vr:"SQ",name:"RecordedWedgeSequence",vm:"1",version:"DICOM"},"(3008,00C0)":{tag:"(3008,00C0)",vr:"SQ",name:"RecordedCompensatorSequence",vm:"1",version:"DICOM"},"(3008,00D0)":{tag:"(3008,00D0)",vr:"SQ",name:"RecordedBlockSequence",vm:"1",version:"DICOM"},"(3008,00E0)":{tag:"(3008,00E0)",vr:"SQ",name:"TreatmentSummaryMeasuredDoseReferenceSequence",vm:"1",version:"DICOM"},"(3008,00F0)":{tag:"(3008,00F0)",vr:"SQ",name:"RecordedSnoutSequence",vm:"1",version:"DICOM"},"(3008,00F2)":{tag:"(3008,00F2)",vr:"SQ",name:"RecordedRangeShifterSequence",vm:"1",version:"DICOM"},"(3008,00F4)":{tag:"(3008,00F4)",vr:"SQ",name:"RecordedLateralSpreadingDeviceSequence",vm:"1",version:"DICOM"},"(3008,00F6)":{tag:"(3008,00F6)",vr:"SQ",name:"RecordedRangeModulatorSequence",vm:"1",version:"DICOM"},"(3008,0100)":{tag:"(3008,0100)",vr:"SQ",name:"RecordedSourceSequence",vm:"1",version:"DICOM"},"(3008,0105)":{tag:"(3008,0105)",vr:"LO",name:"SourceSerialNumber",vm:"1",version:"DICOM"},"(3008,0110)":{tag:"(3008,0110)",vr:"SQ",name:"TreatmentSessionApplicationSetupSequence",vm:"1",version:"DICOM"},"(3008,0116)":{tag:"(3008,0116)",vr:"CS",name:"ApplicationSetupCheck",vm:"1",version:"DICOM"},"(3008,0120)":{tag:"(3008,0120)",vr:"SQ",name:"RecordedBrachyAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(3008,0122)":{tag:"(3008,0122)",vr:"IS",name:"ReferencedBrachyAccessoryDeviceNumber",vm:"1",version:"DICOM"},"(3008,0130)":{tag:"(3008,0130)",vr:"SQ",name:"RecordedChannelSequence",vm:"1",version:"DICOM"},"(3008,0132)":{tag:"(3008,0132)",vr:"DS",name:"SpecifiedChannelTotalTime",vm:"1",version:"DICOM"},"(3008,0134)":{tag:"(3008,0134)",vr:"DS",name:"DeliveredChannelTotalTime",vm:"1",version:"DICOM"},"(3008,0136)":{tag:"(3008,0136)",vr:"IS",name:"SpecifiedNumberOfPulses",vm:"1",version:"DICOM"},"(3008,0138)":{tag:"(3008,0138)",vr:"IS",name:"DeliveredNumberOfPulses",vm:"1",version:"DICOM"},"(3008,013A)":{tag:"(3008,013A)",vr:"DS",name:"SpecifiedPulseRepetitionInterval",vm:"1",version:"DICOM"},"(3008,013C)":{tag:"(3008,013C)",vr:"DS",name:"DeliveredPulseRepetitionInterval",vm:"1",version:"DICOM"},"(3008,0140)":{tag:"(3008,0140)",vr:"SQ",name:"RecordedSourceApplicatorSequence",vm:"1",version:"DICOM"},"(3008,0142)":{tag:"(3008,0142)",vr:"IS",name:"ReferencedSourceApplicatorNumber",vm:"1",version:"DICOM"},"(3008,0150)":{tag:"(3008,0150)",vr:"SQ",name:"RecordedChannelShieldSequence",vm:"1",version:"DICOM"},"(3008,0152)":{tag:"(3008,0152)",vr:"IS",name:"ReferencedChannelShieldNumber",vm:"1",version:"DICOM"},"(3008,0160)":{tag:"(3008,0160)",vr:"SQ",name:"BrachyControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0162)":{tag:"(3008,0162)",vr:"DA",name:"SafePositionExitDate",vm:"1",version:"DICOM"},"(3008,0164)":{tag:"(3008,0164)",vr:"TM",name:"SafePositionExitTime",vm:"1",version:"DICOM"},"(3008,0166)":{tag:"(3008,0166)",vr:"DA",name:"SafePositionReturnDate",vm:"1",version:"DICOM"},"(3008,0168)":{tag:"(3008,0168)",vr:"TM",name:"SafePositionReturnTime",vm:"1",version:"DICOM"},"(3008,0171)":{tag:"(3008,0171)",vr:"SQ",name:"PulseSpecificBrachyControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0172)":{tag:"(3008,0172)",vr:"US",name:"PulseNumber",vm:"1",version:"DICOM"},"(3008,0173)":{tag:"(3008,0173)",vr:"SQ",name:"BrachyPulseControlPointDeliveredSequence",vm:"1",version:"DICOM"},"(3008,0200)":{tag:"(3008,0200)",vr:"CS",name:"CurrentTreatmentStatus",vm:"1",version:"DICOM"},"(3008,0202)":{tag:"(3008,0202)",vr:"ST",name:"TreatmentStatusComment",vm:"1",version:"DICOM"},"(3008,0220)":{tag:"(3008,0220)",vr:"SQ",name:"FractionGroupSummarySequence",vm:"1",version:"DICOM"},"(3008,0223)":{tag:"(3008,0223)",vr:"IS",name:"ReferencedFractionNumber",vm:"1",version:"DICOM"},"(3008,0224)":{tag:"(3008,0224)",vr:"CS",name:"FractionGroupType",vm:"1",version:"DICOM"},"(3008,0230)":{tag:"(3008,0230)",vr:"CS",name:"BeamStopperPosition",vm:"1",version:"DICOM"},"(3008,0240)":{tag:"(3008,0240)",vr:"SQ",name:"FractionStatusSummarySequence",vm:"1",version:"DICOM"},"(3008,0250)":{tag:"(3008,0250)",vr:"DA",name:"TreatmentDate",vm:"1",version:"DICOM"},"(3008,0251)":{tag:"(3008,0251)",vr:"TM",name:"TreatmentTime",vm:"1",version:"DICOM"},"(300A,0002)":{tag:"(300A,0002)",vr:"SH",name:"RTPlanLabel",vm:"1",version:"DICOM"},"(300A,0003)":{tag:"(300A,0003)",vr:"LO",name:"RTPlanName",vm:"1",version:"DICOM"},"(300A,0004)":{tag:"(300A,0004)",vr:"ST",name:"RTPlanDescription",vm:"1",version:"DICOM"},"(300A,0006)":{tag:"(300A,0006)",vr:"DA",name:"RTPlanDate",vm:"1",version:"DICOM"},"(300A,0007)":{tag:"(300A,0007)",vr:"TM",name:"RTPlanTime",vm:"1",version:"DICOM"},"(300A,0009)":{tag:"(300A,0009)",vr:"LO",name:"TreatmentProtocols",vm:"1-n",version:"DICOM"},"(300A,000A)":{tag:"(300A,000A)",vr:"CS",name:"PlanIntent",vm:"1",version:"DICOM"},"(300A,000B)":{tag:"(300A,000B)",vr:"LO",name:"TreatmentSites",vm:"1-n",version:"DICOM"},"(300A,000C)":{tag:"(300A,000C)",vr:"CS",name:"RTPlanGeometry",vm:"1",version:"DICOM"},"(300A,000E)":{tag:"(300A,000E)",vr:"ST",name:"PrescriptionDescription",vm:"1",version:"DICOM"},"(300A,0010)":{tag:"(300A,0010)",vr:"SQ",name:"DoseReferenceSequence",vm:"1",version:"DICOM"},"(300A,0012)":{tag:"(300A,0012)",vr:"IS",name:"DoseReferenceNumber",vm:"1",version:"DICOM"},"(300A,0013)":{tag:"(300A,0013)",vr:"UI",name:"DoseReferenceUID",vm:"1",version:"DICOM"},"(300A,0014)":{tag:"(300A,0014)",vr:"CS",name:"DoseReferenceStructureType",vm:"1",version:"DICOM"},"(300A,0015)":{tag:"(300A,0015)",vr:"CS",name:"NominalBeamEnergyUnit",vm:"1",version:"DICOM"},"(300A,0016)":{tag:"(300A,0016)",vr:"LO",name:"DoseReferenceDescription",vm:"1",version:"DICOM"},"(300A,0018)":{tag:"(300A,0018)",vr:"DS",name:"DoseReferencePointCoordinates",vm:"3",version:"DICOM"},"(300A,001A)":{tag:"(300A,001A)",vr:"DS",name:"NominalPriorDose",vm:"1",version:"DICOM"},"(300A,0020)":{tag:"(300A,0020)",vr:"CS",name:"DoseReferenceType",vm:"1",version:"DICOM"},"(300A,0021)":{tag:"(300A,0021)",vr:"DS",name:"ConstraintWeight",vm:"1",version:"DICOM"},"(300A,0022)":{tag:"(300A,0022)",vr:"DS",name:"DeliveryWarningDose",vm:"1",version:"DICOM"},"(300A,0023)":{tag:"(300A,0023)",vr:"DS",name:"DeliveryMaximumDose",vm:"1",version:"DICOM"},"(300A,0025)":{tag:"(300A,0025)",vr:"DS",name:"TargetMinimumDose",vm:"1",version:"DICOM"},"(300A,0026)":{tag:"(300A,0026)",vr:"DS",name:"TargetPrescriptionDose",vm:"1",version:"DICOM"},"(300A,0027)":{tag:"(300A,0027)",vr:"DS",name:"TargetMaximumDose",vm:"1",version:"DICOM"},"(300A,0028)":{tag:"(300A,0028)",vr:"DS",name:"TargetUnderdoseVolumeFraction",vm:"1",version:"DICOM"},"(300A,002A)":{tag:"(300A,002A)",vr:"DS",name:"OrganAtRiskFullVolumeDose",vm:"1",version:"DICOM"},"(300A,002B)":{tag:"(300A,002B)",vr:"DS",name:"OrganAtRiskLimitDose",vm:"1",version:"DICOM"},"(300A,002C)":{tag:"(300A,002C)",vr:"DS",name:"OrganAtRiskMaximumDose",vm:"1",version:"DICOM"},"(300A,002D)":{tag:"(300A,002D)",vr:"DS",name:"OrganAtRiskOverdoseVolumeFraction",vm:"1",version:"DICOM"},"(300A,0040)":{tag:"(300A,0040)",vr:"SQ",name:"ToleranceTableSequence",vm:"1",version:"DICOM"},"(300A,0042)":{tag:"(300A,0042)",vr:"IS",name:"ToleranceTableNumber",vm:"1",version:"DICOM"},"(300A,0043)":{tag:"(300A,0043)",vr:"SH",name:"ToleranceTableLabel",vm:"1",version:"DICOM"},"(300A,0044)":{tag:"(300A,0044)",vr:"DS",name:"GantryAngleTolerance",vm:"1",version:"DICOM"},"(300A,0046)":{tag:"(300A,0046)",vr:"DS",name:"BeamLimitingDeviceAngleTolerance",vm:"1",version:"DICOM"},"(300A,0048)":{tag:"(300A,0048)",vr:"SQ",name:"BeamLimitingDeviceToleranceSequence",vm:"1",version:"DICOM"},"(300A,004A)":{tag:"(300A,004A)",vr:"DS",name:"BeamLimitingDevicePositionTolerance",vm:"1",version:"DICOM"},"(300A,004B)":{tag:"(300A,004B)",vr:"FL",name:"SnoutPositionTolerance",vm:"1",version:"DICOM"},"(300A,004C)":{tag:"(300A,004C)",vr:"DS",name:"PatientSupportAngleTolerance",vm:"1",version:"DICOM"},"(300A,004E)":{tag:"(300A,004E)",vr:"DS",name:"TableTopEccentricAngleTolerance",vm:"1",version:"DICOM"},"(300A,004F)":{tag:"(300A,004F)",vr:"FL",name:"TableTopPitchAngleTolerance",vm:"1",version:"DICOM"},"(300A,0050)":{tag:"(300A,0050)",vr:"FL",name:"TableTopRollAngleTolerance",vm:"1",version:"DICOM"},"(300A,0051)":{tag:"(300A,0051)",vr:"DS",name:"TableTopVerticalPositionTolerance",vm:"1",version:"DICOM"},"(300A,0052)":{tag:"(300A,0052)",vr:"DS",name:"TableTopLongitudinalPositionTolerance",vm:"1",version:"DICOM"},"(300A,0053)":{tag:"(300A,0053)",vr:"DS",name:"TableTopLateralPositionTolerance",vm:"1",version:"DICOM"},"(300A,0055)":{tag:"(300A,0055)",vr:"CS",name:"RTPlanRelationship",vm:"1",version:"DICOM"},"(300A,0070)":{tag:"(300A,0070)",vr:"SQ",name:"FractionGroupSequence",vm:"1",version:"DICOM"},"(300A,0071)":{tag:"(300A,0071)",vr:"IS",name:"FractionGroupNumber",vm:"1",version:"DICOM"},"(300A,0072)":{tag:"(300A,0072)",vr:"LO",name:"FractionGroupDescription",vm:"1",version:"DICOM"},"(300A,0078)":{tag:"(300A,0078)",vr:"IS",name:"NumberOfFractionsPlanned",vm:"1",version:"DICOM"},"(300A,0079)":{tag:"(300A,0079)",vr:"IS",name:"NumberOfFractionPatternDigitsPerDay",vm:"1",version:"DICOM"},"(300A,007A)":{tag:"(300A,007A)",vr:"IS",name:"RepeatFractionCycleLength",vm:"1",version:"DICOM"},"(300A,007B)":{tag:"(300A,007B)",vr:"LT",name:"FractionPattern",vm:"1",version:"DICOM"},"(300A,0080)":{tag:"(300A,0080)",vr:"IS",name:"NumberOfBeams",vm:"1",version:"DICOM"},"(300A,0082)":{tag:"(300A,0082)",vr:"DS",name:"BeamDoseSpecificationPoint",vm:"3",version:"DICOM"},"(300A,0083)":{tag:"(300A,0083)",vr:"UI",name:"ReferencedDoseReferenceUID",vm:"1",version:"DICOM"},"(300A,0084)":{tag:"(300A,0084)",vr:"DS",name:"BeamDose",vm:"1",version:"DICOM"},"(300A,0086)":{tag:"(300A,0086)",vr:"DS",name:"BeamMeterset",vm:"1",version:"DICOM"},"(300A,008B)":{tag:"(300A,008B)",vr:"CS",name:"BeamDoseMeaning",vm:"1",version:"DICOM"},"(300A,008C)":{tag:"(300A,008C)",vr:"SQ",name:"BeamDoseVerificationControlPointSequence",vm:"1",version:"DICOM"},"(300A,008D)":{tag:"(300A,008D)",vr:"FL",name:"AverageBeamDosePointDepth",vm:"1",version:"DICOM"},"(300A,008E)":{tag:"(300A,008E)",vr:"FL",name:"AverageBeamDosePointEquivalentDepth",vm:"1",version:"DICOM"},"(300A,008F)":{tag:"(300A,008F)",vr:"FL",name:"AverageBeamDosePointSSD",vm:"1",version:"DICOM"},"(300A,0090)":{tag:"(300A,0090)",vr:"CS",name:"BeamDoseType",vm:"1",version:"DICOM"},"(300A,0091)":{tag:"(300A,0091)",vr:"DS",name:"AlternateBeamDose",vm:"1",version:"DICOM"},"(300A,0092)":{tag:"(300A,0092)",vr:"CS",name:"AlternateBeamDoseType",vm:"1",version:"DICOM"},"(300A,0093)":{tag:"(300A,0093)",vr:"CS",name:"DepthValueAveragingFlag",vm:"1",version:"DICOM"},"(300A,0094)":{tag:"(300A,0094)",vr:"DS",name:"BeamDosePointSourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,00A0)":{tag:"(300A,00A0)",vr:"IS",name:"NumberOfBrachyApplicationSetups",vm:"1",version:"DICOM"},"(300A,00A2)":{tag:"(300A,00A2)",vr:"DS",name:"BrachyApplicationSetupDoseSpecificationPoint",vm:"3",version:"DICOM"},"(300A,00A4)":{tag:"(300A,00A4)",vr:"DS",name:"BrachyApplicationSetupDose",vm:"1",version:"DICOM"},"(300A,00B0)":{tag:"(300A,00B0)",vr:"SQ",name:"BeamSequence",vm:"1",version:"DICOM"},"(300A,00B2)":{tag:"(300A,00B2)",vr:"SH",name:"TreatmentMachineName",vm:"1",version:"DICOM"},"(300A,00B3)":{tag:"(300A,00B3)",vr:"CS",name:"PrimaryDosimeterUnit",vm:"1",version:"DICOM"},"(300A,00B4)":{tag:"(300A,00B4)",vr:"DS",name:"SourceAxisDistance",vm:"1",version:"DICOM"},"(300A,00B6)":{tag:"(300A,00B6)",vr:"SQ",name:"BeamLimitingDeviceSequence",vm:"1",version:"DICOM"},"(300A,00B8)":{tag:"(300A,00B8)",vr:"CS",name:"RTBeamLimitingDeviceType",vm:"1",version:"DICOM"},"(300A,00BA)":{tag:"(300A,00BA)",vr:"DS",name:"SourceToBeamLimitingDeviceDistance",vm:"1",version:"DICOM"},"(300A,00BB)":{tag:"(300A,00BB)",vr:"FL",name:"IsocenterToBeamLimitingDeviceDistance",vm:"1",version:"DICOM"},"(300A,00BC)":{tag:"(300A,00BC)",vr:"IS",name:"NumberOfLeafJawPairs",vm:"1",version:"DICOM"},"(300A,00BE)":{tag:"(300A,00BE)",vr:"DS",name:"LeafPositionBoundaries",vm:"3-n",version:"DICOM"},"(300A,00C0)":{tag:"(300A,00C0)",vr:"IS",name:"BeamNumber",vm:"1",version:"DICOM"},"(300A,00C2)":{tag:"(300A,00C2)",vr:"LO",name:"BeamName",vm:"1",version:"DICOM"},"(300A,00C3)":{tag:"(300A,00C3)",vr:"ST",name:"BeamDescription",vm:"1",version:"DICOM"},"(300A,00C4)":{tag:"(300A,00C4)",vr:"CS",name:"BeamType",vm:"1",version:"DICOM"},"(300A,00C5)":{tag:"(300A,00C5)",vr:"FD",name:"BeamDeliveryDurationLimit",vm:"1",version:"DICOM"},"(300A,00C6)":{tag:"(300A,00C6)",vr:"CS",name:"RadiationType",vm:"1",version:"DICOM"},"(300A,00C7)":{tag:"(300A,00C7)",vr:"CS",name:"HighDoseTechniqueType",vm:"1",version:"DICOM"},"(300A,00C8)":{tag:"(300A,00C8)",vr:"IS",name:"ReferenceImageNumber",vm:"1",version:"DICOM"},"(300A,00CA)":{tag:"(300A,00CA)",vr:"SQ",name:"PlannedVerificationImageSequence",vm:"1",version:"DICOM"},"(300A,00CC)":{tag:"(300A,00CC)",vr:"LO",name:"ImagingDeviceSpecificAcquisitionParameters",vm:"1-n",version:"DICOM"},"(300A,00CE)":{tag:"(300A,00CE)",vr:"CS",name:"TreatmentDeliveryType",vm:"1",version:"DICOM"},"(300A,00D0)":{tag:"(300A,00D0)",vr:"IS",name:"NumberOfWedges",vm:"1",version:"DICOM"},"(300A,00D1)":{tag:"(300A,00D1)",vr:"SQ",name:"WedgeSequence",vm:"1",version:"DICOM"},"(300A,00D2)":{tag:"(300A,00D2)",vr:"IS",name:"WedgeNumber",vm:"1",version:"DICOM"},"(300A,00D3)":{tag:"(300A,00D3)",vr:"CS",name:"WedgeType",vm:"1",version:"DICOM"},"(300A,00D4)":{tag:"(300A,00D4)",vr:"SH",name:"WedgeID",vm:"1",version:"DICOM"},"(300A,00D5)":{tag:"(300A,00D5)",vr:"IS",name:"WedgeAngle",vm:"1",version:"DICOM"},"(300A,00D6)":{tag:"(300A,00D6)",vr:"DS",name:"WedgeFactor",vm:"1",version:"DICOM"},"(300A,00D7)":{tag:"(300A,00D7)",vr:"FL",name:"TotalWedgeTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,00D8)":{tag:"(300A,00D8)",vr:"DS",name:"WedgeOrientation",vm:"1",version:"DICOM"},"(300A,00D9)":{tag:"(300A,00D9)",vr:"FL",name:"IsocenterToWedgeTrayDistance",vm:"1",version:"DICOM"},"(300A,00DA)":{tag:"(300A,00DA)",vr:"DS",name:"SourceToWedgeTrayDistance",vm:"1",version:"DICOM"},"(300A,00DB)":{tag:"(300A,00DB)",vr:"FL",name:"WedgeThinEdgePosition",vm:"1",version:"DICOM"},"(300A,00DC)":{tag:"(300A,00DC)",vr:"SH",name:"BolusID",vm:"1",version:"DICOM"},"(300A,00DD)":{tag:"(300A,00DD)",vr:"ST",name:"BolusDescription",vm:"1",version:"DICOM"},"(300A,00DE)":{tag:"(300A,00DE)",vr:"DS",name:"EffectiveWedgeAngle",vm:"1",version:"DICOM"},"(300A,00E0)":{tag:"(300A,00E0)",vr:"IS",name:"NumberOfCompensators",vm:"1",version:"DICOM"},"(300A,00E1)":{tag:"(300A,00E1)",vr:"SH",name:"MaterialID",vm:"1",version:"DICOM"},"(300A,00E2)":{tag:"(300A,00E2)",vr:"DS",name:"TotalCompensatorTrayFactor",vm:"1",version:"DICOM"},"(300A,00E3)":{tag:"(300A,00E3)",vr:"SQ",name:"CompensatorSequence",vm:"1",version:"DICOM"},"(300A,00E4)":{tag:"(300A,00E4)",vr:"IS",name:"CompensatorNumber",vm:"1",version:"DICOM"},"(300A,00E5)":{tag:"(300A,00E5)",vr:"SH",name:"CompensatorID",vm:"1",version:"DICOM"},"(300A,00E6)":{tag:"(300A,00E6)",vr:"DS",name:"SourceToCompensatorTrayDistance",vm:"1",version:"DICOM"},"(300A,00E7)":{tag:"(300A,00E7)",vr:"IS",name:"CompensatorRows",vm:"1",version:"DICOM"},"(300A,00E8)":{tag:"(300A,00E8)",vr:"IS",name:"CompensatorColumns",vm:"1",version:"DICOM"},"(300A,00E9)":{tag:"(300A,00E9)",vr:"DS",name:"CompensatorPixelSpacing",vm:"2",version:"DICOM"},"(300A,00EA)":{tag:"(300A,00EA)",vr:"DS",name:"CompensatorPosition",vm:"2",version:"DICOM"},"(300A,00EB)":{tag:"(300A,00EB)",vr:"DS",name:"CompensatorTransmissionData",vm:"1-n",version:"DICOM"},"(300A,00EC)":{tag:"(300A,00EC)",vr:"DS",name:"CompensatorThicknessData",vm:"1-n",version:"DICOM"},"(300A,00ED)":{tag:"(300A,00ED)",vr:"IS",name:"NumberOfBoli",vm:"1",version:"DICOM"},"(300A,00EE)":{tag:"(300A,00EE)",vr:"CS",name:"CompensatorType",vm:"1",version:"DICOM"},"(300A,00EF)":{tag:"(300A,00EF)",vr:"SH",name:"CompensatorTrayID",vm:"1",version:"DICOM"},"(300A,00F0)":{tag:"(300A,00F0)",vr:"IS",name:"NumberOfBlocks",vm:"1",version:"DICOM"},"(300A,00F2)":{tag:"(300A,00F2)",vr:"DS",name:"TotalBlockTrayFactor",vm:"1",version:"DICOM"},"(300A,00F3)":{tag:"(300A,00F3)",vr:"FL",name:"TotalBlockTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,00F4)":{tag:"(300A,00F4)",vr:"SQ",name:"BlockSequence",vm:"1",version:"DICOM"},"(300A,00F5)":{tag:"(300A,00F5)",vr:"SH",name:"BlockTrayID",vm:"1",version:"DICOM"},"(300A,00F6)":{tag:"(300A,00F6)",vr:"DS",name:"SourceToBlockTrayDistance",vm:"1",version:"DICOM"},"(300A,00F7)":{tag:"(300A,00F7)",vr:"FL",name:"IsocenterToBlockTrayDistance",vm:"1",version:"DICOM"},"(300A,00F8)":{tag:"(300A,00F8)",vr:"CS",name:"BlockType",vm:"1",version:"DICOM"},"(300A,00F9)":{tag:"(300A,00F9)",vr:"LO",name:"AccessoryCode",vm:"1",version:"DICOM"},"(300A,00FA)":{tag:"(300A,00FA)",vr:"CS",name:"BlockDivergence",vm:"1",version:"DICOM"},"(300A,00FB)":{tag:"(300A,00FB)",vr:"CS",name:"BlockMountingPosition",vm:"1",version:"DICOM"},"(300A,00FC)":{tag:"(300A,00FC)",vr:"IS",name:"BlockNumber",vm:"1",version:"DICOM"},"(300A,00FE)":{tag:"(300A,00FE)",vr:"LO",name:"BlockName",vm:"1",version:"DICOM"},"(300A,0100)":{tag:"(300A,0100)",vr:"DS",name:"BlockThickness",vm:"1",version:"DICOM"},"(300A,0102)":{tag:"(300A,0102)",vr:"DS",name:"BlockTransmission",vm:"1",version:"DICOM"},"(300A,0104)":{tag:"(300A,0104)",vr:"IS",name:"BlockNumberOfPoints",vm:"1",version:"DICOM"},"(300A,0106)":{tag:"(300A,0106)",vr:"DS",name:"BlockData",vm:"2-2n",version:"DICOM"},"(300A,0107)":{tag:"(300A,0107)",vr:"SQ",name:"ApplicatorSequence",vm:"1",version:"DICOM"},"(300A,0108)":{tag:"(300A,0108)",vr:"SH",name:"ApplicatorID",vm:"1",version:"DICOM"},"(300A,0109)":{tag:"(300A,0109)",vr:"CS",name:"ApplicatorType",vm:"1",version:"DICOM"},"(300A,010A)":{tag:"(300A,010A)",vr:"LO",name:"ApplicatorDescription",vm:"1",version:"DICOM"},"(300A,010C)":{tag:"(300A,010C)",vr:"DS",name:"CumulativeDoseReferenceCoefficient",vm:"1",version:"DICOM"},"(300A,010E)":{tag:"(300A,010E)",vr:"DS",name:"FinalCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300A,0110)":{tag:"(300A,0110)",vr:"IS",name:"NumberOfControlPoints",vm:"1",version:"DICOM"},"(300A,0111)":{tag:"(300A,0111)",vr:"SQ",name:"ControlPointSequence",vm:"1",version:"DICOM"},"(300A,0112)":{tag:"(300A,0112)",vr:"IS",name:"ControlPointIndex",vm:"1",version:"DICOM"},"(300A,0114)":{tag:"(300A,0114)",vr:"DS",name:"NominalBeamEnergy",vm:"1",version:"DICOM"},"(300A,0115)":{tag:"(300A,0115)",vr:"DS",name:"DoseRateSet",vm:"1",version:"DICOM"},"(300A,0116)":{tag:"(300A,0116)",vr:"SQ",name:"WedgePositionSequence",vm:"1",version:"DICOM"},"(300A,0118)":{tag:"(300A,0118)",vr:"CS",name:"WedgePosition",vm:"1",version:"DICOM"},"(300A,011A)":{tag:"(300A,011A)",vr:"SQ",name:"BeamLimitingDevicePositionSequence",vm:"1",version:"DICOM"},"(300A,011C)":{tag:"(300A,011C)",vr:"DS",name:"LeafJawPositions",vm:"2-2n",version:"DICOM"},"(300A,011E)":{tag:"(300A,011E)",vr:"DS",name:"GantryAngle",vm:"1",version:"DICOM"},"(300A,011F)":{tag:"(300A,011F)",vr:"CS",name:"GantryRotationDirection",vm:"1",version:"DICOM"},"(300A,0120)":{tag:"(300A,0120)",vr:"DS",name:"BeamLimitingDeviceAngle",vm:"1",version:"DICOM"},"(300A,0121)":{tag:"(300A,0121)",vr:"CS",name:"BeamLimitingDeviceRotationDirection",vm:"1",version:"DICOM"},"(300A,0122)":{tag:"(300A,0122)",vr:"DS",name:"PatientSupportAngle",vm:"1",version:"DICOM"},"(300A,0123)":{tag:"(300A,0123)",vr:"CS",name:"PatientSupportRotationDirection",vm:"1",version:"DICOM"},"(300A,0124)":{tag:"(300A,0124)",vr:"DS",name:"TableTopEccentricAxisDistance",vm:"1",version:"DICOM"},"(300A,0125)":{tag:"(300A,0125)",vr:"DS",name:"TableTopEccentricAngle",vm:"1",version:"DICOM"},"(300A,0126)":{tag:"(300A,0126)",vr:"CS",name:"TableTopEccentricRotationDirection",vm:"1",version:"DICOM"},"(300A,0128)":{tag:"(300A,0128)",vr:"DS",name:"TableTopVerticalPosition",vm:"1",version:"DICOM"},"(300A,0129)":{tag:"(300A,0129)",vr:"DS",name:"TableTopLongitudinalPosition",vm:"1",version:"DICOM"},"(300A,012A)":{tag:"(300A,012A)",vr:"DS",name:"TableTopLateralPosition",vm:"1",version:"DICOM"},"(300A,012C)":{tag:"(300A,012C)",vr:"DS",name:"IsocenterPosition",vm:"3",version:"DICOM"},"(300A,012E)":{tag:"(300A,012E)",vr:"DS",name:"SurfaceEntryPoint",vm:"3",version:"DICOM"},"(300A,0130)":{tag:"(300A,0130)",vr:"DS",name:"SourceToSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0131)":{tag:"(300A,0131)",vr:"FL",name:"AverageBeamDosePointSourceToExternalContourSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0132)":{tag:"(300A,0132)",vr:"FL",name:"SourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,0133)":{tag:"(300A,0133)",vr:"FL",name:"ExternalContourEntryPoint",vm:"3",version:"DICOM"},"(300A,0134)":{tag:"(300A,0134)",vr:"DS",name:"CumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300A,0140)":{tag:"(300A,0140)",vr:"FL",name:"TableTopPitchAngle",vm:"1",version:"DICOM"},"(300A,0142)":{tag:"(300A,0142)",vr:"CS",name:"TableTopPitchRotationDirection",vm:"1",version:"DICOM"},"(300A,0144)":{tag:"(300A,0144)",vr:"FL",name:"TableTopRollAngle",vm:"1",version:"DICOM"},"(300A,0146)":{tag:"(300A,0146)",vr:"CS",name:"TableTopRollRotationDirection",vm:"1",version:"DICOM"},"(300A,0148)":{tag:"(300A,0148)",vr:"FL",name:"HeadFixationAngle",vm:"1",version:"DICOM"},"(300A,014A)":{tag:"(300A,014A)",vr:"FL",name:"GantryPitchAngle",vm:"1",version:"DICOM"},"(300A,014C)":{tag:"(300A,014C)",vr:"CS",name:"GantryPitchRotationDirection",vm:"1",version:"DICOM"},"(300A,014E)":{tag:"(300A,014E)",vr:"FL",name:"GantryPitchAngleTolerance",vm:"1",version:"DICOM"},"(300A,0150)":{tag:"(300A,0150)",vr:"CS",name:"FixationEye",vm:"1",version:"DICOM"},"(300A,0151)":{tag:"(300A,0151)",vr:"DS",name:"ChairHeadFramePosition",vm:"1",version:"DICOM"},"(300A,0152)":{tag:"(300A,0152)",vr:"DS",name:"HeadFixationAngleTolerance",vm:"1",version:"DICOM"},"(300A,0153)":{tag:"(300A,0153)",vr:"DS",name:"ChairHeadFramePositionTolerance",vm:"1",version:"DICOM"},"(300A,0154)":{tag:"(300A,0154)",vr:"DS",name:"FixationLightAzimuthalAngleTolerance",vm:"1",version:"DICOM"},"(300A,0155)":{tag:"(300A,0155)",vr:"DS",name:"FixationLightPolarAngleTolerance",vm:"1",version:"DICOM"},"(300A,0180)":{tag:"(300A,0180)",vr:"SQ",name:"PatientSetupSequence",vm:"1",version:"DICOM"},"(300A,0182)":{tag:"(300A,0182)",vr:"IS",name:"PatientSetupNumber",vm:"1",version:"DICOM"},"(300A,0183)":{tag:"(300A,0183)",vr:"LO",name:"PatientSetupLabel",vm:"1",version:"DICOM"},"(300A,0184)":{tag:"(300A,0184)",vr:"LO",name:"PatientAdditionalPosition",vm:"1",version:"DICOM"},"(300A,0190)":{tag:"(300A,0190)",vr:"SQ",name:"FixationDeviceSequence",vm:"1",version:"DICOM"},"(300A,0192)":{tag:"(300A,0192)",vr:"CS",name:"FixationDeviceType",vm:"1",version:"DICOM"},"(300A,0194)":{tag:"(300A,0194)",vr:"SH",name:"FixationDeviceLabel",vm:"1",version:"DICOM"},"(300A,0196)":{tag:"(300A,0196)",vr:"ST",name:"FixationDeviceDescription",vm:"1",version:"DICOM"},"(300A,0198)":{tag:"(300A,0198)",vr:"SH",name:"FixationDevicePosition",vm:"1",version:"DICOM"},"(300A,0199)":{tag:"(300A,0199)",vr:"FL",name:"FixationDevicePitchAngle",vm:"1",version:"DICOM"},"(300A,019A)":{tag:"(300A,019A)",vr:"FL",name:"FixationDeviceRollAngle",vm:"1",version:"DICOM"},"(300A,01A0)":{tag:"(300A,01A0)",vr:"SQ",name:"ShieldingDeviceSequence",vm:"1",version:"DICOM"},"(300A,01A2)":{tag:"(300A,01A2)",vr:"CS",name:"ShieldingDeviceType",vm:"1",version:"DICOM"},"(300A,01A4)":{tag:"(300A,01A4)",vr:"SH",name:"ShieldingDeviceLabel",vm:"1",version:"DICOM"},"(300A,01A6)":{tag:"(300A,01A6)",vr:"ST",name:"ShieldingDeviceDescription",vm:"1",version:"DICOM"},"(300A,01A8)":{tag:"(300A,01A8)",vr:"SH",name:"ShieldingDevicePosition",vm:"1",version:"DICOM"},"(300A,01B0)":{tag:"(300A,01B0)",vr:"CS",name:"SetupTechnique",vm:"1",version:"DICOM"},"(300A,01B2)":{tag:"(300A,01B2)",vr:"ST",name:"SetupTechniqueDescription",vm:"1",version:"DICOM"},"(300A,01B4)":{tag:"(300A,01B4)",vr:"SQ",name:"SetupDeviceSequence",vm:"1",version:"DICOM"},"(300A,01B6)":{tag:"(300A,01B6)",vr:"CS",name:"SetupDeviceType",vm:"1",version:"DICOM"},"(300A,01B8)":{tag:"(300A,01B8)",vr:"SH",name:"SetupDeviceLabel",vm:"1",version:"DICOM"},"(300A,01BA)":{tag:"(300A,01BA)",vr:"ST",name:"SetupDeviceDescription",vm:"1",version:"DICOM"},"(300A,01BC)":{tag:"(300A,01BC)",vr:"DS",name:"SetupDeviceParameter",vm:"1",version:"DICOM"},"(300A,01D0)":{tag:"(300A,01D0)",vr:"ST",name:"SetupReferenceDescription",vm:"1",version:"DICOM"},"(300A,01D2)":{tag:"(300A,01D2)",vr:"DS",name:"TableTopVerticalSetupDisplacement",vm:"1",version:"DICOM"},"(300A,01D4)":{tag:"(300A,01D4)",vr:"DS",name:"TableTopLongitudinalSetupDisplacement",vm:"1",version:"DICOM"},"(300A,01D6)":{tag:"(300A,01D6)",vr:"DS",name:"TableTopLateralSetupDisplacement",vm:"1",version:"DICOM"},"(300A,0200)":{tag:"(300A,0200)",vr:"CS",name:"BrachyTreatmentTechnique",vm:"1",version:"DICOM"},"(300A,0202)":{tag:"(300A,0202)",vr:"CS",name:"BrachyTreatmentType",vm:"1",version:"DICOM"},"(300A,0206)":{tag:"(300A,0206)",vr:"SQ",name:"TreatmentMachineSequence",vm:"1",version:"DICOM"},"(300A,0210)":{tag:"(300A,0210)",vr:"SQ",name:"SourceSequence",vm:"1",version:"DICOM"},"(300A,0212)":{tag:"(300A,0212)",vr:"IS",name:"SourceNumber",vm:"1",version:"DICOM"},"(300A,0214)":{tag:"(300A,0214)",vr:"CS",name:"SourceType",vm:"1",version:"DICOM"},"(300A,0216)":{tag:"(300A,0216)",vr:"LO",name:"SourceManufacturer",vm:"1",version:"DICOM"},"(300A,0218)":{tag:"(300A,0218)",vr:"DS",name:"ActiveSourceDiameter",vm:"1",version:"DICOM"},"(300A,021A)":{tag:"(300A,021A)",vr:"DS",name:"ActiveSourceLength",vm:"1",version:"DICOM"},"(300A,021B)":{tag:"(300A,021B)",vr:"SH",name:"SourceModelID",vm:"1",version:"DICOM"},"(300A,021C)":{tag:"(300A,021C)",vr:"LO",name:"SourceDescription",vm:"1",version:"DICOM"},"(300A,0222)":{tag:"(300A,0222)",vr:"DS",name:"SourceEncapsulationNominalThickness",vm:"1",version:"DICOM"},"(300A,0224)":{tag:"(300A,0224)",vr:"DS",name:"SourceEncapsulationNominalTransmission",vm:"1",version:"DICOM"},"(300A,0226)":{tag:"(300A,0226)",vr:"LO",name:"SourceIsotopeName",vm:"1",version:"DICOM"},"(300A,0228)":{tag:"(300A,0228)",vr:"DS",name:"SourceIsotopeHalfLife",vm:"1",version:"DICOM"},"(300A,0229)":{tag:"(300A,0229)",vr:"CS",name:"SourceStrengthUnits",vm:"1",version:"DICOM"},"(300A,022A)":{tag:"(300A,022A)",vr:"DS",name:"ReferenceAirKermaRate",vm:"1",version:"DICOM"},"(300A,022B)":{tag:"(300A,022B)",vr:"DS",name:"SourceStrength",vm:"1",version:"DICOM"},"(300A,022C)":{tag:"(300A,022C)",vr:"DA",name:"SourceStrengthReferenceDate",vm:"1",version:"DICOM"},"(300A,022E)":{tag:"(300A,022E)",vr:"TM",name:"SourceStrengthReferenceTime",vm:"1",version:"DICOM"},"(300A,0230)":{tag:"(300A,0230)",vr:"SQ",name:"ApplicationSetupSequence",vm:"1",version:"DICOM"},"(300A,0232)":{tag:"(300A,0232)",vr:"CS",name:"ApplicationSetupType",vm:"1",version:"DICOM"},"(300A,0234)":{tag:"(300A,0234)",vr:"IS",name:"ApplicationSetupNumber",vm:"1",version:"DICOM"},"(300A,0236)":{tag:"(300A,0236)",vr:"LO",name:"ApplicationSetupName",vm:"1",version:"DICOM"},"(300A,0238)":{tag:"(300A,0238)",vr:"LO",name:"ApplicationSetupManufacturer",vm:"1",version:"DICOM"},"(300A,0240)":{tag:"(300A,0240)",vr:"IS",name:"TemplateNumber",vm:"1",version:"DICOM"},"(300A,0242)":{tag:"(300A,0242)",vr:"SH",name:"TemplateType",vm:"1",version:"DICOM"},"(300A,0244)":{tag:"(300A,0244)",vr:"LO",name:"TemplateName",vm:"1",version:"DICOM"},"(300A,0250)":{tag:"(300A,0250)",vr:"DS",name:"TotalReferenceAirKerma",vm:"1",version:"DICOM"},"(300A,0260)":{tag:"(300A,0260)",vr:"SQ",name:"BrachyAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(300A,0262)":{tag:"(300A,0262)",vr:"IS",name:"BrachyAccessoryDeviceNumber",vm:"1",version:"DICOM"},"(300A,0263)":{tag:"(300A,0263)",vr:"SH",name:"BrachyAccessoryDeviceID",vm:"1",version:"DICOM"},"(300A,0264)":{tag:"(300A,0264)",vr:"CS",name:"BrachyAccessoryDeviceType",vm:"1",version:"DICOM"},"(300A,0266)":{tag:"(300A,0266)",vr:"LO",name:"BrachyAccessoryDeviceName",vm:"1",version:"DICOM"},"(300A,026A)":{tag:"(300A,026A)",vr:"DS",name:"BrachyAccessoryDeviceNominalThickness",vm:"1",version:"DICOM"},"(300A,026C)":{tag:"(300A,026C)",vr:"DS",name:"BrachyAccessoryDeviceNominalTransmission",vm:"1",version:"DICOM"},"(300A,0271)":{tag:"(300A,0271)",vr:"DS",name:"ChannelEffectiveLength",vm:"1",version:"DICOM"},"(300A,0272)":{tag:"(300A,0272)",vr:"DS",name:"ChannelInnerLength",vm:"1",version:"DICOM"},"(300A,0273)":{tag:"(300A,0273)",vr:"SH",name:"AfterloaderChannelID",vm:"1",version:"DICOM"},"(300A,0274)":{tag:"(300A,0274)",vr:"DS",name:"SourceApplicatorTipLength",vm:"1",version:"DICOM"},"(300A,0280)":{tag:"(300A,0280)",vr:"SQ",name:"ChannelSequence",vm:"1",version:"DICOM"},"(300A,0282)":{tag:"(300A,0282)",vr:"IS",name:"ChannelNumber",vm:"1",version:"DICOM"},"(300A,0284)":{tag:"(300A,0284)",vr:"DS",name:"ChannelLength",vm:"1",version:"DICOM"},"(300A,0286)":{tag:"(300A,0286)",vr:"DS",name:"ChannelTotalTime",vm:"1",version:"DICOM"},"(300A,0288)":{tag:"(300A,0288)",vr:"CS",name:"SourceMovementType",vm:"1",version:"DICOM"},"(300A,028A)":{tag:"(300A,028A)",vr:"IS",name:"NumberOfPulses",vm:"1",version:"DICOM"},"(300A,028C)":{tag:"(300A,028C)",vr:"DS",name:"PulseRepetitionInterval",vm:"1",version:"DICOM"},"(300A,0290)":{tag:"(300A,0290)",vr:"IS",name:"SourceApplicatorNumber",vm:"1",version:"DICOM"},"(300A,0291)":{tag:"(300A,0291)",vr:"SH",name:"SourceApplicatorID",vm:"1",version:"DICOM"},"(300A,0292)":{tag:"(300A,0292)",vr:"CS",name:"SourceApplicatorType",vm:"1",version:"DICOM"},"(300A,0294)":{tag:"(300A,0294)",vr:"LO",name:"SourceApplicatorName",vm:"1",version:"DICOM"},"(300A,0296)":{tag:"(300A,0296)",vr:"DS",name:"SourceApplicatorLength",vm:"1",version:"DICOM"},"(300A,0298)":{tag:"(300A,0298)",vr:"LO",name:"SourceApplicatorManufacturer",vm:"1",version:"DICOM"},"(300A,029C)":{tag:"(300A,029C)",vr:"DS",name:"SourceApplicatorWallNominalThickness",vm:"1",version:"DICOM"},"(300A,029E)":{tag:"(300A,029E)",vr:"DS",name:"SourceApplicatorWallNominalTransmission",vm:"1",version:"DICOM"},"(300A,02A0)":{tag:"(300A,02A0)",vr:"DS",name:"SourceApplicatorStepSize",vm:"1",version:"DICOM"},"(300A,02A2)":{tag:"(300A,02A2)",vr:"IS",name:"TransferTubeNumber",vm:"1",version:"DICOM"},"(300A,02A4)":{tag:"(300A,02A4)",vr:"DS",name:"TransferTubeLength",vm:"1",version:"DICOM"},"(300A,02B0)":{tag:"(300A,02B0)",vr:"SQ",name:"ChannelShieldSequence",vm:"1",version:"DICOM"},"(300A,02B2)":{tag:"(300A,02B2)",vr:"IS",name:"ChannelShieldNumber",vm:"1",version:"DICOM"},"(300A,02B3)":{tag:"(300A,02B3)",vr:"SH",name:"ChannelShieldID",vm:"1",version:"DICOM"},"(300A,02B4)":{tag:"(300A,02B4)",vr:"LO",name:"ChannelShieldName",vm:"1",version:"DICOM"},"(300A,02B8)":{tag:"(300A,02B8)",vr:"DS",name:"ChannelShieldNominalThickness",vm:"1",version:"DICOM"},"(300A,02BA)":{tag:"(300A,02BA)",vr:"DS",name:"ChannelShieldNominalTransmission",vm:"1",version:"DICOM"},"(300A,02C8)":{tag:"(300A,02C8)",vr:"DS",name:"FinalCumulativeTimeWeight",vm:"1",version:"DICOM"},"(300A,02D0)":{tag:"(300A,02D0)",vr:"SQ",name:"BrachyControlPointSequence",vm:"1",version:"DICOM"},"(300A,02D2)":{tag:"(300A,02D2)",vr:"DS",name:"ControlPointRelativePosition",vm:"1",version:"DICOM"},"(300A,02D4)":{tag:"(300A,02D4)",vr:"DS",name:"ControlPoint3DPosition",vm:"3",version:"DICOM"},"(300A,02D6)":{tag:"(300A,02D6)",vr:"DS",name:"CumulativeTimeWeight",vm:"1",version:"DICOM"},"(300A,02E0)":{tag:"(300A,02E0)",vr:"CS",name:"CompensatorDivergence",vm:"1",version:"DICOM"},"(300A,02E1)":{tag:"(300A,02E1)",vr:"CS",name:"CompensatorMountingPosition",vm:"1",version:"DICOM"},"(300A,02E2)":{tag:"(300A,02E2)",vr:"DS",name:"SourceToCompensatorDistance",vm:"1-n",version:"DICOM"},"(300A,02E3)":{tag:"(300A,02E3)",vr:"FL",name:"TotalCompensatorTrayWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,02E4)":{tag:"(300A,02E4)",vr:"FL",name:"IsocenterToCompensatorTrayDistance",vm:"1",version:"DICOM"},"(300A,02E5)":{tag:"(300A,02E5)",vr:"FL",name:"CompensatorColumnOffset",vm:"1",version:"DICOM"},"(300A,02E6)":{tag:"(300A,02E6)",vr:"FL",name:"IsocenterToCompensatorDistances",vm:"1-n",version:"DICOM"},"(300A,02E7)":{tag:"(300A,02E7)",vr:"FL",name:"CompensatorRelativeStoppingPowerRatio",vm:"1",version:"DICOM"},"(300A,02E8)":{tag:"(300A,02E8)",vr:"FL",name:"CompensatorMillingToolDiameter",vm:"1",version:"DICOM"},"(300A,02EA)":{tag:"(300A,02EA)",vr:"SQ",name:"IonRangeCompensatorSequence",vm:"1",version:"DICOM"},"(300A,02EB)":{tag:"(300A,02EB)",vr:"LT",name:"CompensatorDescription",vm:"1",version:"DICOM"},"(300A,0302)":{tag:"(300A,0302)",vr:"IS",name:"RadiationMassNumber",vm:"1",version:"DICOM"},"(300A,0304)":{tag:"(300A,0304)",vr:"IS",name:"RadiationAtomicNumber",vm:"1",version:"DICOM"},"(300A,0306)":{tag:"(300A,0306)",vr:"SS",name:"RadiationChargeState",vm:"1",version:"DICOM"},"(300A,0308)":{tag:"(300A,0308)",vr:"CS",name:"ScanMode",vm:"1",version:"DICOM"},"(300A,0309)":{tag:"(300A,0309)",vr:"CS",name:"ModulatedScanModeType",vm:"1",version:"DICOM"},"(300A,030A)":{tag:"(300A,030A)",vr:"FL",name:"VirtualSourceAxisDistances",vm:"2",version:"DICOM"},"(300A,030C)":{tag:"(300A,030C)",vr:"SQ",name:"SnoutSequence",vm:"1",version:"DICOM"},"(300A,030D)":{tag:"(300A,030D)",vr:"FL",name:"SnoutPosition",vm:"1",version:"DICOM"},"(300A,030F)":{tag:"(300A,030F)",vr:"SH",name:"SnoutID",vm:"1",version:"DICOM"},"(300A,0312)":{tag:"(300A,0312)",vr:"IS",name:"NumberOfRangeShifters",vm:"1",version:"DICOM"},"(300A,0314)":{tag:"(300A,0314)",vr:"SQ",name:"RangeShifterSequence",vm:"1",version:"DICOM"},"(300A,0316)":{tag:"(300A,0316)",vr:"IS",name:"RangeShifterNumber",vm:"1",version:"DICOM"},"(300A,0318)":{tag:"(300A,0318)",vr:"SH",name:"RangeShifterID",vm:"1",version:"DICOM"},"(300A,0320)":{tag:"(300A,0320)",vr:"CS",name:"RangeShifterType",vm:"1",version:"DICOM"},"(300A,0322)":{tag:"(300A,0322)",vr:"LO",name:"RangeShifterDescription",vm:"1",version:"DICOM"},"(300A,0330)":{tag:"(300A,0330)",vr:"IS",name:"NumberOfLateralSpreadingDevices",vm:"1",version:"DICOM"},"(300A,0332)":{tag:"(300A,0332)",vr:"SQ",name:"LateralSpreadingDeviceSequence",vm:"1",version:"DICOM"},"(300A,0334)":{tag:"(300A,0334)",vr:"IS",name:"LateralSpreadingDeviceNumber",vm:"1",version:"DICOM"},"(300A,0336)":{tag:"(300A,0336)",vr:"SH",name:"LateralSpreadingDeviceID",vm:"1",version:"DICOM"},"(300A,0338)":{tag:"(300A,0338)",vr:"CS",name:"LateralSpreadingDeviceType",vm:"1",version:"DICOM"},"(300A,033A)":{tag:"(300A,033A)",vr:"LO",name:"LateralSpreadingDeviceDescription",vm:"1",version:"DICOM"},"(300A,033C)":{tag:"(300A,033C)",vr:"FL",name:"LateralSpreadingDeviceWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0340)":{tag:"(300A,0340)",vr:"IS",name:"NumberOfRangeModulators",vm:"1",version:"DICOM"},"(300A,0342)":{tag:"(300A,0342)",vr:"SQ",name:"RangeModulatorSequence",vm:"1",version:"DICOM"},"(300A,0344)":{tag:"(300A,0344)",vr:"IS",name:"RangeModulatorNumber",vm:"1",version:"DICOM"},"(300A,0346)":{tag:"(300A,0346)",vr:"SH",name:"RangeModulatorID",vm:"1",version:"DICOM"},"(300A,0348)":{tag:"(300A,0348)",vr:"CS",name:"RangeModulatorType",vm:"1",version:"DICOM"},"(300A,034A)":{tag:"(300A,034A)",vr:"LO",name:"RangeModulatorDescription",vm:"1",version:"DICOM"},"(300A,034C)":{tag:"(300A,034C)",vr:"SH",name:"BeamCurrentModulationID",vm:"1",version:"DICOM"},"(300A,0350)":{tag:"(300A,0350)",vr:"CS",name:"PatientSupportType",vm:"1",version:"DICOM"},"(300A,0352)":{tag:"(300A,0352)",vr:"SH",name:"PatientSupportID",vm:"1",version:"DICOM"},"(300A,0354)":{tag:"(300A,0354)",vr:"LO",name:"PatientSupportAccessoryCode",vm:"1",version:"DICOM"},"(300A,0355)":{tag:"(300A,0355)",vr:"LO",name:"TrayAccessoryCode",vm:"1",version:"DICOM"},"(300A,0356)":{tag:"(300A,0356)",vr:"FL",name:"FixationLightAzimuthalAngle",vm:"1",version:"DICOM"},"(300A,0358)":{tag:"(300A,0358)",vr:"FL",name:"FixationLightPolarAngle",vm:"1",version:"DICOM"},"(300A,035A)":{tag:"(300A,035A)",vr:"FL",name:"MetersetRate",vm:"1",version:"DICOM"},"(300A,0360)":{tag:"(300A,0360)",vr:"SQ",name:"RangeShifterSettingsSequence",vm:"1",version:"DICOM"},"(300A,0362)":{tag:"(300A,0362)",vr:"LO",name:"RangeShifterSetting",vm:"1",version:"DICOM"},"(300A,0364)":{tag:"(300A,0364)",vr:"FL",name:"IsocenterToRangeShifterDistance",vm:"1",version:"DICOM"},"(300A,0366)":{tag:"(300A,0366)",vr:"FL",name:"RangeShifterWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0370)":{tag:"(300A,0370)",vr:"SQ",name:"LateralSpreadingDeviceSettingsSequence",vm:"1",version:"DICOM"},"(300A,0372)":{tag:"(300A,0372)",vr:"LO",name:"LateralSpreadingDeviceSetting",vm:"1",version:"DICOM"},"(300A,0374)":{tag:"(300A,0374)",vr:"FL",name:"IsocenterToLateralSpreadingDeviceDistance",vm:"1",version:"DICOM"},"(300A,0380)":{tag:"(300A,0380)",vr:"SQ",name:"RangeModulatorSettingsSequence",vm:"1",version:"DICOM"},"(300A,0382)":{tag:"(300A,0382)",vr:"FL",name:"RangeModulatorGatingStartValue",vm:"1",version:"DICOM"},"(300A,0384)":{tag:"(300A,0384)",vr:"FL",name:"RangeModulatorGatingStopValue",vm:"1",version:"DICOM"},"(300A,0386)":{tag:"(300A,0386)",vr:"FL",name:"RangeModulatorGatingStartWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,0388)":{tag:"(300A,0388)",vr:"FL",name:"RangeModulatorGatingStopWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,038A)":{tag:"(300A,038A)",vr:"FL",name:"IsocenterToRangeModulatorDistance",vm:"1",version:"DICOM"},"(300A,038F)":{tag:"(300A,038F)",vr:"FL",name:"ScanSpotTimeOffset",vm:"1-n",version:"DICOM"},"(300A,0390)":{tag:"(300A,0390)",vr:"SH",name:"ScanSpotTuneID",vm:"1",version:"DICOM"},"(300A,0391)":{tag:"(300A,0391)",vr:"IS",name:"ScanSpotPrescribedIndices",vm:"1-n",version:"DICOM"},"(300A,0392)":{tag:"(300A,0392)",vr:"IS",name:"NumberOfScanSpotPositions",vm:"1",version:"DICOM"},"(300A,0393)":{tag:"(300A,0393)",vr:"CS",name:"ScanSpotReordered",vm:"1",version:"DICOM"},"(300A,0394)":{tag:"(300A,0394)",vr:"FL",name:"ScanSpotPositionMap",vm:"1-n",version:"DICOM"},"(300A,0395)":{tag:"(300A,0395)",vr:"CS",name:"ScanSpotReorderingAllowed",vm:"1",version:"DICOM"},"(300A,0396)":{tag:"(300A,0396)",vr:"FL",name:"ScanSpotMetersetWeights",vm:"1-n",version:"DICOM"},"(300A,0398)":{tag:"(300A,0398)",vr:"FL",name:"ScanningSpotSize",vm:"2",version:"DICOM"},"(300A,0399)":{tag:"(300A,0399)",vr:"FL",name:"ScanSpotSizesDelivered",vm:"2-2n",version:"DICOM"},"(300A,039A)":{tag:"(300A,039A)",vr:"IS",name:"NumberOfPaintings",vm:"1",version:"DICOM"},"(300A,03A0)":{tag:"(300A,03A0)",vr:"SQ",name:"IonToleranceTableSequence",vm:"1",version:"DICOM"},"(300A,03A2)":{tag:"(300A,03A2)",vr:"SQ",name:"IonBeamSequence",vm:"1",version:"DICOM"},"(300A,03A4)":{tag:"(300A,03A4)",vr:"SQ",name:"IonBeamLimitingDeviceSequence",vm:"1",version:"DICOM"},"(300A,03A6)":{tag:"(300A,03A6)",vr:"SQ",name:"IonBlockSequence",vm:"1",version:"DICOM"},"(300A,03A8)":{tag:"(300A,03A8)",vr:"SQ",name:"IonControlPointSequence",vm:"1",version:"DICOM"},"(300A,03AA)":{tag:"(300A,03AA)",vr:"SQ",name:"IonWedgeSequence",vm:"1",version:"DICOM"},"(300A,03AC)":{tag:"(300A,03AC)",vr:"SQ",name:"IonWedgePositionSequence",vm:"1",version:"DICOM"},"(300A,0401)":{tag:"(300A,0401)",vr:"SQ",name:"ReferencedSetupImageSequence",vm:"1",version:"DICOM"},"(300A,0402)":{tag:"(300A,0402)",vr:"ST",name:"SetupImageComment",vm:"1",version:"DICOM"},"(300A,0410)":{tag:"(300A,0410)",vr:"SQ",name:"MotionSynchronizationSequence",vm:"1",version:"DICOM"},"(300A,0412)":{tag:"(300A,0412)",vr:"FL",name:"ControlPointOrientation",vm:"3",version:"DICOM"},"(300A,0420)":{tag:"(300A,0420)",vr:"SQ",name:"GeneralAccessorySequence",vm:"1",version:"DICOM"},"(300A,0421)":{tag:"(300A,0421)",vr:"SH",name:"GeneralAccessoryID",vm:"1",version:"DICOM"},"(300A,0422)":{tag:"(300A,0422)",vr:"ST",name:"GeneralAccessoryDescription",vm:"1",version:"DICOM"},"(300A,0423)":{tag:"(300A,0423)",vr:"CS",name:"GeneralAccessoryType",vm:"1",version:"DICOM"},"(300A,0424)":{tag:"(300A,0424)",vr:"IS",name:"GeneralAccessoryNumber",vm:"1",version:"DICOM"},"(300A,0425)":{tag:"(300A,0425)",vr:"FL",name:"SourceToGeneralAccessoryDistance",vm:"1",version:"DICOM"},"(300A,0426)":{tag:"(300A,0426)",vr:"DS",name:"IsocenterToGeneralAccessoryDistance",vm:"1",version:"DICOM"},"(300A,0431)":{tag:"(300A,0431)",vr:"SQ",name:"ApplicatorGeometrySequence",vm:"1",version:"DICOM"},"(300A,0432)":{tag:"(300A,0432)",vr:"CS",name:"ApplicatorApertureShape",vm:"1",version:"DICOM"},"(300A,0433)":{tag:"(300A,0433)",vr:"FL",name:"ApplicatorOpening",vm:"1",version:"DICOM"},"(300A,0434)":{tag:"(300A,0434)",vr:"FL",name:"ApplicatorOpeningX",vm:"1",version:"DICOM"},"(300A,0435)":{tag:"(300A,0435)",vr:"FL",name:"ApplicatorOpeningY",vm:"1",version:"DICOM"},"(300A,0436)":{tag:"(300A,0436)",vr:"FL",name:"SourceToApplicatorMountingPositionDistance",vm:"1",version:"DICOM"},"(300A,0440)":{tag:"(300A,0440)",vr:"IS",name:"NumberOfBlockSlabItems",vm:"1",version:"DICOM"},"(300A,0441)":{tag:"(300A,0441)",vr:"SQ",name:"BlockSlabSequence",vm:"1",version:"DICOM"},"(300A,0442)":{tag:"(300A,0442)",vr:"DS",name:"BlockSlabThickness",vm:"1",version:"DICOM"},"(300A,0443)":{tag:"(300A,0443)",vr:"US",name:"BlockSlabNumber",vm:"1",version:"DICOM"},"(300A,0450)":{tag:"(300A,0450)",vr:"SQ",name:"DeviceMotionControlSequence",vm:"1",version:"DICOM"},"(300A,0451)":{tag:"(300A,0451)",vr:"CS",name:"DeviceMotionExecutionMode",vm:"1",version:"DICOM"},"(300A,0452)":{tag:"(300A,0452)",vr:"CS",name:"DeviceMotionObservationMode",vm:"1",version:"DICOM"},"(300A,0453)":{tag:"(300A,0453)",vr:"SQ",name:"DeviceMotionParameterCodeSequence",vm:"1",version:"DICOM"},"(300A,0501)":{tag:"(300A,0501)",vr:"FL",name:"DistalDepthFraction",vm:"1",version:"DICOM"},"(300A,0502)":{tag:"(300A,0502)",vr:"FL",name:"DistalDepth",vm:"1",version:"DICOM"},"(300A,0503)":{tag:"(300A,0503)",vr:"FL",name:"NominalRangeModulationFractions",vm:"2",version:"DICOM"},"(300A,0504)":{tag:"(300A,0504)",vr:"FL",name:"NominalRangeModulatedRegionDepths",vm:"2",version:"DICOM"},"(300A,0505)":{tag:"(300A,0505)",vr:"SQ",name:"DepthDoseParametersSequence",vm:"1",version:"DICOM"},"(300A,0506)":{tag:"(300A,0506)",vr:"SQ",name:"DeliveredDepthDoseParametersSequence",vm:"1",version:"DICOM"},"(300A,0507)":{tag:"(300A,0507)",vr:"FL",name:"DeliveredDistalDepthFraction",vm:"1",version:"DICOM"},"(300A,0508)":{tag:"(300A,0508)",vr:"FL",name:"DeliveredDistalDepth",vm:"1",version:"DICOM"},"(300A,0509)":{tag:"(300A,0509)",vr:"FL",name:"DeliveredNominalRangeModulationFractions",vm:"2",version:"DICOM"},"(300A,0510)":{tag:"(300A,0510)",vr:"FL",name:"DeliveredNominalRangeModulatedRegionDepths",vm:"2",version:"DICOM"},"(300A,0511)":{tag:"(300A,0511)",vr:"CS",name:"DeliveredReferenceDoseDefinition",vm:"1",version:"DICOM"},"(300A,0512)":{tag:"(300A,0512)",vr:"CS",name:"ReferenceDoseDefinition",vm:"1",version:"DICOM"},"(300A,0600)":{tag:"(300A,0600)",vr:"US",name:"RTControlPointIndex",vm:"1",version:"DICOM"},"(300A,0601)":{tag:"(300A,0601)",vr:"US",name:"RadiationGenerationModeIndex",vm:"1",version:"DICOM"},"(300A,0602)":{tag:"(300A,0602)",vr:"US",name:"ReferencedDefinedDeviceIndex",vm:"1",version:"DICOM"},"(300A,0603)":{tag:"(300A,0603)",vr:"US",name:"RadiationDoseIdentificationIndex",vm:"1",version:"DICOM"},"(300A,0604)":{tag:"(300A,0604)",vr:"US",name:"NumberOfRTControlPoints",vm:"1",version:"DICOM"},"(300A,0605)":{tag:"(300A,0605)",vr:"US",name:"ReferencedRadiationGenerationModeIndex",vm:"1",version:"DICOM"},"(300A,0606)":{tag:"(300A,0606)",vr:"US",name:"TreatmentPositionIndex",vm:"1",version:"DICOM"},"(300A,0607)":{tag:"(300A,0607)",vr:"US",name:"ReferencedDeviceIndex",vm:"1",version:"DICOM"},"(300A,0608)":{tag:"(300A,0608)",vr:"LO",name:"TreatmentPositionGroupLabel",vm:"1",version:"DICOM"},"(300A,0609)":{tag:"(300A,0609)",vr:"UI",name:"TreatmentPositionGroupUID",vm:"1",version:"DICOM"},"(300A,060A)":{tag:"(300A,060A)",vr:"SQ",name:"TreatmentPositionGroupSequence",vm:"1",version:"DICOM"},"(300A,060B)":{tag:"(300A,060B)",vr:"US",name:"ReferencedTreatmentPositionIndex",vm:"1",version:"DICOM"},"(300A,060C)":{tag:"(300A,060C)",vr:"US",name:"ReferencedRadiationDoseIdentificationIndex",vm:"1",version:"DICOM"},"(300A,060D)":{tag:"(300A,060D)",vr:"FD",name:"RTAccessoryHolderWaterEquivalentThickness",vm:"1",version:"DICOM"},"(300A,060E)":{tag:"(300A,060E)",vr:"US",name:"ReferencedRTAccessoryHolderDeviceIndex",vm:"1",version:"DICOM"},"(300A,060F)":{tag:"(300A,060F)",vr:"CS",name:"RTAccessoryHolderSlotExistenceFlag",vm:"1",version:"DICOM"},"(300A,0610)":{tag:"(300A,0610)",vr:"SQ",name:"RTAccessoryHolderSlotSequence",vm:"1",version:"DICOM"},"(300A,0611)":{tag:"(300A,0611)",vr:"LO",name:"RTAccessoryHolderSlotID",vm:"1",version:"DICOM"},"(300A,0612)":{tag:"(300A,0612)",vr:"FD",name:"RTAccessoryHolderSlotDistance",vm:"1",version:"DICOM"},"(300A,0613)":{tag:"(300A,0613)",vr:"FD",name:"RTAccessorySlotDistance",vm:"1",version:"DICOM"},"(300A,0614)":{tag:"(300A,0614)",vr:"SQ",name:"RTAccessoryHolderDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0615)":{tag:"(300A,0615)",vr:"LO",name:"RTAccessoryDeviceSlotID",vm:"1",version:"DICOM"},"(300A,0616)":{tag:"(300A,0616)",vr:"SQ",name:"RTRadiationSequence",vm:"1",version:"DICOM"},"(300A,0617)":{tag:"(300A,0617)",vr:"SQ",name:"RadiationDoseSequence",vm:"1",version:"DICOM"},"(300A,0618)":{tag:"(300A,0618)",vr:"SQ",name:"RadiationDoseIdentificationSequence",vm:"1",version:"DICOM"},"(300A,0619)":{tag:"(300A,0619)",vr:"LO",name:"RadiationDoseIdentificationLabel",vm:"1",version:"DICOM"},"(300A,061A)":{tag:"(300A,061A)",vr:"CS",name:"ReferenceDoseType",vm:"1",version:"DICOM"},"(300A,061B)":{tag:"(300A,061B)",vr:"CS",name:"PrimaryDoseValueIndicator",vm:"1",version:"DICOM"},"(300A,061C)":{tag:"(300A,061C)",vr:"SQ",name:"DoseValuesSequence",vm:"1",version:"DICOM"},"(300A,061D)":{tag:"(300A,061D)",vr:"CS",name:"DoseValuePurpose",vm:"1-n",version:"DICOM"},"(300A,061E)":{tag:"(300A,061E)",vr:"FD",name:"ReferenceDosePointCoordinates",vm:"3",version:"DICOM"},"(300A,061F)":{tag:"(300A,061F)",vr:"SQ",name:"RadiationDoseValuesParametersSequence",vm:"1",version:"DICOM"},"(300A,0620)":{tag:"(300A,0620)",vr:"SQ",name:"MetersetToDoseMappingSequence",vm:"1",version:"DICOM"},"(300A,0621)":{tag:"(300A,0621)",vr:"SQ",name:"ExpectedInVivoMeasurementValuesSequence",vm:"1",version:"DICOM"},"(300A,0622)":{tag:"(300A,0622)",vr:"US",name:"ExpectedInVivoMeasurementValueIndex",vm:"1",version:"DICOM"},"(300A,0623)":{tag:"(300A,0623)",vr:"LO",name:"RadiationDoseInVivoMeasurementLabel",vm:"1",version:"DICOM"},"(300A,0624)":{tag:"(300A,0624)",vr:"FD",name:"RadiationDoseCentralAxisDisplacement",vm:"2",version:"DICOM"},"(300A,0625)":{tag:"(300A,0625)",vr:"FD",name:"RadiationDoseValue",vm:"1",version:"DICOM"},"(300A,0626)":{tag:"(300A,0626)",vr:"FD",name:"RadiationDoseSourceToSkinDistance",vm:"1",version:"DICOM"},"(300A,0627)":{tag:"(300A,0627)",vr:"FD",name:"RadiationDoseMeasurementPointCoordinates",vm:"3",version:"DICOM"},"(300A,0628)":{tag:"(300A,0628)",vr:"FD",name:"RadiationDoseSourceToExternalContourDistance",vm:"1",version:"DICOM"},"(300A,0629)":{tag:"(300A,0629)",vr:"SQ",name:"RTToleranceSetSequence",vm:"1",version:"DICOM"},"(300A,062A)":{tag:"(300A,062A)",vr:"LO",name:"RTToleranceSetLabel",vm:"1",version:"DICOM"},"(300A,062B)":{tag:"(300A,062B)",vr:"SQ",name:"AttributeToleranceValuesSequence",vm:"1",version:"DICOM"},"(300A,062C)":{tag:"(300A,062C)",vr:"FD",name:"ToleranceValue",vm:"1",version:"DICOM"},"(300A,062D)":{tag:"(300A,062D)",vr:"SQ",name:"PatientSupportPositionToleranceSequence",vm:"1",version:"DICOM"},"(300A,062E)":{tag:"(300A,062E)",vr:"FD",name:"TreatmentTimeLimit",vm:"1",version:"DICOM"},"(300A,062F)":{tag:"(300A,062F)",vr:"SQ",name:"CArmPhotonElectronControlPointSequence",vm:"1",version:"DICOM"},"(300A,0630)":{tag:"(300A,0630)",vr:"SQ",name:"ReferencedRTRadiationSequence",vm:"1",version:"DICOM"},"(300A,0631)":{tag:"(300A,0631)",vr:"SQ",name:"ReferencedRTInstanceSequence",vm:"1",version:"DICOM"},"(300A,0632)":{tag:"(300A,0632)",vr:"SQ",name:"ReferencedRTPatientSetupSequence",vm:"1",version:"DICOM"},"(300A,0634)":{tag:"(300A,0634)",vr:"FD",name:"SourceToPatientSurfaceDistance",vm:"1",version:"DICOM"},"(300A,0635)":{tag:"(300A,0635)",vr:"SQ",name:"TreatmentMachineSpecialModeCodeSequence",vm:"1",version:"DICOM"},"(300A,0636)":{tag:"(300A,0636)",vr:"US",name:"IntendedNumberOfFractions",vm:"1",version:"DICOM"},"(300A,0637)":{tag:"(300A,0637)",vr:"CS",name:"RTRadiationSetIntent",vm:"1",version:"DICOM"},"(300A,0638)":{tag:"(300A,0638)",vr:"CS",name:"RTRadiationPhysicalAndGeometricContentDetailFlag",vm:"1",version:"DICOM"},"(300A,0639)":{tag:"(300A,0639)",vr:"CS",name:"RTRecordFlag",vm:"1",version:"DICOM"},"(300A,063A)":{tag:"(300A,063A)",vr:"SQ",name:"TreatmentDeviceIdentificationSequence",vm:"1",version:"DICOM"},"(300A,063B)":{tag:"(300A,063B)",vr:"SQ",name:"ReferencedRTPhysicianIntentSequence",vm:"1",version:"DICOM"},"(300A,063C)":{tag:"(300A,063C)",vr:"FD",name:"CumulativeMeterset",vm:"1",version:"DICOM"},"(300A,063D)":{tag:"(300A,063D)",vr:"FD",name:"DeliveryRate",vm:"1",version:"DICOM"},"(300A,063E)":{tag:"(300A,063E)",vr:"SQ",name:"DeliveryRateUnitSequence",vm:"1",version:"DICOM"},"(300A,063F)":{tag:"(300A,063F)",vr:"SQ",name:"TreatmentPositionSequence",vm:"1",version:"DICOM"},"(300A,0640)":{tag:"(300A,0640)",vr:"FD",name:"RadiationSourceAxisDistance",vm:"1",version:"DICOM"},"(300A,0641)":{tag:"(300A,0641)",vr:"US",name:"NumberOfRTBeamLimitingDevices",vm:"1",version:"DICOM"},"(300A,0642)":{tag:"(300A,0642)",vr:"FD",name:"RTBeamLimitingDeviceProximalDistance",vm:"1",version:"DICOM"},"(300A,0643)":{tag:"(300A,0643)",vr:"FD",name:"RTBeamLimitingDeviceDistalDistance",vm:"1",version:"DICOM"},"(300A,0644)":{tag:"(300A,0644)",vr:"SQ",name:"ParallelRTBeamDelimiterDeviceOrientationLabelCodeSequence",vm:"1",version:"DICOM"},"(300A,0645)":{tag:"(300A,0645)",vr:"FD",name:"BeamModifierOrientationAngle",vm:"1",version:"DICOM"},"(300A,0646)":{tag:"(300A,0646)",vr:"SQ",name:"FixedRTBeamDelimiterDeviceSequence",vm:"1",version:"DICOM"},"(300A,0647)":{tag:"(300A,0647)",vr:"SQ",name:"ParallelRTBeamDelimiterDeviceSequence",vm:"1",version:"DICOM"},"(300A,0648)":{tag:"(300A,0648)",vr:"US",name:"NumberOfParallelRTBeamDelimiters",vm:"1",version:"DICOM"},"(300A,0649)":{tag:"(300A,0649)",vr:"FD",name:"ParallelRTBeamDelimiterBoundaries",vm:"2-n",version:"DICOM"},"(300A,064A)":{tag:"(300A,064A)",vr:"FD",name:"ParallelRTBeamDelimiterPositions",vm:"2-n",version:"DICOM"},"(300A,064B)":{tag:"(300A,064B)",vr:"FD",name:"RTBeamLimitingDeviceOffset",vm:"2",version:"DICOM"},"(300A,064C)":{tag:"(300A,064C)",vr:"SQ",name:"RTBeamDelimiterGeometrySequence",vm:"1",version:"DICOM"},"(300A,064D)":{tag:"(300A,064D)",vr:"SQ",name:"RTBeamLimitingDeviceDefinitionSequence",vm:"1",version:"DICOM"},"(300A,064E)":{tag:"(300A,064E)",vr:"CS",name:"ParallelRTBeamDelimiterOpeningMode",vm:"1",version:"DICOM"},"(300A,064F)":{tag:"(300A,064F)",vr:"CS",name:"ParallelRTBeamDelimiterLeafMountingSide",vm:"1-n",version:"DICOM"},"(300A,0650)":{tag:"(300A,0650)",vr:"UI",name:"PatientSetupUID",vm:"1",version:"DICOM"},"(300A,0651)":{tag:"(300A,0651)",vr:"SQ",name:"WedgeDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0652)":{tag:"(300A,0652)",vr:"FD",name:"RadiationBeamWedgeAngle",vm:"1",version:"DICOM"},"(300A,0653)":{tag:"(300A,0653)",vr:"FD",name:"RadiationBeamWedgeThinEdgeDistance",vm:"1",version:"DICOM"},"(300A,0654)":{tag:"(300A,0654)",vr:"FD",name:"RadiationBeamEffectiveWedgeAngle",vm:"1",version:"DICOM"},"(300A,0655)":{tag:"(300A,0655)",vr:"US",name:"NumberOfWedgePositions",vm:"1",version:"DICOM"},"(300A,0656)":{tag:"(300A,0656)",vr:"SQ",name:"RTBeamLimitingDeviceOpeningSequence",vm:"1",version:"DICOM"},"(300A,0657)":{tag:"(300A,0657)",vr:"US",name:"NumberOfRTBeamLimitingDeviceOpenings",vm:"1",version:"DICOM"},"(300A,0658)":{tag:"(300A,0658)",vr:"SQ",name:"RadiationDosimeterUnitSequence",vm:"1",version:"DICOM"},"(300A,0659)":{tag:"(300A,0659)",vr:"SQ",name:"RTDeviceDistanceReferenceLocationCodeSequence",vm:"1",version:"DICOM"},"(300A,065A)":{tag:"(300A,065A)",vr:"SQ",name:"RadiationDeviceConfigurationAndCommissioningKeySequence",vm:"1",version:"DICOM"},"(300A,065B)":{tag:"(300A,065B)",vr:"SQ",name:"PatientSupportPositionParameterSequence",vm:"1",version:"DICOM"},"(300A,065C)":{tag:"(300A,065C)",vr:"CS",name:"PatientSupportPositionSpecificationMethod",vm:"1",version:"DICOM"},"(300A,065D)":{tag:"(300A,065D)",vr:"SQ",name:"PatientSupportPositionDeviceParameterSequence",vm:"1",version:"DICOM"},"(300A,065E)":{tag:"(300A,065E)",vr:"US",name:"DeviceOrderIndex",vm:"1",version:"DICOM"},"(300A,065F)":{tag:"(300A,065F)",vr:"US",name:"PatientSupportPositionParameterOrderIndex",vm:"1",version:"DICOM"},"(300A,0660)":{tag:"(300A,0660)",vr:"SQ",name:"PatientSupportPositionDeviceToleranceSequence",vm:"1",version:"DICOM"},"(300A,0661)":{tag:"(300A,0661)",vr:"US",name:"PatientSupportPositionToleranceOrderIndex",vm:"1",version:"DICOM"},"(300A,0662)":{tag:"(300A,0662)",vr:"SQ",name:"CompensatorDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0663)":{tag:"(300A,0663)",vr:"CS",name:"CompensatorMapOrientation",vm:"1",version:"DICOM"},"(300A,0664)":{tag:"(300A,0664)",vr:"OF",name:"CompensatorProximalThicknessMap",vm:"1",version:"DICOM"},"(300A,0665)":{tag:"(300A,0665)",vr:"OF",name:"CompensatorDistalThicknessMap",vm:"1",version:"DICOM"},"(300A,0666)":{tag:"(300A,0666)",vr:"FD",name:"CompensatorBasePlaneOffset",vm:"1",version:"DICOM"},"(300A,0667)":{tag:"(300A,0667)",vr:"SQ",name:"CompensatorShapeFabricationCodeSequence",vm:"1",version:"DICOM"},"(300A,0668)":{tag:"(300A,0668)",vr:"SQ",name:"CompensatorShapeSequence",vm:"1",version:"DICOM"},"(300A,0669)":{tag:"(300A,0669)",vr:"FD",name:"RadiationBeamCompensatorMillingToolDiameter",vm:"1",version:"DICOM"},"(300A,066A)":{tag:"(300A,066A)",vr:"SQ",name:"BlockDefinitionSequence",vm:"1",version:"DICOM"},"(300A,066B)":{tag:"(300A,066B)",vr:"OF",name:"BlockEdgeData",vm:"1",version:"DICOM"},"(300A,066C)":{tag:"(300A,066C)",vr:"CS",name:"BlockOrientation",vm:"1",version:"DICOM"},"(300A,066D)":{tag:"(300A,066D)",vr:"FD",name:"RadiationBeamBlockThickness",vm:"1",version:"DICOM"},"(300A,066E)":{tag:"(300A,066E)",vr:"FD",name:"RadiationBeamBlockSlabThickness",vm:"1",version:"DICOM"},"(300A,066F)":{tag:"(300A,066F)",vr:"SQ",name:"BlockEdgeDataSequence",vm:"1",version:"DICOM"},"(300A,0670)":{tag:"(300A,0670)",vr:"US",name:"NumberOfRTAccessoryHolders",vm:"1",version:"DICOM"},"(300A,0671)":{tag:"(300A,0671)",vr:"SQ",name:"GeneralAccessoryDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0672)":{tag:"(300A,0672)",vr:"US",name:"NumberOfGeneralAccessories",vm:"1",version:"DICOM"},"(300A,0673)":{tag:"(300A,0673)",vr:"SQ",name:"BolusDefinitionSequence",vm:"1",version:"DICOM"},"(300A,0674)":{tag:"(300A,0674)",vr:"US",name:"NumberOfBoluses",vm:"1",version:"DICOM"},"(300A,0675)":{tag:"(300A,0675)",vr:"UI",name:"EquipmentFrameOfReferenceUID",vm:"1",version:"DICOM"},"(300A,0676)":{tag:"(300A,0676)",vr:"ST",name:"EquipmentFrameOfReferenceDescription",vm:"1",version:"DICOM"},"(300A,0677)":{tag:"(300A,0677)",vr:"SQ",name:"EquipmentReferencePointCoordinatesSequence",vm:"1",version:"DICOM"},"(300A,0678)":{tag:"(300A,0678)",vr:"SQ",name:"EquipmentReferencePointCodeSequence",vm:"1",version:"DICOM"},"(300A,0679)":{tag:"(300A,0679)",vr:"FD",name:"RTBeamLimitingDeviceAngle",vm:"1",version:"DICOM"},"(300A,067A)":{tag:"(300A,067A)",vr:"FD",name:"SourceRollAngle",vm:"1",version:"DICOM"},"(300A,067B)":{tag:"(300A,067B)",vr:"SQ",name:"RadiationGenerationModeSequence",vm:"1",version:"DICOM"},"(300A,067C)":{tag:"(300A,067C)",vr:"SH",name:"RadiationGenerationModeLabel",vm:"1",version:"DICOM"},"(300A,067D)":{tag:"(300A,067D)",vr:"ST",name:"RadiationGenerationModeDescription",vm:"1",version:"DICOM"},"(300A,067E)":{tag:"(300A,067E)",vr:"SQ",name:"RadiationGenerationModeMachineCodeSequence",vm:"1",version:"DICOM"},"(300A,067F)":{tag:"(300A,067F)",vr:"SQ",name:"RadiationTypeCodeSequence",vm:"1",version:"DICOM"},"(300A,0680)":{tag:"(300A,0680)",vr:"DS",name:"NominalEnergy",vm:"1",version:"DICOM"},"(300A,0681)":{tag:"(300A,0681)",vr:"DS",name:"MinimumNominalEnergy",vm:"1",version:"DICOM"},"(300A,0682)":{tag:"(300A,0682)",vr:"DS",name:"MaximumNominalEnergy",vm:"1",version:"DICOM"},"(300A,0683)":{tag:"(300A,0683)",vr:"SQ",name:"RadiationFluenceModifierCodeSequence",vm:"1",version:"DICOM"},"(300A,0684)":{tag:"(300A,0684)",vr:"SQ",name:"EnergyUnitCodeSequence",vm:"1",version:"DICOM"},"(300A,0685)":{tag:"(300A,0685)",vr:"US",name:"NumberOfRadiationGenerationModes",vm:"1",version:"DICOM"},"(300A,0686)":{tag:"(300A,0686)",vr:"SQ",name:"PatientSupportDevicesSequence",vm:"1",version:"DICOM"},"(300A,0687)":{tag:"(300A,0687)",vr:"US",name:"NumberOfPatientSupportDevices",vm:"1",version:"DICOM"},"(300A,0688)":{tag:"(300A,0688)",vr:"FD",name:"RTBeamModifierDefinitionDistance",vm:"1",version:"DICOM"},"(300A,0689)":{tag:"(300A,0689)",vr:"SQ",name:"BeamAreaLimitSequence",vm:"1",version:"DICOM"},"(300A,068A)":{tag:"(300A,068A)",vr:"SQ",name:"ReferencedRTPrescriptionSequence",vm:"1",version:"DICOM"},"(300A,0700)":{tag:"(300A,0700)",vr:"UI",name:"TreatmentSessionUID",vm:"1",version:"DICOM"},"(300A,0701)":{tag:"(300A,0701)",vr:"CS",name:"RTRadiationUsage",vm:"1",version:"DICOM"},"(300A,0702)":{tag:"(300A,0702)",vr:"SQ",name:"ReferencedRTRadiationSetSequence",vm:"1",version:"DICOM"},"(300A,0703)":{tag:"(300A,0703)",vr:"SQ",name:"ReferencedRTRadiationRecordSequence",vm:"1",version:"DICOM"},"(300A,0704)":{tag:"(300A,0704)",vr:"US",name:"RTRadiationSetDeliveryNumber",vm:"1",version:"DICOM"},"(300A,0705)":{tag:"(300A,0705)",vr:"US",name:"ClinicalFractionNumber",vm:"1",version:"DICOM"},"(300A,0706)":{tag:"(300A,0706)",vr:"CS",name:"RTTreatmentFractionCompletionStatus",vm:"1",version:"DICOM"},"(300A,0707)":{tag:"(300A,0707)",vr:"CS",name:"RTRadiationSetUsage",vm:"1",version:"DICOM"},"(300A,0708)":{tag:"(300A,0708)",vr:"CS",name:"TreatmentDeliveryContinuationFlag",vm:"1",version:"DICOM"},"(300A,0709)":{tag:"(300A,0709)",vr:"CS",name:"TreatmentRecordContentOrigin",vm:"1",version:"DICOM"},"(300A,0714)":{tag:"(300A,0714)",vr:"CS",name:"RTTreatmentTerminationStatus",vm:"1",version:"DICOM"},"(300A,0715)":{tag:"(300A,0715)",vr:"SQ",name:"RTTreatmentTerminationReasonCodeSequence",vm:"1",version:"DICOM"},"(300A,0716)":{tag:"(300A,0716)",vr:"SQ",name:"MachineSpecificTreatmentTerminationCodeSequence",vm:"1",version:"DICOM"},"(300A,0722)":{tag:"(300A,0722)",vr:"SQ",name:"RTRadiationSalvageRecordControlPointSequence",vm:"1",version:"DICOM"},"(300A,0723)":{tag:"(300A,0723)",vr:"CS",name:"StartingMetersetValueKnownFlag",vm:"1",version:"DICOM"},"(300A,0730)":{tag:"(300A,0730)",vr:"ST",name:"TreatmentTerminationDescription",vm:"1",version:"DICOM"},"(300A,0731)":{tag:"(300A,0731)",vr:"SQ",name:"TreatmentToleranceViolationSequence",vm:"1",version:"DICOM"},"(300A,0732)":{tag:"(300A,0732)",vr:"CS",name:"TreatmentToleranceViolationCategory",vm:"1",version:"DICOM"},"(300A,0733)":{tag:"(300A,0733)",vr:"SQ",name:"TreatmentToleranceViolationAttributeSequence",vm:"1",version:"DICOM"},"(300A,0734)":{tag:"(300A,0734)",vr:"ST",name:"TreatmentToleranceViolationDescription",vm:"1",version:"DICOM"},"(300A,0735)":{tag:"(300A,0735)",vr:"ST",name:"TreatmentToleranceViolationIdentification",vm:"1",version:"DICOM"},"(300A,0736)":{tag:"(300A,0736)",vr:"DT",name:"TreatmentToleranceViolationDateTime",vm:"1",version:"DICOM"},"(300A,073A)":{tag:"(300A,073A)",vr:"DT",name:"RecordedRTControlPointDateTime",vm:"1",version:"DICOM"},"(300A,073B)":{tag:"(300A,073B)",vr:"US",name:"ReferencedRadiationRTControlPointIndex",vm:"1",version:"DICOM"},"(300A,073E)":{tag:"(300A,073E)",vr:"SQ",name:"AlternateValueSequence",vm:"1",version:"DICOM"},"(300A,073F)":{tag:"(300A,073F)",vr:"SQ",name:"ConfirmationSequence",vm:"1",version:"DICOM"},"(300A,0740)":{tag:"(300A,0740)",vr:"SQ",name:"InterlockSequence",vm:"1",version:"DICOM"},"(300A,0741)":{tag:"(300A,0741)",vr:"DT",name:"InterlockDateTime",vm:"1",version:"DICOM"},"(300A,0742)":{tag:"(300A,0742)",vr:"ST",name:"InterlockDescription",vm:"1",version:"DICOM"},"(300A,0743)":{tag:"(300A,0743)",vr:"SQ",name:"InterlockOriginatingDeviceSequence",vm:"1",version:"DICOM"},"(300A,0744)":{tag:"(300A,0744)",vr:"SQ",name:"InterlockCodeSequence",vm:"1",version:"DICOM"},"(300A,0745)":{tag:"(300A,0745)",vr:"SQ",name:"InterlockResolutionCodeSequence",vm:"1",version:"DICOM"},"(300A,0746)":{tag:"(300A,0746)",vr:"SQ",name:"InterlockResolutionUserSequence",vm:"1",version:"DICOM"},"(300A,0760)":{tag:"(300A,0760)",vr:"DT",name:"OverrideDateTime",vm:"1",version:"DICOM"},"(300A,0761)":{tag:"(300A,0761)",vr:"SQ",name:"TreatmentToleranceViolationTypeCodeSequence",vm:"1",version:"DICOM"},"(300A,0762)":{tag:"(300A,0762)",vr:"SQ",name:"TreatmentToleranceViolationCauseCodeSequence",vm:"1",version:"DICOM"},"(300A,0772)":{tag:"(300A,0772)",vr:"SQ",name:"MeasuredMetersetToDoseMappingSequence",vm:"1",version:"DICOM"},"(300A,0773)":{tag:"(300A,0773)",vr:"US",name:"ReferencedExpectedInVivoMeasurementValueIndex",vm:"1",version:"DICOM"},"(300A,0774)":{tag:"(300A,0774)",vr:"SQ",name:"DoseMeasurementDeviceCodeSequence",vm:"1",version:"DICOM"},"(300A,0780)":{tag:"(300A,0780)",vr:"SQ",name:"AdditionalParameterRecordingInstanceSequence",vm:"1",version:"DICOM"},"(300A,0783)":{tag:"(300A,0783)",vr:"ST",name:"InterlockOriginDescription",vm:"1",version:"DICOM"},"(300C,0002)":{tag:"(300C,0002)",vr:"SQ",name:"ReferencedRTPlanSequence",vm:"1",version:"DICOM"},"(300C,0004)":{tag:"(300C,0004)",vr:"SQ",name:"ReferencedBeamSequence",vm:"1",version:"DICOM"},"(300C,0006)":{tag:"(300C,0006)",vr:"IS",name:"ReferencedBeamNumber",vm:"1",version:"DICOM"},"(300C,0007)":{tag:"(300C,0007)",vr:"IS",name:"ReferencedReferenceImageNumber",vm:"1",version:"DICOM"},"(300C,0008)":{tag:"(300C,0008)",vr:"DS",name:"StartCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300C,0009)":{tag:"(300C,0009)",vr:"DS",name:"EndCumulativeMetersetWeight",vm:"1",version:"DICOM"},"(300C,000A)":{tag:"(300C,000A)",vr:"SQ",name:"ReferencedBrachyApplicationSetupSequence",vm:"1",version:"DICOM"},"(300C,000C)":{tag:"(300C,000C)",vr:"IS",name:"ReferencedBrachyApplicationSetupNumber",vm:"1",version:"DICOM"},"(300C,000E)":{tag:"(300C,000E)",vr:"IS",name:"ReferencedSourceNumber",vm:"1",version:"DICOM"},"(300C,0020)":{tag:"(300C,0020)",vr:"SQ",name:"ReferencedFractionGroupSequence",vm:"1",version:"DICOM"},"(300C,0022)":{tag:"(300C,0022)",vr:"IS",name:"ReferencedFractionGroupNumber",vm:"1",version:"DICOM"},"(300C,0040)":{tag:"(300C,0040)",vr:"SQ",name:"ReferencedVerificationImageSequence",vm:"1",version:"DICOM"},"(300C,0042)":{tag:"(300C,0042)",vr:"SQ",name:"ReferencedReferenceImageSequence",vm:"1",version:"DICOM"},"(300C,0050)":{tag:"(300C,0050)",vr:"SQ",name:"ReferencedDoseReferenceSequence",vm:"1",version:"DICOM"},"(300C,0051)":{tag:"(300C,0051)",vr:"IS",name:"ReferencedDoseReferenceNumber",vm:"1",version:"DICOM"},"(300C,0055)":{tag:"(300C,0055)",vr:"SQ",name:"BrachyReferencedDoseReferenceSequence",vm:"1",version:"DICOM"},"(300C,0060)":{tag:"(300C,0060)",vr:"SQ",name:"ReferencedStructureSetSequence",vm:"1",version:"DICOM"},"(300C,006A)":{tag:"(300C,006A)",vr:"IS",name:"ReferencedPatientSetupNumber",vm:"1",version:"DICOM"},"(300C,0080)":{tag:"(300C,0080)",vr:"SQ",name:"ReferencedDoseSequence",vm:"1",version:"DICOM"},"(300C,00A0)":{tag:"(300C,00A0)",vr:"IS",name:"ReferencedToleranceTableNumber",vm:"1",version:"DICOM"},"(300C,00B0)":{tag:"(300C,00B0)",vr:"SQ",name:"ReferencedBolusSequence",vm:"1",version:"DICOM"},"(300C,00C0)":{tag:"(300C,00C0)",vr:"IS",name:"ReferencedWedgeNumber",vm:"1",version:"DICOM"},"(300C,00D0)":{tag:"(300C,00D0)",vr:"IS",name:"ReferencedCompensatorNumber",vm:"1",version:"DICOM"},"(300C,00E0)":{tag:"(300C,00E0)",vr:"IS",name:"ReferencedBlockNumber",vm:"1",version:"DICOM"},"(300C,00F0)":{tag:"(300C,00F0)",vr:"IS",name:"ReferencedControlPointIndex",vm:"1",version:"DICOM"},"(300C,00F2)":{tag:"(300C,00F2)",vr:"SQ",name:"ReferencedControlPointSequence",vm:"1",version:"DICOM"},"(300C,00F4)":{tag:"(300C,00F4)",vr:"IS",name:"ReferencedStartControlPointIndex",vm:"1",version:"DICOM"},"(300C,00F6)":{tag:"(300C,00F6)",vr:"IS",name:"ReferencedStopControlPointIndex",vm:"1",version:"DICOM"},"(300C,0100)":{tag:"(300C,0100)",vr:"IS",name:"ReferencedRangeShifterNumber",vm:"1",version:"DICOM"},"(300C,0102)":{tag:"(300C,0102)",vr:"IS",name:"ReferencedLateralSpreadingDeviceNumber",vm:"1",version:"DICOM"},"(300C,0104)":{tag:"(300C,0104)",vr:"IS",name:"ReferencedRangeModulatorNumber",vm:"1",version:"DICOM"},"(300C,0111)":{tag:"(300C,0111)",vr:"SQ",name:"OmittedBeamTaskSequence",vm:"1",version:"DICOM"},"(300C,0112)":{tag:"(300C,0112)",vr:"CS",name:"ReasonForOmission",vm:"1",version:"DICOM"},"(300C,0113)":{tag:"(300C,0113)",vr:"LO",name:"ReasonForOmissionDescription",vm:"1",version:"DICOM"},"(300E,0002)":{tag:"(300E,0002)",vr:"CS",name:"ApprovalStatus",vm:"1",version:"DICOM"},"(300E,0004)":{tag:"(300E,0004)",vr:"DA",name:"ReviewDate",vm:"1",version:"DICOM"},"(300E,0005)":{tag:"(300E,0005)",vr:"TM",name:"ReviewTime",vm:"1",version:"DICOM"},"(300E,0008)":{tag:"(300E,0008)",vr:"PN",name:"ReviewerName",vm:"1",version:"DICOM"},"(4010,0001)":{tag:"(4010,0001)",vr:"CS",name:"LowEnergyDetectors",vm:"1",version:"DICOM/DICOS"},"(4010,0002)":{tag:"(4010,0002)",vr:"CS",name:"HighEnergyDetectors",vm:"1",version:"DICOM/DICOS"},"(4010,0004)":{tag:"(4010,0004)",vr:"SQ",name:"DetectorGeometrySequence",vm:"1",version:"DICOM/DICOS"},"(4010,1001)":{tag:"(4010,1001)",vr:"SQ",name:"ThreatROIVoxelSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1004)":{tag:"(4010,1004)",vr:"FL",name:"ThreatROIBase",vm:"3",version:"DICOM/DICOS"},"(4010,1005)":{tag:"(4010,1005)",vr:"FL",name:"ThreatROIExtents",vm:"3",version:"DICOM/DICOS"},"(4010,1006)":{tag:"(4010,1006)",vr:"OB",name:"ThreatROIBitmap",vm:"1",version:"DICOM/DICOS"},"(4010,1007)":{tag:"(4010,1007)",vr:"SH",name:"RouteSegmentID",vm:"1",version:"DICOM/DICOS"},"(4010,1008)":{tag:"(4010,1008)",vr:"CS",name:"GantryType",vm:"1",version:"DICOM/DICOS"},"(4010,1009)":{tag:"(4010,1009)",vr:"CS",name:"OOIOwnerType",vm:"1",version:"DICOM/DICOS"},"(4010,100A)":{tag:"(4010,100A)",vr:"SQ",name:"RouteSegmentSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1010)":{tag:"(4010,1010)",vr:"US",name:"PotentialThreatObjectID",vm:"1",version:"DICOM/DICOS"},"(4010,1011)":{tag:"(4010,1011)",vr:"SQ",name:"ThreatSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1012)":{tag:"(4010,1012)",vr:"CS",name:"ThreatCategory",vm:"1",version:"DICOM/DICOS"},"(4010,1013)":{tag:"(4010,1013)",vr:"LT",name:"ThreatCategoryDescription",vm:"1",version:"DICOM/DICOS"},"(4010,1014)":{tag:"(4010,1014)",vr:"CS",name:"ATDAbilityAssessment",vm:"1",version:"DICOM/DICOS"},"(4010,1015)":{tag:"(4010,1015)",vr:"CS",name:"ATDAssessmentFlag",vm:"1",version:"DICOM/DICOS"},"(4010,1016)":{tag:"(4010,1016)",vr:"FL",name:"ATDAssessmentProbability",vm:"1",version:"DICOM/DICOS"},"(4010,1017)":{tag:"(4010,1017)",vr:"FL",name:"Mass",vm:"1",version:"DICOM/DICOS"},"(4010,1018)":{tag:"(4010,1018)",vr:"FL",name:"Density",vm:"1",version:"DICOM/DICOS"},"(4010,1019)":{tag:"(4010,1019)",vr:"FL",name:"ZEffective",vm:"1",version:"DICOM/DICOS"},"(4010,101A)":{tag:"(4010,101A)",vr:"SH",name:"BoardingPassID",vm:"1",version:"DICOM/DICOS"},"(4010,101B)":{tag:"(4010,101B)",vr:"FL",name:"CenterOfMass",vm:"3",version:"DICOM/DICOS"},"(4010,101C)":{tag:"(4010,101C)",vr:"FL",name:"CenterOfPTO",vm:"3",version:"DICOM/DICOS"},"(4010,101D)":{tag:"(4010,101D)",vr:"FL",name:"BoundingPolygon",vm:"6-n",version:"DICOM/DICOS"},"(4010,101E)":{tag:"(4010,101E)",vr:"SH",name:"RouteSegmentStartLocationID",vm:"1",version:"DICOM/DICOS"},"(4010,101F)":{tag:"(4010,101F)",vr:"SH",name:"RouteSegmentEndLocationID",vm:"1",version:"DICOM/DICOS"},"(4010,1020)":{tag:"(4010,1020)",vr:"CS",name:"RouteSegmentLocationIDType",vm:"1",version:"DICOM/DICOS"},"(4010,1021)":{tag:"(4010,1021)",vr:"CS",name:"AbortReason",vm:"1-n",version:"DICOM/DICOS"},"(4010,1023)":{tag:"(4010,1023)",vr:"FL",name:"VolumeOfPTO",vm:"1",version:"DICOM/DICOS"},"(4010,1024)":{tag:"(4010,1024)",vr:"CS",name:"AbortFlag",vm:"1",version:"DICOM/DICOS"},"(4010,1025)":{tag:"(4010,1025)",vr:"DT",name:"RouteSegmentStartTime",vm:"1",version:"DICOM/DICOS"},"(4010,1026)":{tag:"(4010,1026)",vr:"DT",name:"RouteSegmentEndTime",vm:"1",version:"DICOM/DICOS"},"(4010,1027)":{tag:"(4010,1027)",vr:"CS",name:"TDRType",vm:"1",version:"DICOM/DICOS"},"(4010,1028)":{tag:"(4010,1028)",vr:"CS",name:"InternationalRouteSegment",vm:"1",version:"DICOM/DICOS"},"(4010,1029)":{tag:"(4010,1029)",vr:"LO",name:"ThreatDetectionAlgorithmandVersion",vm:"1-n",version:"DICOM/DICOS"},"(4010,102A)":{tag:"(4010,102A)",vr:"SH",name:"AssignedLocation",vm:"1",version:"DICOM/DICOS"},"(4010,102B)":{tag:"(4010,102B)",vr:"DT",name:"AlarmDecisionTime",vm:"1",version:"DICOM/DICOS"},"(4010,1031)":{tag:"(4010,1031)",vr:"CS",name:"AlarmDecision",vm:"1",version:"DICOM/DICOS"},"(4010,1033)":{tag:"(4010,1033)",vr:"US",name:"NumberOfTotalObjects",vm:"1",version:"DICOM/DICOS"},"(4010,1034)":{tag:"(4010,1034)",vr:"US",name:"NumberOfAlarmObjects",vm:"1",version:"DICOM/DICOS"},"(4010,1037)":{tag:"(4010,1037)",vr:"SQ",name:"PTORepresentationSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1038)":{tag:"(4010,1038)",vr:"SQ",name:"ATDAssessmentSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1039)":{tag:"(4010,1039)",vr:"CS",name:"TIPType",vm:"1",version:"DICOM/DICOS"},"(4010,103A)":{tag:"(4010,103A)",vr:"CS",name:"DICOSVersion",vm:"1",version:"DICOM/DICOS"},"(4010,1041)":{tag:"(4010,1041)",vr:"DT",name:"OOIOwnerCreationTime",vm:"1",version:"DICOM/DICOS"},"(4010,1042)":{tag:"(4010,1042)",vr:"CS",name:"OOIType",vm:"1",version:"DICOM/DICOS"},"(4010,1043)":{tag:"(4010,1043)",vr:"FL",name:"OOISize",vm:"3",version:"DICOM/DICOS"},"(4010,1044)":{tag:"(4010,1044)",vr:"CS",name:"AcquisitionStatus",vm:"1",version:"DICOM/DICOS"},"(4010,1045)":{tag:"(4010,1045)",vr:"SQ",name:"BasisMaterialsCodeSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1046)":{tag:"(4010,1046)",vr:"CS",name:"PhantomType",vm:"1",version:"DICOM/DICOS"},"(4010,1047)":{tag:"(4010,1047)",vr:"SQ",name:"OOIOwnerSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1048)":{tag:"(4010,1048)",vr:"CS",name:"ScanType",vm:"1",version:"DICOM/DICOS"},"(4010,1051)":{tag:"(4010,1051)",vr:"LO",name:"ItineraryID",vm:"1",version:"DICOM/DICOS"},"(4010,1052)":{tag:"(4010,1052)",vr:"SH",name:"ItineraryIDType",vm:"1",version:"DICOM/DICOS"},"(4010,1053)":{tag:"(4010,1053)",vr:"LO",name:"ItineraryIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1054)":{tag:"(4010,1054)",vr:"SH",name:"RouteID",vm:"1",version:"DICOM/DICOS"},"(4010,1055)":{tag:"(4010,1055)",vr:"SH",name:"RouteIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1056)":{tag:"(4010,1056)",vr:"CS",name:"InboundArrivalType",vm:"1",version:"DICOM/DICOS"},"(4010,1058)":{tag:"(4010,1058)",vr:"SH",name:"CarrierID",vm:"1",version:"DICOM/DICOS"},"(4010,1059)":{tag:"(4010,1059)",vr:"CS",name:"CarrierIDAssigningAuthority",vm:"1",version:"DICOM/DICOS"},"(4010,1060)":{tag:"(4010,1060)",vr:"FL",name:"SourceOrientation",vm:"3",version:"DICOM/DICOS"},"(4010,1061)":{tag:"(4010,1061)",vr:"FL",name:"SourcePosition",vm:"3",version:"DICOM/DICOS"},"(4010,1062)":{tag:"(4010,1062)",vr:"FL",name:"BeltHeight",vm:"1",version:"DICOM/DICOS"},"(4010,1064)":{tag:"(4010,1064)",vr:"SQ",name:"AlgorithmRoutingCodeSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1067)":{tag:"(4010,1067)",vr:"CS",name:"TransportClassification",vm:"1",version:"DICOM/DICOS"},"(4010,1068)":{tag:"(4010,1068)",vr:"LT",name:"OOITypeDescriptor",vm:"1",version:"DICOM/DICOS"},"(4010,1069)":{tag:"(4010,1069)",vr:"FL",name:"TotalProcessingTime",vm:"1",version:"DICOM/DICOS"},"(4010,106C)":{tag:"(4010,106C)",vr:"OB",name:"DetectorCalibrationData",vm:"1",version:"DICOM/DICOS"},"(4010,106D)":{tag:"(4010,106D)",vr:"CS",name:"AdditionalScreeningPerformed",vm:"1",version:"DICOM/DICOS"},"(4010,106E)":{tag:"(4010,106E)",vr:"CS",name:"AdditionalInspectionSelectionCriteria",vm:"1",version:"DICOM/DICOS"},"(4010,106F)":{tag:"(4010,106F)",vr:"SQ",name:"AdditionalInspectionMethodSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1070)":{tag:"(4010,1070)",vr:"CS",name:"AITDeviceType",vm:"1",version:"DICOM/DICOS"},"(4010,1071)":{tag:"(4010,1071)",vr:"SQ",name:"QRMeasurementsSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1072)":{tag:"(4010,1072)",vr:"SQ",name:"TargetMaterialSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1073)":{tag:"(4010,1073)",vr:"FD",name:"SNRThreshold",vm:"1",version:"DICOM/DICOS"},"(4010,1075)":{tag:"(4010,1075)",vr:"DS",name:"ImageScaleRepresentation",vm:"1",version:"DICOM/DICOS"},"(4010,1076)":{tag:"(4010,1076)",vr:"SQ",name:"ReferencedPTOSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1077)":{tag:"(4010,1077)",vr:"SQ",name:"ReferencedTDRInstanceSequence",vm:"1",version:"DICOM/DICOS"},"(4010,1078)":{tag:"(4010,1078)",vr:"ST",name:"PTOLocationDescription",vm:"1",version:"DICOM/DICOS"},"(4010,1079)":{tag:"(4010,1079)",vr:"SQ",name:"AnomalyLocatorIndicatorSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107A)":{tag:"(4010,107A)",vr:"FL",name:"AnomalyLocatorIndicator",vm:"3",version:"DICOM/DICOS"},"(4010,107B)":{tag:"(4010,107B)",vr:"SQ",name:"PTORegionSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107C)":{tag:"(4010,107C)",vr:"CS",name:"InspectionSelectionCriteria",vm:"1",version:"DICOM/DICOS"},"(4010,107D)":{tag:"(4010,107D)",vr:"SQ",name:"SecondaryInspectionMethodSequence",vm:"1",version:"DICOM/DICOS"},"(4010,107E)":{tag:"(4010,107E)",vr:"DS",name:"PRCSToRCSOrientation",vm:"6",version:"DICOM/DICOS"},"(3010,0001)":{tag:"(3010,0001)",vr:"SQ",name:"RadiobiologicalDoseEffectSequence",vm:"1",version:"DICOM"},"(3010,0002)":{tag:"(3010,0002)",vr:"CS",name:"RadiobiologicalDoseEffectFlag",vm:"1",version:"DICOM"},"(3010,0003)":{tag:"(3010,0003)",vr:"SQ",name:"EffectiveDoseCalculationMethodCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0004)":{tag:"(3010,0004)",vr:"SQ",name:"EffectiveDoseCalculationMethodCodeSequence",vm:"1",version:"DICOM"},"(3010,0005)":{tag:"(3010,0005)",vr:"LO",name:"EffectiveDoseCalculationMethodDescription",vm:"1",version:"DICOM"},"(3010,0006)":{tag:"(3010,0006)",vr:"UI",name:"ConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0007)":{tag:"(3010,0007)",vr:"SQ",name:"OriginatingSOPInstanceReferenceSequence",vm:"1",version:"DICOM"},"(3010,0008)":{tag:"(3010,0008)",vr:"SQ",name:"ConceptualVolumeConstituentSequence",vm:"1",version:"DICOM"},"(3010,0009)":{tag:"(3010,0009)",vr:"SQ",name:"EquivalentConceptualVolumeInstanceReferenceSequence",vm:"1",version:"DICOM"},"(3010,000A)":{tag:"(3010,000A)",vr:"SQ",name:"EquivalentConceptualVolumesSequence",vm:"1",version:"DICOM"},"(3010,000B)":{tag:"(3010,000B)",vr:"UI",name:"ReferencedConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,000C)":{tag:"(3010,000C)",vr:"UT",name:"ConceptualVolumeCombinationExpression",vm:"1",version:"DICOM"},"(3010,000D)":{tag:"(3010,000D)",vr:"US",name:"ConceptualVolumeConstituentIndex",vm:"1",version:"DICOM"},"(3010,000E)":{tag:"(3010,000E)",vr:"CS",name:"ConceptualVolumeCombinationFlag",vm:"1",version:"DICOM"},"(3010,000F)":{tag:"(3010,000F)",vr:"ST",name:"ConceptualVolumeCombinationDescription",vm:"1",version:"DICOM"},"(3010,0010)":{tag:"(3010,0010)",vr:"CS",name:"ConceptualVolumeSegmentationDefinedFlag",vm:"1",version:"DICOM"},"(3010,0011)":{tag:"(3010,0011)",vr:"SQ",name:"ConceptualVolumeSegmentationReferenceSequence",vm:"1",version:"DICOM"},"(3010,0012)":{tag:"(3010,0012)",vr:"SQ",name:"ConceptualVolumeConstituentSegmentationReferenceSequence",vm:"1",version:"DICOM"},"(3010,0013)":{tag:"(3010,0013)",vr:"UI",name:"ConstituentConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0014)":{tag:"(3010,0014)",vr:"SQ",name:"DerivationConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0015)":{tag:"(3010,0015)",vr:"UI",name:"SourceConceptualVolumeUID",vm:"1",version:"DICOM"},"(3010,0016)":{tag:"(3010,0016)",vr:"SQ",name:"ConceptualVolumeDerivationAlgorithmSequence",vm:"1",version:"DICOM"},"(3010,0017)":{tag:"(3010,0017)",vr:"ST",name:"ConceptualVolumeDescription",vm:"1",version:"DICOM"},"(3010,0018)":{tag:"(3010,0018)",vr:"SQ",name:"SourceConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0019)":{tag:"(3010,0019)",vr:"SQ",name:"AuthorIdentificationSequence",vm:"1",version:"DICOM"},"(3010,001A)":{tag:"(3010,001A)",vr:"LO",name:"ManufacturerModelVersion",vm:"1",version:"DICOM"},"(3010,001B)":{tag:"(3010,001B)",vr:"UC",name:"DeviceAlternateIdentifier",vm:"1",version:"DICOM"},"(3010,001C)":{tag:"(3010,001C)",vr:"CS",name:"DeviceAlternateIdentifierType",vm:"1",version:"DICOM"},"(3010,001D)":{tag:"(3010,001D)",vr:"LT",name:"DeviceAlternateIdentifierFormat",vm:"1",version:"DICOM"},"(3010,001E)":{tag:"(3010,001E)",vr:"LO",name:"SegmentationCreationTemplateLabel",vm:"1",version:"DICOM"},"(3010,001F)":{tag:"(3010,001F)",vr:"UI",name:"SegmentationTemplateUID",vm:"1",version:"DICOM"},"(3010,0020)":{tag:"(3010,0020)",vr:"US",name:"ReferencedSegmentReferenceIndex",vm:"1",version:"DICOM"},"(3010,0021)":{tag:"(3010,0021)",vr:"SQ",name:"SegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0022)":{tag:"(3010,0022)",vr:"US",name:"SegmentReferenceIndex",vm:"1",version:"DICOM"},"(3010,0023)":{tag:"(3010,0023)",vr:"SQ",name:"DirectSegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0024)":{tag:"(3010,0024)",vr:"SQ",name:"CombinationSegmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0025)":{tag:"(3010,0025)",vr:"SQ",name:"ConceptualVolumeSequence",vm:"1",version:"DICOM"},"(3010,0026)":{tag:"(3010,0026)",vr:"SQ",name:"SegmentedRTAccessoryDeviceSequence",vm:"1",version:"DICOM"},"(3010,0027)":{tag:"(3010,0027)",vr:"SQ",name:"SegmentCharacteristicsSequence",vm:"1",version:"DICOM"},"(3010,0028)":{tag:"(3010,0028)",vr:"SQ",name:"RelatedSegmentCharacteristicsSequence",vm:"1",version:"DICOM"},"(3010,0029)":{tag:"(3010,0029)",vr:"US",name:"SegmentCharacteristicsPrecedence",vm:"1",version:"DICOM"},"(3010,002A)":{tag:"(3010,002A)",vr:"SQ",name:"RTSegmentAnnotationSequence",vm:"1",version:"DICOM"},"(3010,002B)":{tag:"(3010,002B)",vr:"SQ",name:"SegmentAnnotationCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,002C)":{tag:"(3010,002C)",vr:"SQ",name:"SegmentAnnotationTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,002D)":{tag:"(3010,002D)",vr:"LO",name:"DeviceLabel",vm:"1",version:"DICOM"},"(3010,002E)":{tag:"(3010,002E)",vr:"SQ",name:"DeviceTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,002F)":{tag:"(3010,002F)",vr:"SQ",name:"SegmentAnnotationTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,0030)":{tag:"(3010,0030)",vr:"SQ",name:"PatientEquipmentRelationshipCodeSequence",vm:"1",version:"DICOM"},"(3010,0031)":{tag:"(3010,0031)",vr:"UI",name:"ReferencedFiducialsUID",vm:"1",version:"DICOM"},"(3010,0032)":{tag:"(3010,0032)",vr:"SQ",name:"PatientTreatmentOrientationSequence",vm:"1",version:"DICOM"},"(3010,0033)":{tag:"(3010,0033)",vr:"SH",name:"UserContentLabel",vm:"1",version:"DICOM"},"(3010,0034)":{tag:"(3010,0034)",vr:"LO",name:"UserContentLongLabel",vm:"1",version:"DICOM"},"(3010,0035)":{tag:"(3010,0035)",vr:"SH",name:"EntityLabel",vm:"1",version:"DICOM"},"(3010,0036)":{tag:"(3010,0036)",vr:"LO",name:"EntityName",vm:"1",version:"DICOM"},"(3010,0037)":{tag:"(3010,0037)",vr:"ST",name:"EntityDescription",vm:"1",version:"DICOM"},"(3010,0038)":{tag:"(3010,0038)",vr:"LO",name:"EntityLongLabel",vm:"1",version:"DICOM"},"(3010,0039)":{tag:"(3010,0039)",vr:"US",name:"DeviceIndex",vm:"1",version:"DICOM"},"(3010,003A)":{tag:"(3010,003A)",vr:"US",name:"RTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,003B)":{tag:"(3010,003B)",vr:"UI",name:"RTTreatmentPhaseUID",vm:"1",version:"DICOM"},"(3010,003C)":{tag:"(3010,003C)",vr:"US",name:"RTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,003D)":{tag:"(3010,003D)",vr:"US",name:"RTSegmentAnnotationIndex",vm:"1",version:"DICOM"},"(3010,003E)":{tag:"(3010,003E)",vr:"US",name:"BasisRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,003F)":{tag:"(3010,003F)",vr:"US",name:"RelatedRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,0040)":{tag:"(3010,0040)",vr:"US",name:"ReferencedRTTreatmentPhaseIndex",vm:"1",version:"DICOM"},"(3010,0041)":{tag:"(3010,0041)",vr:"US",name:"ReferencedRTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,0042)":{tag:"(3010,0042)",vr:"US",name:"ReferencedParentRTPrescriptionIndex",vm:"1",version:"DICOM"},"(3010,0043)":{tag:"(3010,0043)",vr:"ST",name:"ManufacturerDeviceIdentifier",vm:"1",version:"DICOM"},"(3010,0044)":{tag:"(3010,0044)",vr:"SQ",name:"InstanceLevelReferencedPerformedProcedureStepSequence",vm:"1",version:"DICOM"},"(3010,0045)":{tag:"(3010,0045)",vr:"CS",name:"RTTreatmentPhaseIntentPresenceFlag",vm:"1",version:"DICOM"},"(3010,0046)":{tag:"(3010,0046)",vr:"CS",name:"RadiotherapyTreatmentType",vm:"1",version:"DICOM"},"(3010,0047)":{tag:"(3010,0047)",vr:"CS",name:"TeletherapyRadiationType",vm:"1-n",version:"DICOM"},"(3010,0048)":{tag:"(3010,0048)",vr:"CS",name:"BrachytherapySourceType",vm:"1-n",version:"DICOM"},"(3010,0049)":{tag:"(3010,0049)",vr:"SQ",name:"ReferencedRTTreatmentPhaseSequence",vm:"1",version:"DICOM"},"(3010,004A)":{tag:"(3010,004A)",vr:"SQ",name:"ReferencedDirectSegmentInstanceSequence",vm:"1",version:"DICOM"},"(3010,004B)":{tag:"(3010,004B)",vr:"SQ",name:"IntendedRTTreatmentPhaseSequence",vm:"1",version:"DICOM"},"(3010,004C)":{tag:"(3010,004C)",vr:"DA",name:"IntendedPhaseStartDate",vm:"1",version:"DICOM"},"(3010,004D)":{tag:"(3010,004D)",vr:"DA",name:"IntendedPhaseEndDate",vm:"1",version:"DICOM"},"(3010,004E)":{tag:"(3010,004E)",vr:"SQ",name:"RTTreatmentPhaseIntervalSequence",vm:"1",version:"DICOM"},"(3010,004F)":{tag:"(3010,004F)",vr:"CS",name:"TemporalRelationshipIntervalAnchor",vm:"1",version:"DICOM"},"(3010,0050)":{tag:"(3010,0050)",vr:"FD",name:"MinimumNumberOfIntervalDays",vm:"1",version:"DICOM"},"(3010,0051)":{tag:"(3010,0051)",vr:"FD",name:"MaximumNumberOfIntervalDays",vm:"1",version:"DICOM"},"(3010,0052)":{tag:"(3010,0052)",vr:"UI",name:"PertinentSOPClassesInStudy",vm:"1-n",version:"DICOM"},"(3010,0053)":{tag:"(3010,0053)",vr:"UI",name:"PertinentSOPClassesInSeries",vm:"1-n",version:"DICOM"},"(3010,0054)":{tag:"(3010,0054)",vr:"LO",name:"RTPrescriptionLabel",vm:"1",version:"DICOM"},"(3010,0055)":{tag:"(3010,0055)",vr:"SQ",name:"RTPhysicianIntentPredecessorSequence",vm:"1",version:"DICOM"},"(3010,0056)":{tag:"(3010,0056)",vr:"LO",name:"RTTreatmentApproachLabel",vm:"1",version:"DICOM"},"(3010,0057)":{tag:"(3010,0057)",vr:"SQ",name:"RTPhysicianIntentSequence",vm:"1",version:"DICOM"},"(3010,0058)":{tag:"(3010,0058)",vr:"US",name:"RTPhysicianIntentIndex",vm:"1",version:"DICOM"},"(3010,0059)":{tag:"(3010,0059)",vr:"CS",name:"RTTreatmentIntentType",vm:"1",version:"DICOM"},"(3010,005A)":{tag:"(3010,005A)",vr:"UT",name:"RTPhysicianIntentNarrative",vm:"1",version:"DICOM"},"(3010,005B)":{tag:"(3010,005B)",vr:"SQ",name:"RTProtocolCodeSequence",vm:"1",version:"DICOM"},"(3010,005C)":{tag:"(3010,005C)",vr:"ST",name:"ReasonForSuperseding",vm:"1",version:"DICOM"},"(3010,005D)":{tag:"(3010,005D)",vr:"SQ",name:"RTDiagnosisCodeSequence",vm:"1",version:"DICOM"},"(3010,005E)":{tag:"(3010,005E)",vr:"US",name:"ReferencedRTPhysicianIntentIndex",vm:"1",version:"DICOM"},"(3010,005F)":{tag:"(3010,005F)",vr:"SQ",name:"RTPhysicianIntentInputInstanceSequence",vm:"1",version:"DICOM"},"(3010,0060)":{tag:"(3010,0060)",vr:"SQ",name:"RTAnatomicPrescriptionSequence",vm:"1",version:"DICOM"},"(3010,0061)":{tag:"(3010,0061)",vr:"UT",name:"PriorTreatmentDoseDescription",vm:"1",version:"DICOM"},"(3010,0062)":{tag:"(3010,0062)",vr:"SQ",name:"PriorTreatmentReferenceSequence",vm:"1",version:"DICOM"},"(3010,0063)":{tag:"(3010,0063)",vr:"CS",name:"DosimetricObjectiveEvaluationScope",vm:"1",version:"DICOM"},"(3010,0064)":{tag:"(3010,0064)",vr:"SQ",name:"TherapeuticRoleCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0065)":{tag:"(3010,0065)",vr:"SQ",name:"TherapeuticRoleTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,0066)":{tag:"(3010,0066)",vr:"US",name:"ConceptualVolumeOptimizationPrecedence",vm:"1",version:"DICOM"},"(3010,0067)":{tag:"(3010,0067)",vr:"SQ",name:"ConceptualVolumeCategoryCodeSequence",vm:"1",version:"DICOM"},"(3010,0068)":{tag:"(3010,0068)",vr:"CS",name:"ConceptualVolumeBlockingConstraint",vm:"1",version:"DICOM"},"(3010,0069)":{tag:"(3010,0069)",vr:"SQ",name:"ConceptualVolumeTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,006A)":{tag:"(3010,006A)",vr:"SQ",name:"ConceptualVolumeTypeModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,006B)":{tag:"(3010,006B)",vr:"SQ",name:"RTPrescriptionSequence",vm:"1",version:"DICOM"},"(3010,006C)":{tag:"(3010,006C)",vr:"SQ",name:"DosimetricObjectiveSequence",vm:"1",version:"DICOM"},"(3010,006D)":{tag:"(3010,006D)",vr:"SQ",name:"DosimetricObjectiveTypeCodeSequence",vm:"1",version:"DICOM"},"(3010,006E)":{tag:"(3010,006E)",vr:"UI",name:"DosimetricObjectiveUID",vm:"1",version:"DICOM"},"(3010,006F)":{tag:"(3010,006F)",vr:"UI",name:"ReferencedDosimetricObjectiveUID",vm:"1",version:"DICOM"},"(3010,0070)":{tag:"(3010,0070)",vr:"SQ",name:"DosimetricObjectiveParameterSequence",vm:"1",version:"DICOM"},"(3010,0071)":{tag:"(3010,0071)",vr:"SQ",name:"ReferencedDosimetricObjectivesSequence",vm:"1",version:"DICOM"},"(3010,0073)":{tag:"(3010,0073)",vr:"CS",name:"AbsoluteDosimetricObjectiveFlag",vm:"1",version:"DICOM"},"(3010,0074)":{tag:"(3010,0074)",vr:"FD",name:"DosimetricObjectiveWeight",vm:"1",version:"DICOM"},"(3010,0075)":{tag:"(3010,0075)",vr:"CS",name:"DosimetricObjectivePurpose",vm:"1",version:"DICOM"},"(3010,0076)":{tag:"(3010,0076)",vr:"SQ",name:"PlanningInputInformationSequence",vm:"1",version:"DICOM"},"(3010,0077)":{tag:"(3010,0077)",vr:"LO",name:"TreatmentSite",vm:"1",version:"DICOM"},"(3010,0078)":{tag:"(3010,0078)",vr:"SQ",name:"TreatmentSiteCodeSequence",vm:"1",version:"DICOM"},"(3010,0079)":{tag:"(3010,0079)",vr:"SQ",name:"FractionPatternSequence",vm:"1",version:"DICOM"},"(3010,007A)":{tag:"(3010,007A)",vr:"UT",name:"TreatmentTechniqueNotes",vm:"1",version:"DICOM"},"(3010,007B)":{tag:"(3010,007B)",vr:"UT",name:"PrescriptionNotes",vm:"1",version:"DICOM"},"(3010,007C)":{tag:"(3010,007C)",vr:"IS",name:"NumberOfIntervalFractions",vm:"1",version:"DICOM"},"(3010,007D)":{tag:"(3010,007D)",vr:"US",name:"NumberOfFractions",vm:"1",version:"DICOM"},"(3010,007E)":{tag:"(3010,007E)",vr:"US",name:"IntendedDeliveryDuration",vm:"1",version:"DICOM"},"(3010,007F)":{tag:"(3010,007F)",vr:"UT",name:"FractionationNotes",vm:"1",version:"DICOM"},"(3010,0080)":{tag:"(3010,0080)",vr:"SQ",name:"RTTreatmentTechniqueCodeSequence",vm:"1",version:"DICOM"},"(3010,0081)":{tag:"(3010,0081)",vr:"SQ",name:"PrescriptionNotesSequence",vm:"1",version:"DICOM"},"(3010,0082)":{tag:"(3010,0082)",vr:"SQ",name:"FractionBasedRelationshipSequence",vm:"1",version:"DICOM"},"(3010,0083)":{tag:"(3010,0083)",vr:"CS",name:"FractionBasedRelationshipIntervalAnchor",vm:"1",version:"DICOM"},"(3010,0084)":{tag:"(3010,0084)",vr:"FD",name:"MinimumHoursBetweenFractions",vm:"1",version:"DICOM"},"(3010,0085)":{tag:"(3010,0085)",vr:"TM",name:"IntendedFractionStartTime",vm:"1-n",version:"DICOM"},"(3010,0086)":{tag:"(3010,0086)",vr:"LT",name:"IntendedStartDayOfWeek",vm:"1",version:"DICOM"},"(3010,0087)":{tag:"(3010,0087)",vr:"SQ",name:"WeekdayFractionPatternSequence",vm:"1",version:"DICOM"},"(3010,0088)":{tag:"(3010,0088)",vr:"SQ",name:"DeliveryTimeStructureCodeSequence",vm:"1",version:"DICOM"},"(3010,0089)":{tag:"(3010,0089)",vr:"SQ",name:"TreatmentSiteModifierCodeSequence",vm:"1",version:"DICOM"},"(3010,0090)":{tag:"(3010,0090)",vr:"CS",name:"RoboticBaseLocationIndicator",vm:"1",version:"DICOM"},"(3010,0091)":{tag:"(3010,0091)",vr:"SQ",name:"RoboticPathNodeSetCodeSequence",vm:"1",version:"DICOM"},"(3010,0092)":{tag:"(3010,0092)",vr:"UL",name:"RoboticNodeIdentifier",vm:"1",version:"DICOM"},"(3010,0093)":{tag:"(3010,0093)",vr:"FD",name:"RTTreatmentSourceCoordinates",vm:"3",version:"DICOM"},"(3010,0094)":{tag:"(3010,0094)",vr:"FD",name:"RadiationSourceCoordinateSystemYawAngle",vm:"1",version:"DICOM"},"(3010,0095)":{tag:"(3010,0095)",vr:"FD",name:"RadiationSourceCoordinateSystemRollAngle",vm:"1",version:"DICOM"},"(3010,0096)":{tag:"(3010,0096)",vr:"FD",name:"RadiationSourceCoordinateSystemPitchAngle",vm:"1",version:"DICOM"},"(3010,0097)":{tag:"(3010,0097)",vr:"SQ",name:"RoboticPathControlPointSequence",vm:"1",version:"DICOM"},"(3010,0098)":{tag:"(3010,0098)",vr:"SQ",name:"TomotherapeuticControlPointSequence",vm:"1",version:"DICOM"},"(3010,0099)":{tag:"(3010,0099)",vr:"FD",name:"TomotherapeuticLeafOpenDurations",vm:"1-n",version:"DICOM"},"(3010,009A)":{tag:"(3010,009A)",vr:"FD",name:"TomotherapeuticLeafInitialClosedDurations",vm:"1-n",version:"DICOM"},"(4FFE,0001)":{tag:"(4FFE,0001)",vr:"SQ",name:"MACParametersSequence",vm:"1",version:"DICOM"},"(5200,9229)":{tag:"(5200,9229)",vr:"SQ",name:"SharedFunctionalGroupsSequence",vm:"1",version:"DICOM"},"(5200,9230)":{tag:"(5200,9230)",vr:"SQ",name:"PerFrameFunctionalGroupsSequence",vm:"1",version:"DICOM"},"(5400,0100)":{tag:"(5400,0100)",vr:"SQ",name:"WaveformSequence",vm:"1",version:"DICOM"},"(5400,0110)":{tag:"(5400,0110)",vr:"ox",name:"ChannelMinimumValue",vm:"1",version:"DICOM"},"(5400,0112)":{tag:"(5400,0112)",vr:"ox",name:"ChannelMaximumValue",vm:"1",version:"DICOM"},"(5400,1004)":{tag:"(5400,1004)",vr:"US",name:"WaveformBitsAllocated",vm:"1",version:"DICOM"},"(5400,1006)":{tag:"(5400,1006)",vr:"CS",name:"WaveformSampleInterpretation",vm:"1",version:"DICOM"},"(5400,100A)":{tag:"(5400,100A)",vr:"ox",name:"WaveformPaddingValue",vm:"1",version:"DICOM"},"(5400,1010)":{tag:"(5400,1010)",vr:"ox",name:"WaveformData",vm:"1",version:"DICOM"},"(5600,0010)":{tag:"(5600,0010)",vr:"OF",name:"FirstOrderPhaseCorrectionAngle",vm:"1",version:"DICOM"},"(5600,0020)":{tag:"(5600,0020)",vr:"OF",name:"SpectroscopyData",vm:"1",version:"DICOM"},"(6000-60FF,0010)":{tag:"(6000-60FF,0010)",vr:"US",name:"OverlayRows",vm:"1",version:"DICOM"},"(6000-60FF,0011)":{tag:"(6000-60FF,0011)",vr:"US",name:"OverlayColumns",vm:"1",version:"DICOM"},"(6000-60FF,0015)":{tag:"(6000-60FF,0015)",vr:"IS",name:"NumberOfFramesInOverlay",vm:"1",version:"DICOM"},"(6000-60FF,0022)":{tag:"(6000-60FF,0022)",vr:"LO",name:"OverlayDescription",vm:"1",version:"DICOM"},"(6000-60FF,0040)":{tag:"(6000-60FF,0040)",vr:"CS",name:"OverlayType",vm:"1",version:"DICOM"},"(6000-60FF,0045)":{tag:"(6000-60FF,0045)",vr:"LO",name:"OverlaySubtype",vm:"1",version:"DICOM"},"(6000-60FF,0050)":{tag:"(6000-60FF,0050)",vr:"SS",name:"OverlayOrigin",vm:"2",version:"DICOM"},"(6000-60FF,0051)":{tag:"(6000-60FF,0051)",vr:"US",name:"ImageFrameOrigin",vm:"1",version:"DICOM"},"(6000-60FF,0100)":{tag:"(6000-60FF,0100)",vr:"US",name:"OverlayBitsAllocated",vm:"1",version:"DICOM"},"(6000-60FF,0102)":{tag:"(6000-60FF,0102)",vr:"US",name:"OverlayBitPosition",vm:"1",version:"DICOM"},"(6000-60FF,1001)":{tag:"(6000-60FF,1001)",vr:"CS",name:"OverlayActivationLayer",vm:"1",version:"DICOM"},"(6000-60FF,1301)":{tag:"(6000-60FF,1301)",vr:"IS",name:"ROIArea",vm:"1",version:"DICOM"},"(6000-60FF,1302)":{tag:"(6000-60FF,1302)",vr:"DS",name:"ROIMean",vm:"1",version:"DICOM"},"(6000-60FF,1303)":{tag:"(6000-60FF,1303)",vr:"DS",name:"ROIStandardDeviation",vm:"1",version:"DICOM"},"(6000-60FF,1500)":{tag:"(6000-60FF,1500)",vr:"LO",name:"OverlayLabel",vm:"1",version:"DICOM"},"(6000-60FF,3000)":{tag:"(6000-60FF,3000)",vr:"ox",name:"OverlayData",vm:"1",version:"DICOM"},"(7FE0,0001)":{tag:"(7FE0,0001)",vr:"OV",name:"ExtendedOffsetTable",vm:"1",version:"DICOM"},"(7FE0,0002)":{tag:"(7FE0,0002)",vr:"OV",name:"ExtendedOffsetTableLengths",vm:"1",version:"DICOM"},"(7FE0,0008)":{tag:"(7FE0,0008)",vr:"OF",name:"FloatPixelData",vm:"1",version:"DICOM"},"(7FE0,0009)":{tag:"(7FE0,0009)",vr:"OD",name:"DoubleFloatPixelData",vm:"1",version:"DICOM"},"(7FE0,0010)":{tag:"(7FE0,0010)",vr:"ox",name:"PixelData",vm:"1",version:"DICOM"},"(FFFA,FFFA)":{tag:"(FFFA,FFFA)",vr:"SQ",name:"DigitalSignaturesSequence",vm:"1",version:"DICOM"},"(FFFC,FFFC)":{tag:"(FFFC,FFFC)",vr:"OB",name:"DataSetTrailingPadding",vm:"1",version:"DICOM"},"(FFFE,E000)":{tag:"(FFFE,E000)",vr:"na",name:"Item",vm:"1",version:"DICOM"},"(FFFE,E00D)":{tag:"(FFFE,E00D)",vr:"na",name:"ItemDelimitationItem",vm:"1",version:"DICOM"},"(FFFE,E0DD)":{tag:"(FFFE,E0DD)",vr:"na",name:"SequenceDelimitationItem",vm:"1",version:"DICOM"},"(0028,1224)":{tag:"(0028,1224)",vr:"OW",name:"SegmentedAlphaPaletteColorLookupTableData",vm:"1",version:"Supplement_156"},"(0070,1101)":{tag:"(0070,1101)",vr:"UI",name:"PresentationDisplayCollectionUID",vm:"1",version:"Supplement_156"},"(0070,1102)":{tag:"(0070,1102)",vr:"UI",name:"PresentationSequenceCollectionUID",vm:"1",version:"Supplement_156"},"(0070,1103)":{tag:"(0070,1103)",vr:"US",name:"PresentationSequencePositionIndex",vm:"1",version:"Supplement_156"},"(0070,1104)":{tag:"(0070,1104)",vr:"SQ",name:"RenderedImageReferenceSequence",vm:"1",version:"Supplement_156"},"(0070,1201)":{tag:"(0070,1201)",vr:"SQ",name:"VolumetricPresentationStateInputSequence",vm:"1",version:"Supplement_156"},"(0070,1202)":{tag:"(0070,1202)",vr:"CS",name:"PresentationInputType",vm:"1",version:"Supplement_156"},"(0070,1203)":{tag:"(0070,1203)",vr:"US",name:"InputSequencePositionIndex",vm:"1",version:"Supplement_156"},"(0070,1204)":{tag:"(0070,1204)",vr:"CS",name:"Crop",vm:"1",version:"Supplement_156"},"(0070,1205)":{tag:"(0070,1205)",vr:"US",name:"CroppingSpecificationIndex",vm:"1-n",version:"Supplement_156"},"(0070,1206)":{tag:"(0070,1206)",vr:"CS",name:"CompositingMethod",vm:"1",version:"Supplement_156"},"(0070,1207)":{tag:"(0070,1207)",vr:"US",name:"VolumetricPresentationInputNumber",vm:"1",version:"Supplement_156"},"(0070,1208)":{tag:"(0070,1208)",vr:"CS",name:"ImageVolumeGeometry",vm:"1",version:"Supplement_156"},"(0070,1301)":{tag:"(0070,1301)",vr:"SQ",name:"VolumeCroppingSequence",vm:"1",version:"Supplement_156"},"(0070,1302)":{tag:"(0070,1302)",vr:"CS",name:"VolumeCroppingMethod",vm:"1",version:"Supplement_156"},"(0070,1303)":{tag:"(0070,1303)",vr:"FD",name:"BoundingBoxCrop",vm:"6",version:"Supplement_156"},"(0070,1304)":{tag:"(0070,1304)",vr:"SQ",name:"ObliqueCroppingPlaneSequence",vm:"1",version:"Supplement_156"},"(0070,1305)":{tag:"(0070,1305)",vr:"FD",name:"ObliqueCroppingPlane",vm:"4",version:"Supplement_156"},"(0070,1306)":{tag:"(0070,1306)",vr:"FD",name:"ObliqueCroppingPlaneNormal",vm:"3",version:"Supplement_156"},"(0070,1309)":{tag:"(0070,1309)",vr:"US",name:"CroppingSpecificationNumber",vm:"1",version:"Supplement_156"},"(0070,1501)":{tag:"(0070,1501)",vr:"CS",name:"MultiPlanarReconstructionStyle",vm:"1",version:"Supplement_156"},"(0070,1502)":{tag:"(0070,1502)",vr:"CS",name:"MPRThicknessType",vm:"1",version:"Supplement_156"},"(0070,1503)":{tag:"(0070,1503)",vr:"FD",name:"MPRSlabThickness",vm:"1",version:"Supplement_156"},"(0070,1505)":{tag:"(0070,1505)",vr:"FD",name:"MPRTopLeftHandCorner",vm:"3",version:"Supplement_156"},"(0070,1507)":{tag:"(0070,1507)",vr:"FD",name:"MPRViewWidthDirection",vm:"3",version:"Supplement_156"},"(0070,1508)":{tag:"(0070,1508)",vr:"FD",name:"MPRViewWidth",vm:"1",version:"Supplement_156"},"(0070,150C)":{tag:"(0070,150C)",vr:"FL",name:"NumberOfVolumetricCurvePoints",vm:"1",version:"Supplement_156"},"(0070,150D)":{tag:"(0070,150D)",vr:"OD",name:"VolumetricCurvePoints",vm:"1",version:"Supplement_156"},"(0070,1511)":{tag:"(0070,1511)",vr:"FD",name:"MPRViewHeightDirection",vm:"3",version:"Supplement_156"},"(0070,1512)":{tag:"(0070,1512)",vr:"FD",name:"MPRViewHeight",vm:"1",version:"Supplement_156"},"(0070,1801)":{tag:"(0070,1801)",vr:"SQ",name:"PresentationStateClassificationComponentSequence",vm:"1",version:"Supplement_156"},"(0070,1802)":{tag:"(0070,1802)",vr:"CS",name:"ComponentType",vm:"1",version:"Supplement_156"},"(0070,1803)":{tag:"(0070,1803)",vr:"SQ",name:"ComponentInputSequence",vm:"1",version:"Supplement_156"},"(0070,1804)":{tag:"(0070,1804)",vr:"US",name:"VolumetricPresentationInputIndex",vm:"1",version:"Supplement_156"},"(0070,1805)":{tag:"(0070,1805)",vr:"SQ",name:"PresentationStateCompositorComponentSequence",vm:"1",version:"Supplement_156"},"(0070,1806)":{tag:"(0070,1806)",vr:"SQ",name:"WeightingTransferFunctionSequence",vm:"1",version:"Supplement_156"},"(0070,1807)":{tag:"(0070,1807)",vr:"US",name:"WeightingLookupTableDescriptor",vm:"3",version:"Supplement_156"},"(0070,1808)":{tag:"(0070,1808)",vr:"OB",name:"WeightingLookupTableData",vm:"1",version:"Supplement_156"},"(0070,1901)":{tag:"(0070,1901)",vr:"SQ",name:"VolumetricAnnotationSequence",vm:"1",version:"Supplement_156"},"(0070,1903)":{tag:"(0070,1903)",vr:"SQ",name:"ReferencedStructuredContextSequence",vm:"1",version:"Supplement_156"},"(0070,1904)":{tag:"(0070,1904)",vr:"UI",name:"ReferencedContentItem",vm:"1",version:"Supplement_156"},"(0070,1905)":{tag:"(0070,1905)",vr:"SQ",name:"VolumetricPresentationInputAnnotationSequence",vm:"1",version:"Supplement_156"},"(0070,1907)":{tag:"(0070,1907)",vr:"CS",name:"AnnotationClipping",vm:"1",version:"Supplement_156"},"(0070,1A01)":{tag:"(0070,1A01)",vr:"CS",name:"PresentationAnimationStyle",vm:"1",version:"Supplement_156"},"(0070,1A03)":{tag:"(0070,1A03)",vr:"FD",name:"RecommendedAnimationRate",vm:"1",version:"Supplement_156"},"(0070,1A04)":{tag:"(0070,1A04)",vr:"SQ",name:"AnimationCurveSequence",vm:"1",version:"Supplement_156"},"(0070,1A05)":{tag:"(0070,1A05)",vr:"FD",name:"AnimationStepSize",vm:"1",version:"Supplement_156"},"(0040,4070)":{tag:"(0040,4070)",vr:"SQ",name:"OutputDestinationSequence",vm:"1",version:"CP_1441"},"(0040,4071)":{tag:"(0040,4071)",vr:"SQ",name:"DICOMStorageSequence",vm:"1",version:"CP_1441"},"(0040,4072)":{tag:"(0040,4072)",vr:"SQ",name:"STOWRSStorageSequence",vm:"1",version:"CP_1441"},"(0040,4073)":{tag:"(0040,4073)",vr:"UR",name:"StorageURL",vm:"1",version:"CP_1441"},"(0040,4074)":{tag:"(0040,4074)",vr:"SQ",name:"XDSStorageSequence",vm:"1",version:"CP_1441"},"(0028,2002)":{tag:"(0028,2002)",vr:"CS",name:"ColorSpace",vm:"1",version:"CP_1454"},"(0040,9213)":{tag:"(0040,9213)",vr:"FD",name:"DoubleFloatRealWorldValueLastValueMapped",vm:"1",version:"CP_1458"},"(0040,9214)":{tag:"(0040,9214)",vr:"FD",name:"DoubleFloatRealWorldValueFirstValueMapped",vm:"1",version:"CP_1458"},"(0018,1320)":{tag:"(0018,1320)",vr:"FL",name:"B1rms",vm:"1",version:"CP_1461"},"(0009-o-FFFF,0000)":{tag:"(0009-o-FFFF,0000)",vr:"UL",name:"PrivateGroupLength",vm:"1",version:"PRIVATE"},"(0009-o-FFFF,0010-u-00FF)":{tag:"(0009-o-FFFF,0010-u-00FF)",vr:"LO",name:"PrivateCreator",vm:"1",version:"PRIVATE"},"(0001-o-0007,0000)":{tag:"(0001-o-0007,0000)",vr:"UL",name:"IllegalGroupLength",vm:"1",version:"ILLEGAL"},"(0001-o-0007,0010-u-00FF)":{tag:"(0001-o-0007,0010-u-00FF)",vr:"LO",name:"IllegalPrivateCreator",vm:"1",version:"ILLEGAL"},"(0000-u-FFFF,0000)":{tag:"(0000-u-FFFF,0000)",vr:"UL",name:"GenericGroupLength",vm:"1",version:"GENERIC"},"(0000,0001)":{tag:"(0000,0001)",vr:"UL",name:"RETIRED_CommandLengthToEnd",vm:"1",version:"DICOM/retired"},"(0000,0010)":{tag:"(0000,0010)",vr:"SH",name:"RETIRED_CommandRecognitionCode",vm:"1",version:"DICOM/retired"},"(0000,0200)":{tag:"(0000,0200)",vr:"AE",name:"RETIRED_Initiator",vm:"1",version:"DICOM/retired"},"(0000,0300)":{tag:"(0000,0300)",vr:"AE",name:"RETIRED_Receiver",vm:"1",version:"DICOM/retired"},"(0000,0400)":{tag:"(0000,0400)",vr:"AE",name:"RETIRED_FindLocation",vm:"1",version:"DICOM/retired"},"(0000,0850)":{tag:"(0000,0850)",vr:"US",name:"RETIRED_NumberOfMatches",vm:"1",version:"DICOM/retired"},"(0000,0860)":{tag:"(0000,0860)",vr:"US",name:"RETIRED_ResponseSequenceNumber",vm:"1",version:"DICOM/retired"},"(0000,4000)":{tag:"(0000,4000)",vr:"LT",name:"RETIRED_DialogReceiver",vm:"1",version:"DICOM/retired"},"(0000,4010)":{tag:"(0000,4010)",vr:"LT",name:"RETIRED_TerminalType",vm:"1",version:"DICOM/retired"},"(0000,5010)":{tag:"(0000,5010)",vr:"SH",name:"RETIRED_MessageSetID",vm:"1",version:"DICOM/retired"},"(0000,5020)":{tag:"(0000,5020)",vr:"SH",name:"RETIRED_EndMessageID",vm:"1",version:"DICOM/retired"},"(0000,5110)":{tag:"(0000,5110)",vr:"LT",name:"RETIRED_DisplayFormat",vm:"1",version:"DICOM/retired"},"(0000,5120)":{tag:"(0000,5120)",vr:"LT",name:"RETIRED_PagePositionID",vm:"1",version:"DICOM/retired"},"(0000,5130)":{tag:"(0000,5130)",vr:"CS",name:"RETIRED_TextFormatID",vm:"1",version:"DICOM/retired"},"(0000,5140)":{tag:"(0000,5140)",vr:"CS",name:"RETIRED_NormalReverse",vm:"1",version:"DICOM/retired"},"(0000,5150)":{tag:"(0000,5150)",vr:"CS",name:"RETIRED_AddGrayScale",vm:"1",version:"DICOM/retired"},"(0000,5160)":{tag:"(0000,5160)",vr:"CS",name:"RETIRED_Borders",vm:"1",version:"DICOM/retired"},"(0000,5170)":{tag:"(0000,5170)",vr:"IS",name:"RETIRED_Copies",vm:"1",version:"DICOM/retired"},"(0000,5180)":{tag:"(0000,5180)",vr:"CS",name:"RETIRED_CommandMagnificationType",vm:"1",version:"DICOM/retired"},"(0000,5190)":{tag:"(0000,5190)",vr:"CS",name:"RETIRED_Erase",vm:"1",version:"DICOM/retired"},"(0000,51A0)":{tag:"(0000,51A0)",vr:"CS",name:"RETIRED_Print",vm:"1",version:"DICOM/retired"},"(0000,51B0)":{tag:"(0000,51B0)",vr:"US",name:"RETIRED_Overlays",vm:"1-n",version:"DICOM/retired"},"(0004,1504)":{tag:"(0004,1504)",vr:"up",name:"RETIRED_MRDRDirectoryRecordOffset",vm:"1",version:"DICOM/retired"},"(0004,1600)":{tag:"(0004,1600)",vr:"UL",name:"RETIRED_NumberOfReferences",vm:"1",version:"DICOM/retired"},"(0008,0001)":{tag:"(0008,0001)",vr:"UL",name:"RETIRED_LengthToEnd",vm:"1",version:"DICOM/retired"},"(0008,0010)":{tag:"(0008,0010)",vr:"SH",name:"RETIRED_RecognitionCode",vm:"1",version:"DICOM/retired"},"(0008,0024)":{tag:"(0008,0024)",vr:"DA",name:"RETIRED_OverlayDate",vm:"1",version:"DICOM/retired"},"(0008,0025)":{tag:"(0008,0025)",vr:"DA",name:"RETIRED_CurveDate",vm:"1",version:"DICOM/retired"},"(0008,0034)":{tag:"(0008,0034)",vr:"TM",name:"RETIRED_OverlayTime",vm:"1",version:"DICOM/retired"},"(0008,0035)":{tag:"(0008,0035)",vr:"TM",name:"RETIRED_CurveTime",vm:"1",version:"DICOM/retired"},"(0008,0040)":{tag:"(0008,0040)",vr:"US",name:"RETIRED_DataSetType",vm:"1",version:"DICOM/retired"},"(0008,0041)":{tag:"(0008,0041)",vr:"LO",name:"RETIRED_DataSetSubtype",vm:"1",version:"DICOM/retired"},"(0008,0042)":{tag:"(0008,0042)",vr:"CS",name:"RETIRED_NuclearMedicineSeriesType",vm:"1",version:"DICOM/retired"},"(0008,1000)":{tag:"(0008,1000)",vr:"AE",name:"RETIRED_NetworkID",vm:"1",version:"DICOM/retired"},"(0008,1100)":{tag:"(0008,1100)",vr:"SQ",name:"RETIRED_ReferencedResultsSequence",vm:"1",version:"DICOM/retired"},"(0008,1130)":{tag:"(0008,1130)",vr:"SQ",name:"RETIRED_ReferencedOverlaySequence",vm:"1",version:"DICOM/retired"},"(0008,1145)":{tag:"(0008,1145)",vr:"SQ",name:"RETIRED_ReferencedCurveSequence",vm:"1",version:"DICOM/retired"},"(0008,2110)":{tag:"(0008,2110)",vr:"CS",name:"RETIRED_LossyImageCompressionRetired",vm:"1",version:"DICOM/retired"},"(0008,2200)":{tag:"(0008,2200)",vr:"CS",name:"RETIRED_TransducerPosition",vm:"1",version:"DICOM/retired"},"(0008,2204)":{tag:"(0008,2204)",vr:"CS",name:"RETIRED_TransducerOrientation",vm:"1",version:"DICOM/retired"},"(0008,2208)":{tag:"(0008,2208)",vr:"CS",name:"RETIRED_AnatomicStructure",vm:"1",version:"DICOM/retired"},"(0008,2240)":{tag:"(0008,2240)",vr:"SQ",name:"RETIRED_TransducerPositionSequence",vm:"1",version:"DICOM/retired"},"(0008,2242)":{tag:"(0008,2242)",vr:"SQ",name:"RETIRED_TransducerPositionModifierSequence",vm:"1",version:"DICOM/retired"},"(0008,2244)":{tag:"(0008,2244)",vr:"SQ",name:"RETIRED_TransducerOrientationSequence",vm:"1",version:"DICOM/retired"},"(0008,2246)":{tag:"(0008,2246)",vr:"SQ",name:"RETIRED_TransducerOrientationModifierSequence",vm:"1",version:"DICOM/retired"},"(0008,2251)":{tag:"(0008,2251)",vr:"SQ",name:"RETIRED_AnatomicStructureSpaceOrRegionCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2253)":{tag:"(0008,2253)",vr:"SQ",name:"RETIRED_AnatomicPortalOfEntranceCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2255)":{tag:"(0008,2255)",vr:"SQ",name:"RETIRED_AnatomicApproachDirectionCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2256)":{tag:"(0008,2256)",vr:"ST",name:"RETIRED_AnatomicPerspectiveDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0008,2257)":{tag:"(0008,2257)",vr:"SQ",name:"RETIRED_AnatomicPerspectiveCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,2258)":{tag:"(0008,2258)",vr:"ST",name:"RETIRED_AnatomicLocationOfExaminingInstrumentDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0008,2259)":{tag:"(0008,2259)",vr:"SQ",name:"RETIRED_AnatomicLocationOfExaminingInstrumentCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,225A)":{tag:"(0008,225A)",vr:"SQ",name:"RETIRED_AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,225C)":{tag:"(0008,225C)",vr:"SQ",name:"RETIRED_OnAxisBackgroundAnatomicStructureCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0008,4000)":{tag:"(0008,4000)",vr:"LT",name:"RETIRED_IdentifyingComments",vm:"1",version:"DICOM/retired"},"(0010,1050)":{tag:"(0010,1050)",vr:"LO",name:"RETIRED_InsurancePlanIdentification",vm:"1-n",version:"DICOM/retired"},"(0014,0023)":{tag:"(0014,0023)",vr:"ST",name:"RETIRED_CADFileFormat",vm:"1-n",version:"DICOM/retired"},"(0014,0024)":{tag:"(0014,0024)",vr:"ST",name:"RETIRED_ComponentReferenceSystem",vm:"1-n",version:"DICOM/retired"},"(0014,0045)":{tag:"(0014,0045)",vr:"ST",name:"RETIRED_MaterialPropertiesFileFormatRetired",vm:"1-n",version:"DICOM/retired"},"(0018,0030)":{tag:"(0018,0030)",vr:"LO",name:"RETIRED_Radionuclide",vm:"1-n",version:"DICOM/retired"},"(0018,0032)":{tag:"(0018,0032)",vr:"DS",name:"RETIRED_EnergyWindowCenterline",vm:"1",version:"DICOM/retired"},"(0018,0033)":{tag:"(0018,0033)",vr:"DS",name:"RETIRED_EnergyWindowTotalWidth",vm:"1-n",version:"DICOM/retired"},"(0018,0037)":{tag:"(0018,0037)",vr:"CS",name:"RETIRED_TherapyType",vm:"1",version:"DICOM/retired"},"(0018,0039)":{tag:"(0018,0039)",vr:"CS",name:"RETIRED_TherapyDescription",vm:"1",version:"DICOM/retired"},"(0018,0061)":{tag:"(0018,0061)",vr:"DS",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(0018,1011)":{tag:"(0018,1011)",vr:"LO",name:"RETIRED_HardcopyCreationDeviceID",vm:"1",version:"DICOM/retired"},"(0018,1017)":{tag:"(0018,1017)",vr:"LO",name:"RETIRED_HardcopyDeviceManufacturer",vm:"1",version:"DICOM/retired"},"(0018,101A)":{tag:"(0018,101A)",vr:"LO",name:"RETIRED_HardcopyDeviceSoftwareVersion",vm:"1-n",version:"DICOM/retired"},"(0018,101B)":{tag:"(0018,101B)",vr:"LO",name:"RETIRED_HardcopyDeviceManufacturerModelName",vm:"1",version:"DICOM/retired"},"(0018,1141)":{tag:"(0018,1141)",vr:"DS",name:"RETIRED_AngularPosition",vm:"1",version:"DICOM/retired"},"(0018,1146)":{tag:"(0018,1146)",vr:"DS",name:"RETIRED_RotationOffset",vm:"1-n",version:"DICOM/retired"},"(0018,1240)":{tag:"(0018,1240)",vr:"IS",name:"RETIRED_UpperLowerPixelValues",vm:"1-n",version:"DICOM/retired"},"(0018,4000)":{tag:"(0018,4000)",vr:"LT",name:"RETIRED_AcquisitionComments",vm:"1",version:"DICOM/retired"},"(0018,5021)":{tag:"(0018,5021)",vr:"LO",name:"RETIRED_PostprocessingFunction",vm:"1",version:"DICOM/retired"},"(0018,5030)":{tag:"(0018,5030)",vr:"DS",name:"RETIRED_DynamicRange",vm:"1",version:"DICOM/retired"},"(0018,5040)":{tag:"(0018,5040)",vr:"DS",name:"RETIRED_TotalGain",vm:"1",version:"DICOM/retired"},"(0018,5210)":{tag:"(0018,5210)",vr:"DS",name:"RETIRED_ImageTransformationMatrix",vm:"6",version:"DICOM/retired"},"(0018,5212)":{tag:"(0018,5212)",vr:"DS",name:"RETIRED_ImageTranslationVector",vm:"3",version:"DICOM/retired"},"(0018,6038)":{tag:"(0018,6038)",vr:"UL",name:"RETIRED_DopplerSampleVolumeXPositionRetired",vm:"1",version:"DICOM/retired"},"(0018,603A)":{tag:"(0018,603A)",vr:"UL",name:"RETIRED_DopplerSampleVolumeYPositionRetired",vm:"1",version:"DICOM/retired"},"(0018,603C)":{tag:"(0018,603C)",vr:"UL",name:"RETIRED_TMLinePositionX0Retired",vm:"1",version:"DICOM/retired"},"(0018,603E)":{tag:"(0018,603E)",vr:"UL",name:"RETIRED_TMLinePositionY0Retired",vm:"1",version:"DICOM/retired"},"(0018,6040)":{tag:"(0018,6040)",vr:"UL",name:"RETIRED_TMLinePositionX1Retired",vm:"1",version:"DICOM/retired"},"(0018,6042)":{tag:"(0018,6042)",vr:"UL",name:"RETIRED_TMLinePositionY1Retired",vm:"1",version:"DICOM/retired"},"(0018,9096)":{tag:"(0018,9096)",vr:"FD",name:"RETIRED_ParallelReductionFactorInPlaneRetired",vm:"1",version:"DICOM/retired"},"(0018,9166)":{tag:"(0018,9166)",vr:"CS",name:"RETIRED_BulkMotionStatus",vm:"1",version:"DICOM/retired"},"(0018,9195)":{tag:"(0018,9195)",vr:"FD",name:"RETIRED_ChemicalShiftMinimumIntegrationLimitInHz",vm:"1",version:"DICOM/retired"},"(0018,9196)":{tag:"(0018,9196)",vr:"FD",name:"RETIRED_ChemicalShiftMaximumIntegrationLimitInHz",vm:"1",version:"DICOM/retired"},"(0020,0014)":{tag:"(0020,0014)",vr:"IS",name:"RETIRED_IsotopeNumber",vm:"1",version:"DICOM/retired"},"(0020,0015)":{tag:"(0020,0015)",vr:"IS",name:"RETIRED_PhaseNumber",vm:"1",version:"DICOM/retired"},"(0020,0016)":{tag:"(0020,0016)",vr:"IS",name:"RETIRED_IntervalNumber",vm:"1",version:"DICOM/retired"},"(0020,0017)":{tag:"(0020,0017)",vr:"IS",name:"RETIRED_TimeSlotNumber",vm:"1",version:"DICOM/retired"},"(0020,0018)":{tag:"(0020,0018)",vr:"IS",name:"RETIRED_AngleNumber",vm:"1",version:"DICOM/retired"},"(0020,0022)":{tag:"(0020,0022)",vr:"IS",name:"RETIRED_OverlayNumber",vm:"1",version:"DICOM/retired"},"(0020,0024)":{tag:"(0020,0024)",vr:"IS",name:"RETIRED_CurveNumber",vm:"1",version:"DICOM/retired"},"(0020,0026)":{tag:"(0020,0026)",vr:"IS",name:"RETIRED_LUTNumber",vm:"1",version:"DICOM/retired"},"(0020,0030)":{tag:"(0020,0030)",vr:"DS",name:"RETIRED_ImagePosition",vm:"3",version:"DICOM/retired"},"(0020,0035)":{tag:"(0020,0035)",vr:"DS",name:"RETIRED_ImageOrientation",vm:"6",version:"DICOM/retired"},"(0020,0050)":{tag:"(0020,0050)",vr:"DS",name:"RETIRED_Location",vm:"1",version:"DICOM/retired"},"(0020,0070)":{tag:"(0020,0070)",vr:"LO",name:"RETIRED_ImageGeometryType",vm:"1",version:"DICOM/retired"},"(0020,0080)":{tag:"(0020,0080)",vr:"CS",name:"RETIRED_MaskingImage",vm:"1-n",version:"DICOM/retired"},"(0020,00AA)":{tag:"(0020,00AA)",vr:"IS",name:"RETIRED_ReportNumber",vm:"1",version:"DICOM/retired"},"(0020,1000)":{tag:"(0020,1000)",vr:"IS",name:"RETIRED_SeriesInStudy",vm:"1",version:"DICOM/retired"},"(0020,1001)":{tag:"(0020,1001)",vr:"IS",name:"RETIRED_AcquisitionsInSeries",vm:"1",version:"DICOM/retired"},"(0020,1003)":{tag:"(0020,1003)",vr:"IS",name:"RETIRED_ImagesInSeries",vm:"1",version:"DICOM/retired"},"(0020,1004)":{tag:"(0020,1004)",vr:"IS",name:"RETIRED_AcquisitionsInStudy",vm:"1",version:"DICOM/retired"},"(0020,1005)":{tag:"(0020,1005)",vr:"IS",name:"RETIRED_ImagesInStudy",vm:"1",version:"DICOM/retired"},"(0020,1020)":{tag:"(0020,1020)",vr:"LO",name:"RETIRED_Reference",vm:"1-n",version:"DICOM/retired"},"(0020,1070)":{tag:"(0020,1070)",vr:"IS",name:"RETIRED_OtherStudyNumbers",vm:"1-n",version:"DICOM/retired"},"(0020,3100-31FF)":{tag:"(0020,3100-31FF)",vr:"CS",name:"RETIRED_SourceImageIDs",vm:"1-n",version:"DICOM/retired"},"(0020,3401)":{tag:"(0020,3401)",vr:"CS",name:"RETIRED_ModifyingDeviceID",vm:"1",version:"DICOM/retired"},"(0020,3402)":{tag:"(0020,3402)",vr:"CS",name:"RETIRED_ModifiedImageID",vm:"1",version:"DICOM/retired"},"(0020,3403)":{tag:"(0020,3403)",vr:"DA",name:"RETIRED_ModifiedImageDate",vm:"1",version:"DICOM/retired"},"(0020,3404)":{tag:"(0020,3404)",vr:"LO",name:"RETIRED_ModifyingDeviceManufacturer",vm:"1",version:"DICOM/retired"},"(0020,3405)":{tag:"(0020,3405)",vr:"TM",name:"RETIRED_ModifiedImageTime",vm:"1",version:"DICOM/retired"},"(0020,3406)":{tag:"(0020,3406)",vr:"LO",name:"RETIRED_ModifiedImageDescription",vm:"1",version:"DICOM/retired"},"(0020,5000)":{tag:"(0020,5000)",vr:"AT",name:"RETIRED_OriginalImageIdentification",vm:"1-n",version:"DICOM/retired"},"(0020,5002)":{tag:"(0020,5002)",vr:"LO",name:"RETIRED_OriginalImageIdentificationNomenclature",vm:"1-n",version:"DICOM/retired"},"(0022,1094)":{tag:"(0022,1094)",vr:"LO",name:"RETIRED_LensConstantDescription",vm:"1",version:"DICOM/retired"},"(0022,1153)":{tag:"(0022,1153)",vr:"SQ",name:"RETIRED_OphthalmicAxialLengthAcquisitionMethodCodeSequence",vm:"1",version:"DICOM/retired"},"(0022,1265)":{tag:"(0022,1265)",vr:"SQ",name:"RETIRED_OphthalmicAxialLengthQualityMetricTypeCodeSequence",vm:"1",version:"DICOM/retired"},"(0022,1273)":{tag:"(0022,1273)",vr:"LO",name:"RETIRED_OphthalmicAxialLengthQualityMetricTypeDescription",vm:"1",version:"DICOM/retired"},"(0028,0005)":{tag:"(0028,0005)",vr:"US",name:"RETIRED_ImageDimensions",vm:"1",version:"DICOM/retired"},"(0028,0012)":{tag:"(0028,0012)",vr:"US",name:"RETIRED_Planes",vm:"1",version:"DICOM/retired"},"(0028,0040)":{tag:"(0028,0040)",vr:"CS",name:"RETIRED_ImageFormat",vm:"1",version:"DICOM/retired"},"(0028,0050)":{tag:"(0028,0050)",vr:"LO",name:"RETIRED_ManipulatedImage",vm:"1-n",version:"DICOM/retired"},"(0028,005F)":{tag:"(0028,005F)",vr:"LO",name:"RETIRED_CompressionRecognitionCode",vm:"1",version:"DICOM/retired"},"(0028,0060)":{tag:"(0028,0060)",vr:"CS",name:"RETIRED_CompressionCode",vm:"1",version:"DICOM/retired"},"(0028,0061)":{tag:"(0028,0061)",vr:"SH",name:"RETIRED_CompressionOriginator",vm:"1",version:"DICOM/retired"},"(0028,0062)":{tag:"(0028,0062)",vr:"LO",name:"RETIRED_CompressionLabel",vm:"1",version:"DICOM/retired"},"(0028,0063)":{tag:"(0028,0063)",vr:"SH",name:"RETIRED_CompressionDescription",vm:"1",version:"DICOM/retired"},"(0028,0065)":{tag:"(0028,0065)",vr:"CS",name:"RETIRED_CompressionSequence",vm:"1-n",version:"DICOM/retired"},"(0028,0066)":{tag:"(0028,0066)",vr:"AT",name:"RETIRED_CompressionStepPointers",vm:"1-n",version:"DICOM/retired"},"(0028,0068)":{tag:"(0028,0068)",vr:"US",name:"RETIRED_RepeatInterval",vm:"1",version:"DICOM/retired"},"(0028,0069)":{tag:"(0028,0069)",vr:"US",name:"RETIRED_BitsGrouped",vm:"1",version:"DICOM/retired"},"(0028,0070)":{tag:"(0028,0070)",vr:"US",name:"RETIRED_PerimeterTable",vm:"1-n",version:"DICOM/retired"},"(0028,0071)":{tag:"(0028,0071)",vr:"xs",name:"RETIRED_PerimeterValue",vm:"1",version:"DICOM/retired"},"(0028,0080)":{tag:"(0028,0080)",vr:"US",name:"RETIRED_PredictorRows",vm:"1",version:"DICOM/retired"},"(0028,0081)":{tag:"(0028,0081)",vr:"US",name:"RETIRED_PredictorColumns",vm:"1",version:"DICOM/retired"},"(0028,0082)":{tag:"(0028,0082)",vr:"US",name:"RETIRED_PredictorConstants",vm:"1-n",version:"DICOM/retired"},"(0028,0090)":{tag:"(0028,0090)",vr:"CS",name:"RETIRED_BlockedPixels",vm:"1",version:"DICOM/retired"},"(0028,0091)":{tag:"(0028,0091)",vr:"US",name:"RETIRED_BlockRows",vm:"1",version:"DICOM/retired"},"(0028,0092)":{tag:"(0028,0092)",vr:"US",name:"RETIRED_BlockColumns",vm:"1",version:"DICOM/retired"},"(0028,0093)":{tag:"(0028,0093)",vr:"US",name:"RETIRED_RowOverlap",vm:"1",version:"DICOM/retired"},"(0028,0094)":{tag:"(0028,0094)",vr:"US",name:"RETIRED_ColumnOverlap",vm:"1",version:"DICOM/retired"},"(0028,0104)":{tag:"(0028,0104)",vr:"xs",name:"RETIRED_SmallestValidPixelValue",vm:"1",version:"DICOM/retired"},"(0028,0105)":{tag:"(0028,0105)",vr:"xs",name:"RETIRED_LargestValidPixelValue",vm:"1",version:"DICOM/retired"},"(0028,0110)":{tag:"(0028,0110)",vr:"xs",name:"RETIRED_SmallestImagePixelValueInPlane",vm:"1",version:"DICOM/retired"},"(0028,0111)":{tag:"(0028,0111)",vr:"xs",name:"RETIRED_LargestImagePixelValueInPlane",vm:"1",version:"DICOM/retired"},"(0028,0200)":{tag:"(0028,0200)",vr:"US",name:"RETIRED_ImageLocation",vm:"1",version:"DICOM/retired"},"(0028,0400)":{tag:"(0028,0400)",vr:"LO",name:"RETIRED_TransformLabel",vm:"1",version:"DICOM/retired"},"(0028,0401)":{tag:"(0028,0401)",vr:"LO",name:"RETIRED_TransformVersionNumber",vm:"1",version:"DICOM/retired"},"(0028,0402)":{tag:"(0028,0402)",vr:"US",name:"RETIRED_NumberOfTransformSteps",vm:"1",version:"DICOM/retired"},"(0028,0403)":{tag:"(0028,0403)",vr:"LO",name:"RETIRED_SequenceOfCompressedData",vm:"1-n",version:"DICOM/retired"},"(0028,0404)":{tag:"(0028,0404)",vr:"AT",name:"RETIRED_DetailsOfCoefficients",vm:"1-n",version:"DICOM/retired"},"(0028,0410)":{tag:"(0028,0410)",vr:"US",name:"RETIRED_RowsForNthOrderCoefficients",vm:"1",version:"DICOM/retired"},"(0028,0411)":{tag:"(0028,0411)",vr:"US",name:"RETIRED_ColumnsForNthOrderCoefficients",vm:"1",version:"DICOM/retired"},"(0028,0412)":{tag:"(0028,0412)",vr:"LO",name:"RETIRED_CoefficientCoding",vm:"1-n",version:"DICOM/retired"},"(0028,0413)":{tag:"(0028,0413)",vr:"AT",name:"RETIRED_CoefficientCodingPointers",vm:"1-n",version:"DICOM/retired"},"(0028,0700)":{tag:"(0028,0700)",vr:"LO",name:"RETIRED_DCTLabel",vm:"1",version:"DICOM/retired"},"(0028,0701)":{tag:"(0028,0701)",vr:"CS",name:"RETIRED_DataBlockDescription",vm:"1-n",version:"DICOM/retired"},"(0028,0702)":{tag:"(0028,0702)",vr:"AT",name:"RETIRED_DataBlock",vm:"1-n",version:"DICOM/retired"},"(0028,0710)":{tag:"(0028,0710)",vr:"US",name:"RETIRED_NormalizationFactorFormat",vm:"1",version:"DICOM/retired"},"(0028,0720)":{tag:"(0028,0720)",vr:"US",name:"RETIRED_ZonalMapNumberFormat",vm:"1",version:"DICOM/retired"},"(0028,0721)":{tag:"(0028,0721)",vr:"AT",name:"RETIRED_ZonalMapLocation",vm:"1-n",version:"DICOM/retired"},"(0028,0722)":{tag:"(0028,0722)",vr:"US",name:"RETIRED_ZonalMapFormat",vm:"1",version:"DICOM/retired"},"(0028,0730)":{tag:"(0028,0730)",vr:"US",name:"RETIRED_AdaptiveMapFormat",vm:"1",version:"DICOM/retired"},"(0028,0740)":{tag:"(0028,0740)",vr:"US",name:"RETIRED_CodeNumberFormat",vm:"1",version:"DICOM/retired"},"(0028,0800)":{tag:"(0028,0800)",vr:"CS",name:"RETIRED_CodeLabel",vm:"1-n",version:"DICOM/retired"},"(0028,0802)":{tag:"(0028,0802)",vr:"US",name:"RETIRED_NumberOfTables",vm:"1",version:"DICOM/retired"},"(0028,0803)":{tag:"(0028,0803)",vr:"AT",name:"RETIRED_CodeTableLocation",vm:"1-n",version:"DICOM/retired"},"(0028,0804)":{tag:"(0028,0804)",vr:"US",name:"RETIRED_BitsForCodeWord",vm:"1",version:"DICOM/retired"},"(0028,0808)":{tag:"(0028,0808)",vr:"AT",name:"RETIRED_ImageDataLocation",vm:"1-n",version:"DICOM/retired"},"(0028,1080)":{tag:"(0028,1080)",vr:"CS",name:"RETIRED_GrayScale",vm:"1",version:"DICOM/retired"},"(0028,1100)":{tag:"(0028,1100)",vr:"xs",name:"RETIRED_GrayLookupTableDescriptor",vm:"3",version:"DICOM/retired"},"(0028,1111)":{tag:"(0028,1111)",vr:"xs",name:"RETIRED_LargeRedPaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1112)":{tag:"(0028,1112)",vr:"xs",name:"RETIRED_LargeGreenPaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1113)":{tag:"(0028,1113)",vr:"xs",name:"RETIRED_LargeBluePaletteColorLookupTableDescriptor",vm:"4",version:"DICOM/retired"},"(0028,1200)":{tag:"(0028,1200)",vr:"lt",name:"RETIRED_GrayLookupTableData",vm:"1-n",version:"DICOM/retired"},"(0028,1211)":{tag:"(0028,1211)",vr:"OW",name:"RETIRED_LargeRedPaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1212)":{tag:"(0028,1212)",vr:"OW",name:"RETIRED_LargeGreenPaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1213)":{tag:"(0028,1213)",vr:"OW",name:"RETIRED_LargeBluePaletteColorLookupTableData",vm:"1",version:"DICOM/retired"},"(0028,1214)":{tag:"(0028,1214)",vr:"UI",name:"RETIRED_LargePaletteColorLookupTableUID",vm:"1",version:"DICOM/retired"},"(0028,4000)":{tag:"(0028,4000)",vr:"LT",name:"RETIRED_ImagePresentationComments",vm:"1",version:"DICOM/retired"},"(0028,5000)":{tag:"(0028,5000)",vr:"SQ",name:"RETIRED_BiPlaneAcquisitionSequence",vm:"1",version:"DICOM/retired"},"(0028,6030)":{tag:"(0028,6030)",vr:"US",name:"RETIRED_MaskPointers",vm:"1-n",version:"DICOM/retired"},"(0028,9099)":{tag:"(0028,9099)",vr:"US",name:"RETIRED_LargestMonochromePixelValue",vm:"1",version:"DICOM/retired"},"(0032,000A)":{tag:"(0032,000A)",vr:"CS",name:"RETIRED_StudyStatusID",vm:"1",version:"DICOM/retired"},"(0032,000C)":{tag:"(0032,000C)",vr:"CS",name:"RETIRED_StudyPriorityID",vm:"1",version:"DICOM/retired"},"(0032,0012)":{tag:"(0032,0012)",vr:"LO",name:"RETIRED_StudyIDIssuer",vm:"1",version:"DICOM/retired"},"(0032,0032)":{tag:"(0032,0032)",vr:"DA",name:"RETIRED_StudyVerifiedDate",vm:"1",version:"DICOM/retired"},"(0032,0033)":{tag:"(0032,0033)",vr:"TM",name:"RETIRED_StudyVerifiedTime",vm:"1",version:"DICOM/retired"},"(0032,0034)":{tag:"(0032,0034)",vr:"DA",name:"RETIRED_StudyReadDate",vm:"1",version:"DICOM/retired"},"(0032,0035)":{tag:"(0032,0035)",vr:"TM",name:"RETIRED_StudyReadTime",vm:"1",version:"DICOM/retired"},"(0032,1000)":{tag:"(0032,1000)",vr:"DA",name:"RETIRED_ScheduledStudyStartDate",vm:"1",version:"DICOM/retired"},"(0032,1001)":{tag:"(0032,1001)",vr:"TM",name:"RETIRED_ScheduledStudyStartTime",vm:"1",version:"DICOM/retired"},"(0032,1010)":{tag:"(0032,1010)",vr:"DA",name:"RETIRED_ScheduledStudyStopDate",vm:"1",version:"DICOM/retired"},"(0032,1011)":{tag:"(0032,1011)",vr:"TM",name:"RETIRED_ScheduledStudyStopTime",vm:"1",version:"DICOM/retired"},"(0032,1020)":{tag:"(0032,1020)",vr:"LO",name:"RETIRED_ScheduledStudyLocation",vm:"1",version:"DICOM/retired"},"(0032,1021)":{tag:"(0032,1021)",vr:"AE",name:"RETIRED_ScheduledStudyLocationAETitle",vm:"1-n",version:"DICOM/retired"},"(0032,1030)":{tag:"(0032,1030)",vr:"LO",name:"RETIRED_ReasonForStudy",vm:"1",version:"DICOM/retired"},"(0032,1040)":{tag:"(0032,1040)",vr:"DA",name:"RETIRED_StudyArrivalDate",vm:"1",version:"DICOM/retired"},"(0032,1041)":{tag:"(0032,1041)",vr:"TM",name:"RETIRED_StudyArrivalTime",vm:"1",version:"DICOM/retired"},"(0032,1050)":{tag:"(0032,1050)",vr:"DA",name:"RETIRED_StudyCompletionDate",vm:"1",version:"DICOM/retired"},"(0032,1051)":{tag:"(0032,1051)",vr:"TM",name:"RETIRED_StudyCompletionTime",vm:"1",version:"DICOM/retired"},"(0032,1055)":{tag:"(0032,1055)",vr:"CS",name:"RETIRED_StudyComponentStatusID",vm:"1",version:"DICOM/retired"},"(0032,4000)":{tag:"(0032,4000)",vr:"LT",name:"RETIRED_StudyComments",vm:"1",version:"DICOM/retired"},"(0038,0011)":{tag:"(0038,0011)",vr:"LO",name:"RETIRED_IssuerOfAdmissionID",vm:"1",version:"DICOM/retired"},"(0038,001A)":{tag:"(0038,001A)",vr:"DA",name:"RETIRED_ScheduledAdmissionDate",vm:"1",version:"DICOM/retired"},"(0038,001B)":{tag:"(0038,001B)",vr:"TM",name:"RETIRED_ScheduledAdmissionTime",vm:"1",version:"DICOM/retired"},"(0038,001C)":{tag:"(0038,001C)",vr:"DA",name:"RETIRED_ScheduledDischargeDate",vm:"1",version:"DICOM/retired"},"(0038,001D)":{tag:"(0038,001D)",vr:"TM",name:"RETIRED_ScheduledDischargeTime",vm:"1",version:"DICOM/retired"},"(0038,001E)":{tag:"(0038,001E)",vr:"LO",name:"RETIRED_ScheduledPatientInstitutionResidence",vm:"1",version:"DICOM/retired"},"(0038,0030)":{tag:"(0038,0030)",vr:"DA",name:"RETIRED_DischargeDate",vm:"1",version:"DICOM/retired"},"(0038,0032)":{tag:"(0038,0032)",vr:"TM",name:"RETIRED_DischargeTime",vm:"1",version:"DICOM/retired"},"(0038,0040)":{tag:"(0038,0040)",vr:"LO",name:"RETIRED_DischargeDiagnosisDescription",vm:"1",version:"DICOM/retired"},"(0038,0044)":{tag:"(0038,0044)",vr:"SQ",name:"RETIRED_DischargeDiagnosisCodeSequence",vm:"1",version:"DICOM/retired"},"(0038,0061)":{tag:"(0038,0061)",vr:"LO",name:"RETIRED_IssuerOfServiceEpisodeID",vm:"1",version:"DICOM/retired"},"(0040,0307)":{tag:"(0040,0307)",vr:"DS",name:"RETIRED_DistanceSourceToSupport",vm:"1",version:"DICOM/retired"},"(0040,0330)":{tag:"(0040,0330)",vr:"SQ",name:"RETIRED_ReferencedProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0040,050A)":{tag:"(0040,050A)",vr:"LO",name:"RETIRED_SpecimenAccessionNumber",vm:"1",version:"DICOM/retired"},"(0040,0550)":{tag:"(0040,0550)",vr:"SQ",name:"RETIRED_SpecimenSequence",vm:"1",version:"DICOM/retired"},"(0040,0552)":{tag:"(0040,0552)",vr:"SQ",name:"RETIRED_SpecimenDescriptionSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,0553)":{tag:"(0040,0553)",vr:"ST",name:"RETIRED_SpecimenDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,06FA)":{tag:"(0040,06FA)",vr:"LO",name:"RETIRED_SlideIdentifier",vm:"1",version:"DICOM/retired"},"(0040,08D8)":{tag:"(0040,08D8)",vr:"SQ",name:"RETIRED_PixelSpacingSequence",vm:"1",version:"DICOM/retired"},"(0040,08DA)":{tag:"(0040,08DA)",vr:"SQ",name:"RETIRED_CoordinateSystemAxisCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,09F8)":{tag:"(0040,09F8)",vr:"SQ",name:"RETIRED_VitalStainCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,1006)":{tag:"(0040,1006)",vr:"SH",name:"RETIRED_PlacerOrderNumberProcedure",vm:"1",version:"DICOM/retired"},"(0040,1007)":{tag:"(0040,1007)",vr:"SH",name:"RETIRED_FillerOrderNumberProcedure",vm:"1",version:"DICOM/retired"},"(0040,1060)":{tag:"(0040,1060)",vr:"LO",name:"RETIRED_RequestedProcedureDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,2001)":{tag:"(0040,2001)",vr:"LO",name:"RETIRED_ReasonForTheImagingServiceRequest",vm:"1",version:"DICOM/retired"},"(0040,2006)":{tag:"(0040,2006)",vr:"SH",name:"RETIRED_PlacerOrderNumberImagingServiceRequestRetired",vm:"1",version:"DICOM/retired"},"(0040,2007)":{tag:"(0040,2007)",vr:"SH",name:"RETIRED_FillerOrderNumberImagingServiceRequestRetired",vm:"1",version:"DICOM/retired"},"(0040,4001)":{tag:"(0040,4001)",vr:"CS",name:"RETIRED_GeneralPurposeScheduledProcedureStepStatus",vm:"1",version:"DICOM/retired"},"(0040,4002)":{tag:"(0040,4002)",vr:"CS",name:"RETIRED_GeneralPurposePerformedProcedureStepStatus",vm:"1",version:"DICOM/retired"},"(0040,4003)":{tag:"(0040,4003)",vr:"CS",name:"RETIRED_GeneralPurposeScheduledProcedureStepPriority",vm:"1",version:"DICOM/retired"},"(0040,4004)":{tag:"(0040,4004)",vr:"SQ",name:"RETIRED_ScheduledProcessingApplicationsCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,4006)":{tag:"(0040,4006)",vr:"CS",name:"RETIRED_MultipleCopiesFlag",vm:"1",version:"DICOM/retired"},"(0040,4015)":{tag:"(0040,4015)",vr:"SQ",name:"RETIRED_ResultingGeneralPurposePerformedProcedureStepsSequence",vm:"1",version:"DICOM/retired"},"(0040,4016)":{tag:"(0040,4016)",vr:"SQ",name:"RETIRED_ReferencedGeneralPurposeScheduledProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0040,4022)":{tag:"(0040,4022)",vr:"SQ",name:"RETIRED_RelevantInformationSequence",vm:"1",version:"DICOM/retired"},"(0040,4023)":{tag:"(0040,4023)",vr:"UI",name:"RETIRED_ReferencedGeneralPurposeScheduledProcedureStepTransactionUID",vm:"1",version:"DICOM/retired"},"(0040,4031)":{tag:"(0040,4031)",vr:"SQ",name:"RETIRED_RequestedSubsequentWorkitemCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,4032)":{tag:"(0040,4032)",vr:"SQ",name:"RETIRED_NonDICOMOutputCodeSequence",vm:"1",version:"DICOM/retired"},"(0040,A007)":{tag:"(0040,A007)",vr:"CS",name:"RETIRED_FindingsFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A020)":{tag:"(0040,A020)",vr:"SQ",name:"RETIRED_FindingsSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A021)":{tag:"(0040,A021)",vr:"UI",name:"RETIRED_FindingsGroupUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A022)":{tag:"(0040,A022)",vr:"UI",name:"RETIRED_ReferencedFindingsGroupUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A023)":{tag:"(0040,A023)",vr:"DA",name:"RETIRED_FindingsGroupRecordingDateTrial",vm:"1",version:"DICOM/retired"},"(0040,A024)":{tag:"(0040,A024)",vr:"TM",name:"RETIRED_FindingsGroupRecordingTimeTrial",vm:"1",version:"DICOM/retired"},"(0040,A026)":{tag:"(0040,A026)",vr:"SQ",name:"RETIRED_FindingsSourceCategoryCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A028)":{tag:"(0040,A028)",vr:"SQ",name:"RETIRED_DocumentingOrganizationIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A047)":{tag:"(0040,A047)",vr:"LO",name:"RETIRED_MeasurementPrecisionDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A057)":{tag:"(0040,A057)",vr:"CS",name:"RETIRED_UrgencyOrPriorityAlertsTrial",vm:"1-n",version:"DICOM/retired"},"(0040,A060)":{tag:"(0040,A060)",vr:"LO",name:"RETIRED_SequencingIndicatorTrial",vm:"1",version:"DICOM/retired"},"(0040,A066)":{tag:"(0040,A066)",vr:"SQ",name:"RETIRED_DocumentIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A067)":{tag:"(0040,A067)",vr:"PN",name:"RETIRED_DocumentAuthorTrial",vm:"1",version:"DICOM/retired"},"(0040,A068)":{tag:"(0040,A068)",vr:"SQ",name:"RETIRED_DocumentAuthorIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A070)":{tag:"(0040,A070)",vr:"SQ",name:"RETIRED_IdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A074)":{tag:"(0040,A074)",vr:"OB",name:"RETIRED_ObjectBinaryIdentifierTrial",vm:"1",version:"DICOM/retired"},"(0040,A076)":{tag:"(0040,A076)",vr:"SQ",name:"RETIRED_DocumentingObserverIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A085)":{tag:"(0040,A085)",vr:"SQ",name:"RETIRED_ProcedureIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A089)":{tag:"(0040,A089)",vr:"OB",name:"RETIRED_ObjectDirectoryBinaryIdentifierTrial",vm:"1",version:"DICOM/retired"},"(0040,A090)":{tag:"(0040,A090)",vr:"SQ",name:"RETIRED_EquivalentCDADocumentSequence",vm:"1",version:"DICOM/retired"},"(0040,A110)":{tag:"(0040,A110)",vr:"DA",name:"RETIRED_DateOfDocumentOrVerbalTransactionTrial",vm:"1",version:"DICOM/retired"},"(0040,A112)":{tag:"(0040,A112)",vr:"TM",name:"RETIRED_TimeOfDocumentCreationOrVerbalTransactionTrial",vm:"1",version:"DICOM/retired"},"(0040,A125)":{tag:"(0040,A125)",vr:"CS",name:"RETIRED_ReportStatusIDTrial",vm:"2",version:"DICOM/retired"},"(0040,A167)":{tag:"(0040,A167)",vr:"SQ",name:"RETIRED_ObservationCategoryCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A16A)":{tag:"(0040,A16A)",vr:"ST",name:"RETIRED_BibliographicCitationTrial",vm:"1",version:"DICOM/retired"},"(0040,A172)":{tag:"(0040,A172)",vr:"UI",name:"RETIRED_ReferencedObservationUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A173)":{tag:"(0040,A173)",vr:"CS",name:"RETIRED_ReferencedObservationClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A174)":{tag:"(0040,A174)",vr:"CS",name:"RETIRED_ReferencedObjectObservationClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A192)":{tag:"(0040,A192)",vr:"DA",name:"RETIRED_ObservationDateTrial",vm:"1",version:"DICOM/retired"},"(0040,A193)":{tag:"(0040,A193)",vr:"TM",name:"RETIRED_ObservationTimeTrial",vm:"1",version:"DICOM/retired"},"(0040,A194)":{tag:"(0040,A194)",vr:"CS",name:"RETIRED_MeasurementAutomationTrial",vm:"1",version:"DICOM/retired"},"(0040,A224)":{tag:"(0040,A224)",vr:"ST",name:"RETIRED_IdentificationDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A290)":{tag:"(0040,A290)",vr:"CS",name:"RETIRED_CoordinatesSetGeometricTypeTrial",vm:"1",version:"DICOM/retired"},"(0040,A296)":{tag:"(0040,A296)",vr:"SQ",name:"RETIRED_AlgorithmCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A297)":{tag:"(0040,A297)",vr:"ST",name:"RETIRED_AlgorithmDescriptionTrial",vm:"1",version:"DICOM/retired"},"(0040,A29A)":{tag:"(0040,A29A)",vr:"SL",name:"RETIRED_PixelCoordinatesSetTrial",vm:"2-2n",version:"DICOM/retired"},"(0040,A307)":{tag:"(0040,A307)",vr:"PN",name:"RETIRED_CurrentObserverTrial",vm:"1",version:"DICOM/retired"},"(0040,A313)":{tag:"(0040,A313)",vr:"SQ",name:"RETIRED_ReferencedAccessionSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A33A)":{tag:"(0040,A33A)",vr:"ST",name:"RETIRED_ReportStatusCommentTrial",vm:"1",version:"DICOM/retired"},"(0040,A340)":{tag:"(0040,A340)",vr:"SQ",name:"RETIRED_ProcedureContextSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A352)":{tag:"(0040,A352)",vr:"PN",name:"RETIRED_VerbalSourceTrial",vm:"1",version:"DICOM/retired"},"(0040,A353)":{tag:"(0040,A353)",vr:"ST",name:"RETIRED_AddressTrial",vm:"1",version:"DICOM/retired"},"(0040,A354)":{tag:"(0040,A354)",vr:"LO",name:"RETIRED_TelephoneNumberTrial",vm:"1",version:"DICOM/retired"},"(0040,A358)":{tag:"(0040,A358)",vr:"SQ",name:"RETIRED_VerbalSourceIdentifierCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A380)":{tag:"(0040,A380)",vr:"SQ",name:"RETIRED_ReportDetailSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A402)":{tag:"(0040,A402)",vr:"UI",name:"RETIRED_ObservationSubjectUIDTrial",vm:"1",version:"DICOM/retired"},"(0040,A403)":{tag:"(0040,A403)",vr:"CS",name:"RETIRED_ObservationSubjectClassTrial",vm:"1",version:"DICOM/retired"},"(0040,A404)":{tag:"(0040,A404)",vr:"SQ",name:"RETIRED_ObservationSubjectTypeCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A600)":{tag:"(0040,A600)",vr:"CS",name:"RETIRED_ObservationSubjectContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A601)":{tag:"(0040,A601)",vr:"CS",name:"RETIRED_ObserverContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A603)":{tag:"(0040,A603)",vr:"CS",name:"RETIRED_ProcedureContextFlagTrial",vm:"1",version:"DICOM/retired"},"(0040,A731)":{tag:"(0040,A731)",vr:"SQ",name:"RETIRED_RelationshipSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A732)":{tag:"(0040,A732)",vr:"SQ",name:"RETIRED_RelationshipTypeCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A744)":{tag:"(0040,A744)",vr:"SQ",name:"RETIRED_LanguageCodeSequenceTrial",vm:"1",version:"DICOM/retired"},"(0040,A992)":{tag:"(0040,A992)",vr:"ST",name:"RETIRED_UniformResourceLocatorTrial",vm:"1",version:"DICOM/retired"},"(0040,DB06)":{tag:"(0040,DB06)",vr:"DT",name:"RETIRED_TemplateVersion",vm:"1",version:"DICOM/retired"},"(0040,DB07)":{tag:"(0040,DB07)",vr:"DT",name:"RETIRED_TemplateLocalVersion",vm:"1",version:"DICOM/retired"},"(0040,DB0B)":{tag:"(0040,DB0B)",vr:"CS",name:"RETIRED_TemplateExtensionFlag",vm:"1",version:"DICOM/retired"},"(0040,DB0C)":{tag:"(0040,DB0C)",vr:"UI",name:"RETIRED_TemplateExtensionOrganizationUID",vm:"1",version:"DICOM/retired"},"(0040,DB0D)":{tag:"(0040,DB0D)",vr:"UI",name:"RETIRED_TemplateExtensionCreatorUID",vm:"1",version:"DICOM/retired"},"(0054,1400)":{tag:"(0054,1400)",vr:"CS",name:"RETIRED_CountsIncluded",vm:"1-n",version:"DICOM/retired"},"(0054,1401)":{tag:"(0054,1401)",vr:"CS",name:"RETIRED_DeadTimeCorrectionFlag",vm:"1",version:"DICOM/retired"},"(0070,0040)":{tag:"(0070,0040)",vr:"IS",name:"RETIRED_ImageRotationRetired",vm:"1",version:"DICOM/retired"},"(0070,0050)":{tag:"(0070,0050)",vr:"US",name:"RETIRED_DisplayedAreaTopLeftHandCornerTrial",vm:"2",version:"DICOM/retired"},"(0070,0051)":{tag:"(0070,0051)",vr:"US",name:"RETIRED_DisplayedAreaBottomRightHandCornerTrial",vm:"2",version:"DICOM/retired"},"(0070,0067)":{tag:"(0070,0067)",vr:"US",name:"RETIRED_GraphicLayerRecommendedDisplayRGBValue",vm:"3",version:"DICOM/retired"},"(0074,1024)":{tag:"(0074,1024)",vr:"IS",name:"RETIRED_BeamOrderIndexTrial",vm:"1",version:"DICOM/retired"},"(0074,1038)":{tag:"(0074,1038)",vr:"DS",name:"RETIRED_DoubleExposureMetersetTrial",vm:"1",version:"DICOM/retired"},"(0074,103A)":{tag:"(0074,103A)",vr:"DS",name:"RETIRED_DoubleExposureFieldDeltaTrial",vm:"4",version:"DICOM/retired"},"(0074,1220)":{tag:"(0074,1220)",vr:"SQ",name:"RETIRED_RelatedProcedureStepSequence",vm:"1",version:"DICOM/retired"},"(0074,1222)":{tag:"(0074,1222)",vr:"LO",name:"RETIRED_ProcedureStepRelationshipType",vm:"1",version:"DICOM/retired"},"(0088,0904)":{tag:"(0088,0904)",vr:"LO",name:"RETIRED_TopicTitle",vm:"1",version:"DICOM/retired"},"(0088,0906)":{tag:"(0088,0906)",vr:"ST",name:"RETIRED_TopicSubject",vm:"1",version:"DICOM/retired"},"(0088,0910)":{tag:"(0088,0910)",vr:"LO",name:"RETIRED_TopicAuthor",vm:"1",version:"DICOM/retired"},"(0088,0912)":{tag:"(0088,0912)",vr:"LO",name:"RETIRED_TopicKeywords",vm:"1-32",version:"DICOM/retired"},"(0400,0315)":{tag:"(0400,0315)",vr:"FL",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(1000,0010)":{tag:"(1000,0010)",vr:"US",name:"RETIRED_EscapeTriplet",vm:"3",version:"DICOM/retired"},"(1000,0011)":{tag:"(1000,0011)",vr:"US",name:"RETIRED_RunLengthTriplet",vm:"3",version:"DICOM/retired"},"(1000,0012)":{tag:"(1000,0012)",vr:"US",name:"RETIRED_HuffmanTableSize",vm:"1",version:"DICOM/retired"},"(1000,0013)":{tag:"(1000,0013)",vr:"US",name:"RETIRED_HuffmanTableTriplet",vm:"3",version:"DICOM/retired"},"(1000,0014)":{tag:"(1000,0014)",vr:"US",name:"RETIRED_ShiftTableSize",vm:"1",version:"DICOM/retired"},"(1000,0015)":{tag:"(1000,0015)",vr:"US",name:"RETIRED_ShiftTableTriplet",vm:"3",version:"DICOM/retired"},"(1010,0004)":{tag:"(1010,0004)",vr:"US",name:"RETIRED_ZonalMap",vm:"1-n",version:"DICOM/retired"},"(2000,0062)":{tag:"(2000,0062)",vr:"CS",name:"RETIRED_ColorImagePrintingFlag",vm:"1",version:"DICOM/retired"},"(2000,0063)":{tag:"(2000,0063)",vr:"CS",name:"RETIRED_CollationFlag",vm:"1",version:"DICOM/retired"},"(2000,0065)":{tag:"(2000,0065)",vr:"CS",name:"RETIRED_AnnotationFlag",vm:"1",version:"DICOM/retired"},"(2000,0067)":{tag:"(2000,0067)",vr:"CS",name:"RETIRED_ImageOverlayFlag",vm:"1",version:"DICOM/retired"},"(2000,0069)":{tag:"(2000,0069)",vr:"CS",name:"RETIRED_PresentationLUTFlag",vm:"1",version:"DICOM/retired"},"(2000,006A)":{tag:"(2000,006A)",vr:"CS",name:"RETIRED_ImageBoxPresentationLUTFlag",vm:"1",version:"DICOM/retired"},"(2000,0510)":{tag:"(2000,0510)",vr:"SQ",name:"RETIRED_ReferencedStoredPrintSequence",vm:"1",version:"DICOM/retired"},"(2020,0130)":{tag:"(2020,0130)",vr:"SQ",name:"RETIRED_ReferencedImageOverlayBoxSequence",vm:"1",version:"DICOM/retired"},"(2020,0140)":{tag:"(2020,0140)",vr:"SQ",name:"RETIRED_ReferencedVOILUTBoxSequence",vm:"1",version:"DICOM/retired"},"(2040,0010)":{tag:"(2040,0010)",vr:"SQ",name:"RETIRED_ReferencedOverlayPlaneSequence",vm:"1",version:"DICOM/retired"},"(2040,0011)":{tag:"(2040,0011)",vr:"US",name:"RETIRED_ReferencedOverlayPlaneGroups",vm:"1-99",version:"DICOM/retired"},"(2040,0020)":{tag:"(2040,0020)",vr:"SQ",name:"RETIRED_OverlayPixelDataSequence",vm:"1",version:"DICOM/retired"},"(2040,0060)":{tag:"(2040,0060)",vr:"CS",name:"RETIRED_OverlayMagnificationType",vm:"1",version:"DICOM/retired"},"(2040,0070)":{tag:"(2040,0070)",vr:"CS",name:"RETIRED_OverlaySmoothingType",vm:"1",version:"DICOM/retired"},"(2040,0072)":{tag:"(2040,0072)",vr:"CS",name:"RETIRED_OverlayOrImageMagnification",vm:"1",version:"DICOM/retired"},"(2040,0074)":{tag:"(2040,0074)",vr:"US",name:"RETIRED_MagnifyToNumberOfColumns",vm:"1",version:"DICOM/retired"},"(2040,0080)":{tag:"(2040,0080)",vr:"CS",name:"RETIRED_OverlayForegroundDensity",vm:"1",version:"DICOM/retired"},"(2040,0082)":{tag:"(2040,0082)",vr:"CS",name:"RETIRED_OverlayBackgroundDensity",vm:"1",version:"DICOM/retired"},"(2040,0090)":{tag:"(2040,0090)",vr:"CS",name:"RETIRED_OverlayMode",vm:"1",version:"DICOM/retired"},"(2040,0100)":{tag:"(2040,0100)",vr:"CS",name:"RETIRED_ThresholdDensity",vm:"1",version:"DICOM/retired"},"(2040,0500)":{tag:"(2040,0500)",vr:"SQ",name:"RETIRED_ReferencedImageBoxSequenceRetired",vm:"1",version:"DICOM/retired"},"(2100,0010)":{tag:"(2100,0010)",vr:"SH",name:"RETIRED_PrintJobID",vm:"1",version:"DICOM/retired"},"(2100,0140)":{tag:"(2100,0140)",vr:"AE",name:"RETIRED_DestinationAE",vm:"1",version:"DICOM/retired"},"(2100,0500)":{tag:"(2100,0500)",vr:"SQ",name:"RETIRED_ReferencedPrintJobSequencePullStoredPrint",vm:"1",version:"DICOM/retired"},"(2110,0099)":{tag:"(2110,0099)",vr:"SH",name:"RETIRED_PrintQueueID",vm:"1",version:"DICOM/retired"},"(2120,0010)":{tag:"(2120,0010)",vr:"CS",name:"RETIRED_QueueStatus",vm:"1",version:"DICOM/retired"},"(2120,0050)":{tag:"(2120,0050)",vr:"SQ",name:"RETIRED_PrintJobDescriptionSequence",vm:"1",version:"DICOM/retired"},"(2120,0070)":{tag:"(2120,0070)",vr:"SQ",name:"RETIRED_ReferencedPrintJobSequence",vm:"1",version:"DICOM/retired"},"(2130,0010)":{tag:"(2130,0010)",vr:"SQ",name:"RETIRED_PrintManagementCapabilitiesSequence",vm:"1",version:"DICOM/retired"},"(2130,0015)":{tag:"(2130,0015)",vr:"SQ",name:"RETIRED_PrinterCharacteristicsSequence",vm:"1",version:"DICOM/retired"},"(2130,0030)":{tag:"(2130,0030)",vr:"SQ",name:"RETIRED_FilmBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0040)":{tag:"(2130,0040)",vr:"SQ",name:"RETIRED_ImageBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0050)":{tag:"(2130,0050)",vr:"SQ",name:"RETIRED_AnnotationContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0060)":{tag:"(2130,0060)",vr:"SQ",name:"RETIRED_ImageOverlayBoxContentSequence",vm:"1",version:"DICOM/retired"},"(2130,0080)":{tag:"(2130,0080)",vr:"SQ",name:"RETIRED_PresentationLUTContentSequence",vm:"1",version:"DICOM/retired"},"(2130,00A0)":{tag:"(2130,00A0)",vr:"SQ",name:"RETIRED_ProposedStudySequence",vm:"1",version:"DICOM/retired"},"(2130,00C0)":{tag:"(2130,00C0)",vr:"SQ",name:"RETIRED_OriginalImageSequence",vm:"1",version:"DICOM/retired"},"(3006,00C0)":{tag:"(3006,00C0)",vr:"SQ",name:"RETIRED_FrameOfReferenceRelationshipSequence",vm:"1",version:"DICOM/retired"},"(3006,00C2)":{tag:"(3006,00C2)",vr:"UI",name:"RETIRED_RelatedFrameOfReferenceUID",vm:"1",version:"DICOM/retired"},"(3006,00C4)":{tag:"(3006,00C4)",vr:"CS",name:"RETIRED_FrameOfReferenceTransformationType",vm:"1",version:"DICOM/retired"},"(300A,0088)":{tag:"(300A,0088)",vr:"FL",name:"RETIRED_BeamDosePointDepth",vm:"1",version:"DICOM/retired"},"(300A,0089)":{tag:"(300A,0089)",vr:"FL",name:"RETIRED_BeamDosePointEquivalentDepth",vm:"1",version:"DICOM/retired"},"(300A,008A)":{tag:"(300A,008A)",vr:"FL",name:"RETIRED_BeamDosePointSSD",vm:"1",version:"DICOM/retired"},"(300A,0782)":{tag:"(300A,0782)",vr:"US",name:"RETIRED_undefined",vm:"1",version:"DICOM/retired"},"(4000,0010)":{tag:"(4000,0010)",vr:"LT",name:"RETIRED_Arbitrary",vm:"1",version:"DICOM/retired"},"(4000,4000)":{tag:"(4000,4000)",vr:"LT",name:"RETIRED_TextComments",vm:"1",version:"DICOM/retired"},"(4008,0040)":{tag:"(4008,0040)",vr:"SH",name:"RETIRED_ResultsID",vm:"1",version:"DICOM/retired"},"(4008,0042)":{tag:"(4008,0042)",vr:"LO",name:"RETIRED_ResultsIDIssuer",vm:"1",version:"DICOM/retired"},"(4008,0050)":{tag:"(4008,0050)",vr:"SQ",name:"RETIRED_ReferencedInterpretationSequence",vm:"1",version:"DICOM/retired"},"(4008,00FF)":{tag:"(4008,00FF)",vr:"CS",name:"RETIRED_ReportProductionStatusTrial",vm:"1",version:"DICOM/retired"},"(4008,0100)":{tag:"(4008,0100)",vr:"DA",name:"RETIRED_InterpretationRecordedDate",vm:"1",version:"DICOM/retired"},"(4008,0101)":{tag:"(4008,0101)",vr:"TM",name:"RETIRED_InterpretationRecordedTime",vm:"1",version:"DICOM/retired"},"(4008,0102)":{tag:"(4008,0102)",vr:"PN",name:"RETIRED_InterpretationRecorder",vm:"1",version:"DICOM/retired"},"(4008,0103)":{tag:"(4008,0103)",vr:"LO",name:"RETIRED_ReferenceToRecordedSound",vm:"1",version:"DICOM/retired"},"(4008,0108)":{tag:"(4008,0108)",vr:"DA",name:"RETIRED_InterpretationTranscriptionDate",vm:"1",version:"DICOM/retired"},"(4008,0109)":{tag:"(4008,0109)",vr:"TM",name:"RETIRED_InterpretationTranscriptionTime",vm:"1",version:"DICOM/retired"},"(4008,010A)":{tag:"(4008,010A)",vr:"PN",name:"RETIRED_InterpretationTranscriber",vm:"1",version:"DICOM/retired"},"(4008,010B)":{tag:"(4008,010B)",vr:"ST",name:"RETIRED_InterpretationText",vm:"1",version:"DICOM/retired"},"(4008,010C)":{tag:"(4008,010C)",vr:"PN",name:"RETIRED_InterpretationAuthor",vm:"1",version:"DICOM/retired"},"(4008,0111)":{tag:"(4008,0111)",vr:"SQ",name:"RETIRED_InterpretationApproverSequence",vm:"1",version:"DICOM/retired"},"(4008,0112)":{tag:"(4008,0112)",vr:"DA",name:"RETIRED_InterpretationApprovalDate",vm:"1",version:"DICOM/retired"},"(4008,0113)":{tag:"(4008,0113)",vr:"TM",name:"RETIRED_InterpretationApprovalTime",vm:"1",version:"DICOM/retired"},"(4008,0114)":{tag:"(4008,0114)",vr:"PN",name:"RETIRED_PhysicianApprovingInterpretation",vm:"1",version:"DICOM/retired"},"(4008,0115)":{tag:"(4008,0115)",vr:"LT",name:"RETIRED_InterpretationDiagnosisDescription",vm:"1",version:"DICOM/retired"},"(4008,0117)":{tag:"(4008,0117)",vr:"SQ",name:"RETIRED_InterpretationDiagnosisCodeSequence",vm:"1",version:"DICOM/retired"},"(4008,0118)":{tag:"(4008,0118)",vr:"SQ",name:"RETIRED_ResultsDistributionListSequence",vm:"1",version:"DICOM/retired"},"(4008,0119)":{tag:"(4008,0119)",vr:"PN",name:"RETIRED_DistributionName",vm:"1",version:"DICOM/retired"},"(4008,011A)":{tag:"(4008,011A)",vr:"LO",name:"RETIRED_DistributionAddress",vm:"1",version:"DICOM/retired"},"(4008,0200)":{tag:"(4008,0200)",vr:"SH",name:"RETIRED_InterpretationID",vm:"1",version:"DICOM/retired"},"(4008,0202)":{tag:"(4008,0202)",vr:"LO",name:"RETIRED_InterpretationIDIssuer",vm:"1",version:"DICOM/retired"},"(4008,0210)":{tag:"(4008,0210)",vr:"CS",name:"RETIRED_InterpretationTypeID",vm:"1",version:"DICOM/retired"},"(4008,0212)":{tag:"(4008,0212)",vr:"CS",name:"RETIRED_InterpretationStatusID",vm:"1",version:"DICOM/retired"},"(4008,0300)":{tag:"(4008,0300)",vr:"ST",name:"RETIRED_Impressions",vm:"1",version:"DICOM/retired"},"(4008,4000)":{tag:"(4008,4000)",vr:"ST",name:"RETIRED_ResultsComments",vm:"1",version:"DICOM/retired"},"(5000-50FF,0005)":{tag:"(5000-50FF,0005)",vr:"US",name:"RETIRED_CurveDimensions",vm:"1",version:"DICOM/retired"},"(5000-50FF,0010)":{tag:"(5000-50FF,0010)",vr:"US",name:"RETIRED_NumberOfPoints",vm:"1",version:"DICOM/retired"},"(5000-50FF,0020)":{tag:"(5000-50FF,0020)",vr:"CS",name:"RETIRED_TypeOfData",vm:"1",version:"DICOM/retired"},"(5000-50FF,0022)":{tag:"(5000-50FF,0022)",vr:"LO",name:"RETIRED_CurveDescription",vm:"1",version:"DICOM/retired"},"(5000-50FF,0030)":{tag:"(5000-50FF,0030)",vr:"SH",name:"RETIRED_AxisUnits",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0040)":{tag:"(5000-50FF,0040)",vr:"SH",name:"RETIRED_AxisLabels",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0103)":{tag:"(5000-50FF,0103)",vr:"US",name:"RETIRED_DataValueRepresentation",vm:"1",version:"DICOM/retired"},"(5000-50FF,0104)":{tag:"(5000-50FF,0104)",vr:"US",name:"RETIRED_MinimumCoordinateValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0105)":{tag:"(5000-50FF,0105)",vr:"US",name:"RETIRED_MaximumCoordinateValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0106)":{tag:"(5000-50FF,0106)",vr:"SH",name:"RETIRED_CurveRange",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0110)":{tag:"(5000-50FF,0110)",vr:"US",name:"RETIRED_CurveDataDescriptor",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0112)":{tag:"(5000-50FF,0112)",vr:"US",name:"RETIRED_CoordinateStartValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,0114)":{tag:"(5000-50FF,0114)",vr:"US",name:"RETIRED_CoordinateStepValue",vm:"1-n",version:"DICOM/retired"},"(5000-50FF,1001)":{tag:"(5000-50FF,1001)",vr:"CS",name:"RETIRED_CurveActivationLayer",vm:"1",version:"DICOM/retired"},"(5000-50FF,2000)":{tag:"(5000-50FF,2000)",vr:"US",name:"RETIRED_AudioType",vm:"1",version:"DICOM/retired"},"(5000-50FF,2002)":{tag:"(5000-50FF,2002)",vr:"US",name:"RETIRED_AudioSampleFormat",vm:"1",version:"DICOM/retired"},"(5000-50FF,2004)":{tag:"(5000-50FF,2004)",vr:"US",name:"RETIRED_NumberOfChannels",vm:"1",version:"DICOM/retired"},"(5000-50FF,2006)":{tag:"(5000-50FF,2006)",vr:"UL",name:"RETIRED_NumberOfSamples",vm:"1",version:"DICOM/retired"},"(5000-50FF,2008)":{tag:"(5000-50FF,2008)",vr:"UL",name:"RETIRED_SampleRate",vm:"1",version:"DICOM/retired"},"(5000-50FF,200A)":{tag:"(5000-50FF,200A)",vr:"UL",name:"RETIRED_TotalTime",vm:"1",version:"DICOM/retired"},"(5000-50FF,200C)":{tag:"(5000-50FF,200C)",vr:"ox",name:"RETIRED_AudioSampleData",vm:"1",version:"DICOM/retired"},"(5000-50FF,200E)":{tag:"(5000-50FF,200E)",vr:"LT",name:"RETIRED_AudioComments",vm:"1",version:"DICOM/retired"},"(5000-50FF,2500)":{tag:"(5000-50FF,2500)",vr:"LO",name:"RETIRED_CurveLabel",vm:"1",version:"DICOM/retired"},"(5000-50FF,2600)":{tag:"(5000-50FF,2600)",vr:"SQ",name:"RETIRED_CurveReferencedOverlaySequence",vm:"1",version:"DICOM/retired"},"(5000-50FF,2610)":{tag:"(5000-50FF,2610)",vr:"US",name:"RETIRED_CurveReferencedOverlayGroup",vm:"1",version:"DICOM/retired"},"(5000-50FF,3000)":{tag:"(5000-50FF,3000)",vr:"ox",name:"RETIRED_CurveData",vm:"1",version:"DICOM/retired"},"(6000-60FF,0012)":{tag:"(6000-60FF,0012)",vr:"US",name:"RETIRED_OverlayPlanes",vm:"1",version:"DICOM/retired"},"(6000-60FF,0052)":{tag:"(6000-60FF,0052)",vr:"US",name:"RETIRED_OverlayPlaneOrigin",vm:"1",version:"DICOM/retired"},"(6000-60FF,0060)":{tag:"(6000-60FF,0060)",vr:"CS",name:"RETIRED_OverlayCompressionCode",vm:"1",version:"DICOM/retired"},"(6000-60FF,0061)":{tag:"(6000-60FF,0061)",vr:"SH",name:"RETIRED_OverlayCompressionOriginator",vm:"1",version:"DICOM/retired"},"(6000-60FF,0062)":{tag:"(6000-60FF,0062)",vr:"SH",name:"RETIRED_OverlayCompressionLabel",vm:"1",version:"DICOM/retired"},"(6000-60FF,0063)":{tag:"(6000-60FF,0063)",vr:"CS",name:"RETIRED_OverlayCompressionDescription",vm:"1",version:"DICOM/retired"},"(6000-60FF,0066)":{tag:"(6000-60FF,0066)",vr:"AT",name:"RETIRED_OverlayCompressionStepPointers",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0068)":{tag:"(6000-60FF,0068)",vr:"US",name:"RETIRED_OverlayRepeatInterval",vm:"1",version:"DICOM/retired"},"(6000-60FF,0069)":{tag:"(6000-60FF,0069)",vr:"US",name:"RETIRED_OverlayBitsGrouped",vm:"1",version:"DICOM/retired"},"(6000-60FF,0110)":{tag:"(6000-60FF,0110)",vr:"CS",name:"RETIRED_OverlayFormat",vm:"1",version:"DICOM/retired"},"(6000-60FF,0200)":{tag:"(6000-60FF,0200)",vr:"US",name:"RETIRED_OverlayLocation",vm:"1",version:"DICOM/retired"},"(6000-60FF,0800)":{tag:"(6000-60FF,0800)",vr:"CS",name:"RETIRED_OverlayCodeLabel",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0802)":{tag:"(6000-60FF,0802)",vr:"US",name:"RETIRED_OverlayNumberOfTables",vm:"1",version:"DICOM/retired"},"(6000-60FF,0803)":{tag:"(6000-60FF,0803)",vr:"AT",name:"RETIRED_OverlayCodeTableLocation",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,0804)":{tag:"(6000-60FF,0804)",vr:"US",name:"RETIRED_OverlayBitsForCodeWord",vm:"1",version:"DICOM/retired"},"(6000-60FF,1100)":{tag:"(6000-60FF,1100)",vr:"US",name:"RETIRED_OverlayDescriptorGray",vm:"1",version:"DICOM/retired"},"(6000-60FF,1101)":{tag:"(6000-60FF,1101)",vr:"US",name:"RETIRED_OverlayDescriptorRed",vm:"1",version:"DICOM/retired"},"(6000-60FF,1102)":{tag:"(6000-60FF,1102)",vr:"US",name:"RETIRED_OverlayDescriptorGreen",vm:"1",version:"DICOM/retired"},"(6000-60FF,1103)":{tag:"(6000-60FF,1103)",vr:"US",name:"RETIRED_OverlayDescriptorBlue",vm:"1",version:"DICOM/retired"},"(6000-60FF,1200)":{tag:"(6000-60FF,1200)",vr:"US",name:"RETIRED_OverlaysGray",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1201)":{tag:"(6000-60FF,1201)",vr:"US",name:"RETIRED_OverlaysRed",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1202)":{tag:"(6000-60FF,1202)",vr:"US",name:"RETIRED_OverlaysGreen",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,1203)":{tag:"(6000-60FF,1203)",vr:"US",name:"RETIRED_OverlaysBlue",vm:"1-n",version:"DICOM/retired"},"(6000-60FF,4000)":{tag:"(6000-60FF,4000)",vr:"LT",name:"RETIRED_OverlayComments",vm:"1",version:"DICOM/retired"},"(7FE0,0020)":{tag:"(7FE0,0020)",vr:"OW",name:"RETIRED_CoefficientsSDVN",vm:"1",version:"DICOM/retired"},"(7FE0,0030)":{tag:"(7FE0,0030)",vr:"OW",name:"RETIRED_CoefficientsSDHN",vm:"1",version:"DICOM/retired"},"(7FE0,0040)":{tag:"(7FE0,0040)",vr:"OW",name:"RETIRED_CoefficientsSDDN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0010)":{tag:"(7F00-7FFF,0010)",vr:"ox",name:"RETIRED_VariablePixelData",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0011)":{tag:"(7F00-7FFF,0011)",vr:"US",name:"RETIRED_VariableNextDataGroup",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0020)":{tag:"(7F00-7FFF,0020)",vr:"OW",name:"RETIRED_VariableCoefficientsSDVN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0030)":{tag:"(7F00-7FFF,0030)",vr:"OW",name:"RETIRED_VariableCoefficientsSDHN",vm:"1",version:"DICOM/retired"},"(7F00-7FFF,0040)":{tag:"(7F00-7FFF,0040)",vr:"OW",name:"RETIRED_VariableCoefficientsSDDN",vm:"1",version:"DICOM/retired"},"":{tag:""},'(0019,"1.2.840.113681",10)':{tag:'(0019,"1.2.840.113681",10)',vr:"ST",name:"CRImageParamsCommon",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",11)':{tag:'(0019,"1.2.840.113681",11)',vr:"ST",name:"CRImageIPParamsSingle",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",12)':{tag:'(0019,"1.2.840.113681",12)',vr:"ST",name:"CRImageIPParamsLeft",vm:"1",version:"PrivateTag"},'(0019,"1.2.840.113681",13)':{tag:'(0019,"1.2.840.113681",13)',vr:"ST",name:"CRImageIPParamsRight",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",10)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",10)',vr:"CS",name:"MediaType",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",20)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",20)',vr:"CS",name:"MediaLocation",vm:"1",version:"PrivateTag"},'(0087,"1.2.840.113708.794.1.1.2.0",50)':{tag:'(0087,"1.2.840.113708.794.1.1.2.0",50)',vr:"IS",name:"EstimatedRetrieveTime",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",00)':{tag:'(0009,"ACUSON",00)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",01)':{tag:'(0009,"ACUSON",01)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",02)':{tag:'(0009,"ACUSON",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",03)':{tag:'(0009,"ACUSON",03)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",04)':{tag:'(0009,"ACUSON",04)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",05)':{tag:'(0009,"ACUSON",05)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",06)':{tag:'(0009,"ACUSON",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",07)':{tag:'(0009,"ACUSON",07)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",08)':{tag:'(0009,"ACUSON",08)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",09)':{tag:'(0009,"ACUSON",09)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0a)':{tag:'(0009,"ACUSON",0a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0b)':{tag:'(0009,"ACUSON",0b)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0c)':{tag:'(0009,"ACUSON",0c)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0d)':{tag:'(0009,"ACUSON",0d)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0e)':{tag:'(0009,"ACUSON",0e)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",0f)':{tag:'(0009,"ACUSON",0f)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",10)':{tag:'(0009,"ACUSON",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",11)':{tag:'(0009,"ACUSON",11)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",12)':{tag:'(0009,"ACUSON",12)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",13)':{tag:'(0009,"ACUSON",13)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",14)':{tag:'(0009,"ACUSON",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ACUSON",15)':{tag:'(0009,"ACUSON",15)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0003,"AEGIS_DICOM_2.00",00)':{tag:'(0003,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0005,"AEGIS_DICOM_2.00",00)':{tag:'(0005,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"AEGIS_DICOM_2.00",00)':{tag:'(0009,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"AEGIS_DICOM_2.00",00)':{tag:'(0019,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"AEGIS_DICOM_2.00",00)':{tag:'(0029,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(1369,"AEGIS_DICOM_2.00",00)':{tag:'(1369,"AEGIS_DICOM_2.00",00)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"AGFA",10)':{tag:'(0009,"AGFA",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",11)':{tag:'(0009,"AGFA",11)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",13)':{tag:'(0009,"AGFA",13)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",14)':{tag:'(0009,"AGFA",14)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"AGFA",15)':{tag:'(0009,"AGFA",15)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0031,"AGFA PACS Archive Mirroring 1.0",00)':{tag:'(0031,"AGFA PACS Archive Mirroring 1.0",00)',vr:"CS",name:"StudyStatus",vm:"1",version:"PrivateTag"},'(0031,"AGFA PACS Archive Mirroring 1.0",01)':{tag:'(0031,"AGFA PACS Archive Mirroring 1.0",01)',vr:"UL",name:"DateTimeVerified",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",10)':{tag:'(0029,"CAMTRONICS IP",10)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",20)':{tag:'(0029,"CAMTRONICS IP",20)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",30)':{tag:'(0029,"CAMTRONICS IP",30)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS IP",40)':{tag:'(0029,"CAMTRONICS IP",40)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",10)':{tag:'(0029,"CAMTRONICS",10)',vr:"LT",name:"Commentline",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",20)':{tag:'(0029,"CAMTRONICS",20)',vr:"DS",name:"EdgeEnhancementCoefficient",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",50)':{tag:'(0029,"CAMTRONICS",50)',vr:"LT",name:"SceneText",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",60)':{tag:'(0029,"CAMTRONICS",60)',vr:"LT",name:"ImageText",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",70)':{tag:'(0029,"CAMTRONICS",70)',vr:"IS",name:"PixelShiftHorizontal",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",80)':{tag:'(0029,"CAMTRONICS",80)',vr:"IS",name:"PixelShiftVertical",vm:"1",version:"PrivateTag"},'(0029,"CAMTRONICS",90)':{tag:'(0029,"CAMTRONICS",90)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",00)':{tag:'(0009,"CARDIO-D.R. 1.0",00)',vr:"UL",name:"FileLocation",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",01)':{tag:'(0009,"CARDIO-D.R. 1.0",01)',vr:"UL",name:"FileSize",vm:"1",version:"PrivateTag"},'(0009,"CARDIO-D.R. 1.0",40)':{tag:'(0009,"CARDIO-D.R. 1.0",40)',vr:"SQ",name:"AlternateImageSequence",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",00)':{tag:'(0019,"CARDIO-D.R. 1.0",00)',vr:"CS",name:"ImageBlankingShape",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",02)':{tag:'(0019,"CARDIO-D.R. 1.0",02)',vr:"IS",name:"ImageBlankingLeftVerticalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",04)':{tag:'(0019,"CARDIO-D.R. 1.0",04)',vr:"IS",name:"ImageBlankingRightVerticalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",06)':{tag:'(0019,"CARDIO-D.R. 1.0",06)',vr:"IS",name:"ImageBlankingUpperHorizontalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",08)':{tag:'(0019,"CARDIO-D.R. 1.0",08)',vr:"IS",name:"ImageBlankingLowerHorizontalEdge",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",10)':{tag:'(0019,"CARDIO-D.R. 1.0",10)',vr:"IS",name:"CenterOfCircularImageBlanking",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",12)':{tag:'(0019,"CARDIO-D.R. 1.0",12)',vr:"IS",name:"RadiusOfCircularImageBlanking",vm:"1",version:"PrivateTag"},'(0019,"CARDIO-D.R. 1.0",30)':{tag:'(0019,"CARDIO-D.R. 1.0",30)',vr:"UL",name:"MaximumImageFrameSize",vm:"1",version:"PrivateTag"},'(0021,"CARDIO-D.R. 1.0",13)':{tag:'(0021,"CARDIO-D.R. 1.0",13)',vr:"IS",name:"ImageSequenceNumber",vm:"1",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",00)':{tag:'(0029,"CARDIO-D.R. 1.0",00)',vr:"SQ",name:"EdgeEnhancementSequence",vm:"1",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",01)':{tag:'(0029,"CARDIO-D.R. 1.0",01)',vr:"US",name:"ConvolutionKernelSize",vm:"2",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",02)':{tag:'(0029,"CARDIO-D.R. 1.0",02)',vr:"DS",name:"ConvolutionKernelCoefficients",vm:"1-n",version:"PrivateTag"},'(0029,"CARDIO-D.R. 1.0",03)':{tag:'(0029,"CARDIO-D.R. 1.0",03)',vr:"DS",name:"EdgeEnhancementGain",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1010)':{tag:'(0025,"CMR42 CIRCLECVI",1010)',vr:"LO",name:"WorkspaceID",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1020)':{tag:'(0025,"CMR42 CIRCLECVI",1020)',vr:"LO",name:"WorkspaceTimeString",vm:"1",version:"PrivateTag"},'(0025,"CMR42 CIRCLECVI",1030)':{tag:'(0025,"CMR42 CIRCLECVI",1030)',vr:"OB",name:"WorkspaceStream",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",00)':{tag:'(0009,"DCMTK_ANONYMIZER",00)',vr:"SQ",name:"AnonymizerUIDMap",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",10)':{tag:'(0009,"DCMTK_ANONYMIZER",10)',vr:"UI",name:"AnonymizerUIDKey",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",20)':{tag:'(0009,"DCMTK_ANONYMIZER",20)',vr:"UI",name:"AnonymizerUIDValue",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",30)':{tag:'(0009,"DCMTK_ANONYMIZER",30)',vr:"SQ",name:"AnonymizerPatientIDMap",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",40)':{tag:'(0009,"DCMTK_ANONYMIZER",40)',vr:"LO",name:"AnonymizerPatientIDKey",vm:"1",version:"PrivateTag"},'(0009,"DCMTK_ANONYMIZER",50)':{tag:'(0009,"DCMTK_ANONYMIZER",50)',vr:"LO",name:"AnonymizerPatientIDValue",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",22)':{tag:'(0019,"DIDI TO PCR 1.1",22)',vr:"UN",name:"RouteAET",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",23)':{tag:'(0019,"DIDI TO PCR 1.1",23)',vr:"DS",name:"PCRPrintScale",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",24)':{tag:'(0019,"DIDI TO PCR 1.1",24)',vr:"UN",name:"PCRPrintJobEnd",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",25)':{tag:'(0019,"DIDI TO PCR 1.1",25)',vr:"IS",name:"PCRNoFilmCopies",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",26)':{tag:'(0019,"DIDI TO PCR 1.1",26)',vr:"IS",name:"PCRFilmLayoutPosition",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",27)':{tag:'(0019,"DIDI TO PCR 1.1",27)',vr:"UN",name:"PCRPrintReportName",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",70)':{tag:'(0019,"DIDI TO PCR 1.1",70)',vr:"UN",name:"RADProtocolPrinter",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",71)':{tag:'(0019,"DIDI TO PCR 1.1",71)',vr:"UN",name:"RADProtocolMedium",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",90)':{tag:'(0019,"DIDI TO PCR 1.1",90)',vr:"LO",name:"UnprocessedFlag",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",91)':{tag:'(0019,"DIDI TO PCR 1.1",91)',vr:"UN",name:"KeyValues",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",92)':{tag:'(0019,"DIDI TO PCR 1.1",92)',vr:"UN",name:"DestinationPostprocessingFunction",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A0)':{tag:'(0019,"DIDI TO PCR 1.1",A0)',vr:"UN",name:"Version",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A1)':{tag:'(0019,"DIDI TO PCR 1.1",A1)',vr:"UN",name:"RangingMode",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A2)':{tag:'(0019,"DIDI TO PCR 1.1",A2)',vr:"UN",name:"AbdomenBrightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A3)':{tag:'(0019,"DIDI TO PCR 1.1",A3)',vr:"UN",name:"FixedBrightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A4)':{tag:'(0019,"DIDI TO PCR 1.1",A4)',vr:"UN",name:"DetailContrast",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A5)':{tag:'(0019,"DIDI TO PCR 1.1",A5)',vr:"UN",name:"ContrastBalance",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A6)':{tag:'(0019,"DIDI TO PCR 1.1",A6)',vr:"UN",name:"StructureBoost",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A7)':{tag:'(0019,"DIDI TO PCR 1.1",A7)',vr:"UN",name:"StructurePreference",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A8)':{tag:'(0019,"DIDI TO PCR 1.1",A8)',vr:"UN",name:"NoiseRobustness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",A9)':{tag:'(0019,"DIDI TO PCR 1.1",A9)',vr:"UN",name:"NoiseDoseLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AA)':{tag:'(0019,"DIDI TO PCR 1.1",AA)',vr:"UN",name:"NoiseDoseStep",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AB)':{tag:'(0019,"DIDI TO PCR 1.1",AB)',vr:"UN",name:"NoiseFrequencyLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AC)':{tag:'(0019,"DIDI TO PCR 1.1",AC)',vr:"UN",name:"WeakContrastLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AD)':{tag:'(0019,"DIDI TO PCR 1.1",AD)',vr:"UN",name:"StrongContrastLimit",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AE)':{tag:'(0019,"DIDI TO PCR 1.1",AE)',vr:"UN",name:"StructureBoostOffset",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",AF)':{tag:'(0019,"DIDI TO PCR 1.1",AF)',vr:"UN",name:"SmoothGain",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B0)':{tag:'(0019,"DIDI TO PCR 1.1",B0)',vr:"UN",name:"MeasureField1",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B1)':{tag:'(0019,"DIDI TO PCR 1.1",B1)',vr:"UN",name:"MeasureField2",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B2)':{tag:'(0019,"DIDI TO PCR 1.1",B2)',vr:"UN",name:"KeyPercentile1",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B3)':{tag:'(0019,"DIDI TO PCR 1.1",B3)',vr:"UN",name:"KeyPercentile2",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B4)':{tag:'(0019,"DIDI TO PCR 1.1",B4)',vr:"UN",name:"DensityLUT",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B5)':{tag:'(0019,"DIDI TO PCR 1.1",B5)',vr:"UN",name:"Brightness",vm:"1",version:"PrivateTag"},'(0019,"DIDI TO PCR 1.1",B6)':{tag:'(0019,"DIDI TO PCR 1.1",B6)',vr:"UN",name:"Gamma",vm:"1",version:"PrivateTag"},'(0089,"DIDI TO PCR 1.1",10)':{tag:'(0089,"DIDI TO PCR 1.1",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",31)':{tag:'(0029,"DIGISCAN IMAGE",31)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",32)':{tag:'(0029,"DIGISCAN IMAGE",32)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",33)':{tag:'(0029,"DIGISCAN IMAGE",33)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"DIGISCAN IMAGE",34)':{tag:'(0029,"DIGISCAN IMAGE",34)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",04)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",04)',vr:"ST",name:"TextAnnotation",vm:"1",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",05)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",05)',vr:"IS",name:"Box",vm:"2",version:"PrivateTag"},'(7001-o-70ff,"DLX_ANNOT_01",07)':{tag:'(7001-o-70ff,"DLX_ANNOT_01",07)',vr:"IS",name:"ArrowEnd",vm:"2",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",01)':{tag:'(0015,"DLX_EXAMS_01",01)',vr:"DS",name:"StenosisCalibrationRatio",vm:"1",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",02)':{tag:'(0015,"DLX_EXAMS_01",02)',vr:"DS",name:"StenosisMagnification",vm:"1",version:"PrivateTag"},'(0015,"DLX_EXAMS_01",03)':{tag:'(0015,"DLX_EXAMS_01",03)',vr:"DS",name:"CardiacCalibrationRatio",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"DLX_LKUP_01",01)':{tag:'(6001-o-60ff,"DLX_LKUP_01",01)',vr:"US",name:"GrayPaletteColorLookupTableDescriptor",vm:"3",version:"PrivateTag"},'(6001-o-60ff,"DLX_LKUP_01",02)':{tag:'(6001-o-60ff,"DLX_LKUP_01",02)',vr:"US",name:"GrayPaletteColorLookupTableData",vm:"1",version:"PrivateTag"},'(0011,"DLX_PATNT_01",01)':{tag:'(0011,"DLX_PATNT_01",01)',vr:"LT",name:"PatientDOB",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",01)':{tag:'(0019,"DLX_SERIE_01",01)',vr:"DS",name:"AngleValueLArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",02)':{tag:'(0019,"DLX_SERIE_01",02)',vr:"DS",name:"AngleValuePArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",03)':{tag:'(0019,"DLX_SERIE_01",03)',vr:"DS",name:"AngleValueCArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",04)':{tag:'(0019,"DLX_SERIE_01",04)',vr:"CS",name:"AngleLabelLArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",05)':{tag:'(0019,"DLX_SERIE_01",05)',vr:"CS",name:"AngleLabelPArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",06)':{tag:'(0019,"DLX_SERIE_01",06)',vr:"CS",name:"AngleLabelCArm",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",07)':{tag:'(0019,"DLX_SERIE_01",07)',vr:"ST",name:"ProcedureName",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",08)':{tag:'(0019,"DLX_SERIE_01",08)',vr:"ST",name:"ExamName",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",09)':{tag:'(0019,"DLX_SERIE_01",09)',vr:"SH",name:"PatientSize",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",0a)':{tag:'(0019,"DLX_SERIE_01",0a)',vr:"IS",name:"RecordView",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",10)':{tag:'(0019,"DLX_SERIE_01",10)',vr:"DS",name:"InjectorDelay",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",11)':{tag:'(0019,"DLX_SERIE_01",11)',vr:"CS",name:"AutoInject",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",14)':{tag:'(0019,"DLX_SERIE_01",14)',vr:"IS",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",15)':{tag:'(0019,"DLX_SERIE_01",15)',vr:"CS",name:"CameraRotationEnabled",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",16)':{tag:'(0019,"DLX_SERIE_01",16)',vr:"CS",name:"ReverseSweep",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",17)':{tag:'(0019,"DLX_SERIE_01",17)',vr:"IS",name:"SpatialFilterStrength",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",18)':{tag:'(0019,"DLX_SERIE_01",18)',vr:"IS",name:"ZoomFactor",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",19)':{tag:'(0019,"DLX_SERIE_01",19)',vr:"IS",name:"XZoomCenter",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1a)':{tag:'(0019,"DLX_SERIE_01",1a)',vr:"IS",name:"YZoomCenter",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1b)':{tag:'(0019,"DLX_SERIE_01",1b)',vr:"DS",name:"Focus",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1c)':{tag:'(0019,"DLX_SERIE_01",1c)',vr:"CS",name:"Dose",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1d)':{tag:'(0019,"DLX_SERIE_01",1d)',vr:"IS",name:"SideMark",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1e)':{tag:'(0019,"DLX_SERIE_01",1e)',vr:"IS",name:"PercentageLandscape",vm:"1",version:"PrivateTag"},'(0019,"DLX_SERIE_01",1f)':{tag:'(0019,"DLX_SERIE_01",1f)',vr:"DS",name:"ExposureDuration",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",01)':{tag:'(00E1,"ELSCINT1",01)',vr:"US",name:"DataDictionaryVersion",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",14)':{tag:'(00E1,"ELSCINT1",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",22)':{tag:'(00E1,"ELSCINT1",22)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(00E1,"ELSCINT1",23)':{tag:'(00E1,"ELSCINT1",23)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(00E1,"ELSCINT1",24)':{tag:'(00E1,"ELSCINT1",24)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",25)':{tag:'(00E1,"ELSCINT1",25)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(00E1,"ELSCINT1",40)':{tag:'(00E1,"ELSCINT1",40)',vr:"SH",name:"OffsetFromCTMRImages",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",00)':{tag:'(0601,"ELSCINT1",00)',vr:"SH",name:"ImplementationVersion",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",20)':{tag:'(0601,"ELSCINT1",20)',vr:"DS",name:"RelativeTablePosition",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",21)':{tag:'(0601,"ELSCINT1",21)',vr:"DS",name:"RelativeTableHeight",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",30)':{tag:'(0601,"ELSCINT1",30)',vr:"SH",name:"SurviewDirection",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",31)':{tag:'(0601,"ELSCINT1",31)',vr:"DS",name:"SurviewLength",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",50)':{tag:'(0601,"ELSCINT1",50)',vr:"SH",name:"ImageViewType",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",70)':{tag:'(0601,"ELSCINT1",70)',vr:"DS",name:"BatchNumber",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",71)':{tag:'(0601,"ELSCINT1",71)',vr:"DS",name:"BatchSize",vm:"1",version:"PrivateTag"},'(0601,"ELSCINT1",72)':{tag:'(0601,"ELSCINT1",72)',vr:"DS",name:"BatchSliceNumber",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",04)':{tag:'(0009,"FDMS 1.0",04)',vr:"SH",name:"ImageControlUnit",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",05)':{tag:'(0009,"FDMS 1.0",05)',vr:"OW",name:"ImageUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",06)':{tag:'(0009,"FDMS 1.0",06)',vr:"OW",name:"RouteImageUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",08)':{tag:'(0009,"FDMS 1.0",08)',vr:"UL",name:"ImageDisplayInformationVersionNo",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",09)':{tag:'(0009,"FDMS 1.0",09)',vr:"UL",name:"PatientInformationVersionNo",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",0C)':{tag:'(0009,"FDMS 1.0",0C)',vr:"OW",name:"FilmUID",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",10)':{tag:'(0009,"FDMS 1.0",10)',vr:"CS",name:"ExposureUnitTypeCode",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",80)':{tag:'(0009,"FDMS 1.0",80)',vr:"LO",name:"KanjiHospitalName",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",90)':{tag:'(0009,"FDMS 1.0",90)',vr:"ST",name:"DistributionCode",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",92)':{tag:'(0009,"FDMS 1.0",92)',vr:"SH",name:"KanjiDepartmentName",vm:"1",version:"PrivateTag"},'(0009,"FDMS 1.0",F0)':{tag:'(0009,"FDMS 1.0",F0)',vr:"CS",name:"BlackeningProcessFlag",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",15)':{tag:'(0019,"FDMS 1.0",15)',vr:"LO",name:"KanjiBodyPartForExposure",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",32)':{tag:'(0019,"FDMS 1.0",32)',vr:"LO",name:"KanjiMenuName",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",40)':{tag:'(0019,"FDMS 1.0",40)',vr:"CS",name:"ImageProcessingType",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",50)':{tag:'(0019,"FDMS 1.0",50)',vr:"CS",name:"EDRMode",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",60)':{tag:'(0019,"FDMS 1.0",60)',vr:"SH",name:"RadiographersCode",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",70)':{tag:'(0019,"FDMS 1.0",70)',vr:"IS",name:"SplitExposureFormat",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",71)':{tag:'(0019,"FDMS 1.0",71)',vr:"IS",name:"NoOfSplitExposureFrames",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",80)':{tag:'(0019,"FDMS 1.0",80)',vr:"IS",name:"ReadingPositionSpecification",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",81)':{tag:'(0019,"FDMS 1.0",81)',vr:"IS",name:"ReadingSensitivityCenter",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",90)':{tag:'(0019,"FDMS 1.0",90)',vr:"SH",name:"FilmAnnotationCharacterString1",vm:"1",version:"PrivateTag"},'(0019,"FDMS 1.0",91)':{tag:'(0019,"FDMS 1.0",91)',vr:"SH",name:"FilmAnnotationCharacterString2",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",10)':{tag:'(0021,"FDMS 1.0",10)',vr:"CS",name:"FCRImageID",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",30)':{tag:'(0021,"FDMS 1.0",30)',vr:"CS",name:"SetNo",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",40)':{tag:'(0021,"FDMS 1.0",40)',vr:"IS",name:"ImageNoInTheSet",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",50)':{tag:'(0021,"FDMS 1.0",50)',vr:"CS",name:"PairProcessingInformation",vm:"1",version:"PrivateTag"},'(0021,"FDMS 1.0",80)':{tag:'(0021,"FDMS 1.0",80)',vr:"OB",name:"EquipmentTypeSpecificInformation",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",10)':{tag:'(0023,"FDMS 1.0",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",20)':{tag:'(0023,"FDMS 1.0",20)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"FDMS 1.0",30)':{tag:'(0023,"FDMS 1.0",30)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",10)':{tag:'(0025,"FDMS 1.0",10)',vr:"US",name:"RelativeLightEmissionAmountSk",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",11)':{tag:'(0025,"FDMS 1.0",11)',vr:"US",name:"TermOfCorrectionForEachIPTypeSt",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",12)':{tag:'(0025,"FDMS 1.0",12)',vr:"US",name:"ReadingGainGp",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",13)':{tag:'(0025,"FDMS 1.0",13)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",15)':{tag:'(0025,"FDMS 1.0",15)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",20)':{tag:'(0025,"FDMS 1.0",20)',vr:"US",name:"Unknown",vm:"2",version:"PrivateTag"},'(0025,"FDMS 1.0",21)':{tag:'(0025,"FDMS 1.0",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",30)':{tag:'(0025,"FDMS 1.0",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",31)':{tag:'(0025,"FDMS 1.0",31)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",32)':{tag:'(0025,"FDMS 1.0",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",33)':{tag:'(0025,"FDMS 1.0",33)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",34)':{tag:'(0025,"FDMS 1.0",34)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",40)':{tag:'(0025,"FDMS 1.0",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",41)':{tag:'(0025,"FDMS 1.0",41)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",42)':{tag:'(0025,"FDMS 1.0",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",43)':{tag:'(0025,"FDMS 1.0",43)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",50)':{tag:'(0025,"FDMS 1.0",50)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",51)':{tag:'(0025,"FDMS 1.0",51)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",52)':{tag:'(0025,"FDMS 1.0",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",53)':{tag:'(0025,"FDMS 1.0",53)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",60)':{tag:'(0025,"FDMS 1.0",60)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",61)':{tag:'(0025,"FDMS 1.0",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",62)':{tag:'(0025,"FDMS 1.0",62)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",63)':{tag:'(0025,"FDMS 1.0",63)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",70)':{tag:'(0025,"FDMS 1.0",70)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",71)':{tag:'(0025,"FDMS 1.0",71)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",72)':{tag:'(0025,"FDMS 1.0",72)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",73)':{tag:'(0025,"FDMS 1.0",73)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",74)':{tag:'(0025,"FDMS 1.0",74)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",80)':{tag:'(0025,"FDMS 1.0",80)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",81)':{tag:'(0025,"FDMS 1.0",81)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",82)':{tag:'(0025,"FDMS 1.0",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",83)':{tag:'(0025,"FDMS 1.0",83)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",84)':{tag:'(0025,"FDMS 1.0",84)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0025,"FDMS 1.0",90)':{tag:'(0025,"FDMS 1.0",90)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",91)':{tag:'(0025,"FDMS 1.0",91)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",92)':{tag:'(0025,"FDMS 1.0",92)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",93)':{tag:'(0025,"FDMS 1.0",93)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",94)':{tag:'(0025,"FDMS 1.0",94)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",95)':{tag:'(0025,"FDMS 1.0",95)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",96)':{tag:'(0025,"FDMS 1.0",96)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a0)':{tag:'(0025,"FDMS 1.0",a0)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a1)':{tag:'(0025,"FDMS 1.0",a1)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a2)':{tag:'(0025,"FDMS 1.0",a2)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0025,"FDMS 1.0",a3)':{tag:'(0025,"FDMS 1.0",a3)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",10)':{tag:'(0027,"FDMS 1.0",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",20)':{tag:'(0027,"FDMS 1.0",20)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",30)':{tag:'(0027,"FDMS 1.0",30)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",40)':{tag:'(0027,"FDMS 1.0",40)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",50)':{tag:'(0027,"FDMS 1.0",50)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",60)':{tag:'(0027,"FDMS 1.0",60)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",70)':{tag:'(0027,"FDMS 1.0",70)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",80)':{tag:'(0027,"FDMS 1.0",80)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",a0)':{tag:'(0027,"FDMS 1.0",a0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"FDMS 1.0",a1)':{tag:'(0027,"FDMS 1.0",a1)',vr:"CS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0027,"FDMS 1.0",a2)':{tag:'(0027,"FDMS 1.0",a2)',vr:"CS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0027,"FDMS 1.0",a3)':{tag:'(0027,"FDMS 1.0",a3)',vr:"SS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0029,"FDMS 1.0",20)':{tag:'(0029,"FDMS 1.0",20)',vr:"CS",name:"ImageScanningDirection",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",30)':{tag:'(0029,"FDMS 1.0",30)',vr:"CS",name:"ExtendedReadingSizeValue",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",34)':{tag:'(0029,"FDMS 1.0",34)',vr:"US",name:"MagnificationReductionRatio",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",44)':{tag:'(0029,"FDMS 1.0",44)',vr:"CS",name:"LineDensityCode",vm:"1",version:"PrivateTag"},'(0029,"FDMS 1.0",50)':{tag:'(0029,"FDMS 1.0",50)',vr:"CS",name:"DataCompressionCode",vm:"1",version:"PrivateTag"},'(2011,"FDMS 1.0",11)':{tag:'(2011,"FDMS 1.0",11)',vr:"CS",name:"ImagePosition SpecifyingFlag",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",06)':{tag:'(50F1,"FDMS 1.0",06)',vr:"CS",name:"EnergySubtractionParam",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",07)':{tag:'(50F1,"FDMS 1.0",07)',vr:"CS",name:"SubtractionRegistrationResult",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",08)':{tag:'(50F1,"FDMS 1.0",08)',vr:"CS",name:"EnergySubtractionParam2",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",09)':{tag:'(50F1,"FDMS 1.0",09)',vr:"SL",name:"AfinConversionCoefficient",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",10)':{tag:'(50F1,"FDMS 1.0",10)',vr:"CS",name:"FilmOutputFormat",vm:"1",version:"PrivateTag"},'(50F1,"FDMS 1.0",20)':{tag:'(50F1,"FDMS 1.0",20)',vr:"CS",name:"ImageProcessingModificationFlag",vm:"1",version:"PrivateTag"},'(0009,"FFP DATA",01)':{tag:'(0009,"FFP DATA",01)',vr:"UN",name:"CRHeaderInformation",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",30)':{tag:'(0019,"GE ??? From Adantage Review CS",30)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",40)':{tag:'(0019,"GE ??? From Adantage Review CS",40)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",50)':{tag:'(0019,"GE ??? From Adantage Review CS",50)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",70)':{tag:'(0019,"GE ??? From Adantage Review CS",70)',vr:"LO",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",80)':{tag:'(0019,"GE ??? From Adantage Review CS",80)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0019,"GE ??? From Adantage Review CS",90)':{tag:'(0019,"GE ??? From Adantage Review CS",90)',vr:"LO",name:"CRFilmOutputExposures",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",24)':{tag:'(0009,"GEMS_ACQU_01",24)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",25)':{tag:'(0009,"GEMS_ACQU_01",25)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",3e)':{tag:'(0009,"GEMS_ACQU_01",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",3f)':{tag:'(0009,"GEMS_ACQU_01",3f)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",42)':{tag:'(0009,"GEMS_ACQU_01",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",43)':{tag:'(0009,"GEMS_ACQU_01",43)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",f8)':{tag:'(0009,"GEMS_ACQU_01",f8)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_ACQU_01",fb)':{tag:'(0009,"GEMS_ACQU_01",fb)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",01)':{tag:'(0019,"GEMS_ACQU_01",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",02)':{tag:'(0019,"GEMS_ACQU_01",02)',vr:"SL",name:"NumberOfCellsInDetector",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",03)':{tag:'(0019,"GEMS_ACQU_01",03)',vr:"DS",name:"CellNumberAtTheta",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",04)':{tag:'(0019,"GEMS_ACQU_01",04)',vr:"DS",name:"CellSpacing",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",05)':{tag:'(0019,"GEMS_ACQU_01",05)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",06)':{tag:'(0019,"GEMS_ACQU_01",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",0e)':{tag:'(0019,"GEMS_ACQU_01",0e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",0f)':{tag:'(0019,"GEMS_ACQU_01",0f)',vr:"DS",name:"HorizontalFrameOfReference",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",11)':{tag:'(0019,"GEMS_ACQU_01",11)',vr:"SS",name:"SeriesContrast",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",12)':{tag:'(0019,"GEMS_ACQU_01",12)',vr:"SS",name:"LastPseq",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",13)':{tag:'(0019,"GEMS_ACQU_01",13)',vr:"SS",name:"StartNumberForBaseline",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",14)':{tag:'(0019,"GEMS_ACQU_01",14)',vr:"SS",name:"End NumberForBaseline",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",15)':{tag:'(0019,"GEMS_ACQU_01",15)',vr:"SS",name:"StartNumberForEnhancedScans",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",16)':{tag:'(0019,"GEMS_ACQU_01",16)',vr:"SS",name:"EndNumberForEnhancedScans",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",17)':{tag:'(0019,"GEMS_ACQU_01",17)',vr:"SS",name:"SeriesPlane",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",18)':{tag:'(0019,"GEMS_ACQU_01",18)',vr:"LO",name:"FirstScanRAS",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",19)':{tag:'(0019,"GEMS_ACQU_01",19)',vr:"DS",name:"FirstScanLocation",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1a)':{tag:'(0019,"GEMS_ACQU_01",1a)',vr:"LO",name:"LastScanRAS",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1b)':{tag:'(0019,"GEMS_ACQU_01",1b)',vr:"DS",name:"LastScanLocation",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",1e)':{tag:'(0019,"GEMS_ACQU_01",1e)',vr:"DS",name:"DisplayFieldOfView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",20)':{tag:'(0019,"GEMS_ACQU_01",20)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",22)':{tag:'(0019,"GEMS_ACQU_01",22)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",23)':{tag:'(0019,"GEMS_ACQU_01",23)',vr:"DS",name:"TableSpeed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",24)':{tag:'(0019,"GEMS_ACQU_01",24)',vr:"DS",name:"MidScanTime",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",25)':{tag:'(0019,"GEMS_ACQU_01",25)',vr:"SS",name:"MidScanFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",26)':{tag:'(0019,"GEMS_ACQU_01",26)',vr:"SL",name:"DegreesOfAzimuth",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",27)':{tag:'(0019,"GEMS_ACQU_01",27)',vr:"DS",name:"GantryPeriod",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2a)':{tag:'(0019,"GEMS_ACQU_01",2a)',vr:"DS",name:"XrayOnPosition",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2b)':{tag:'(0019,"GEMS_ACQU_01",2b)',vr:"DS",name:"XrayOffPosition",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2c)':{tag:'(0019,"GEMS_ACQU_01",2c)',vr:"SL",name:"NumberOfTriggers",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2d)':{tag:'(0019,"GEMS_ACQU_01",2d)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2e)':{tag:'(0019,"GEMS_ACQU_01",2e)',vr:"DS",name:"AngleOfFirstView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",2f)':{tag:'(0019,"GEMS_ACQU_01",2f)',vr:"DS",name:"TriggerFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",39)':{tag:'(0019,"GEMS_ACQU_01",39)',vr:"SS",name:"ScanFOVType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3a)':{tag:'(0019,"GEMS_ACQU_01",3a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3b)':{tag:'(0019,"GEMS_ACQU_01",3b)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3c)':{tag:'(0019,"GEMS_ACQU_01",3c)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3e)':{tag:'(0019,"GEMS_ACQU_01",3e)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",3f)':{tag:'(0019,"GEMS_ACQU_01",3f)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",40)':{tag:'(0019,"GEMS_ACQU_01",40)',vr:"SS",name:"StatReconFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",41)':{tag:'(0019,"GEMS_ACQU_01",41)',vr:"SS",name:"ComputeType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",42)':{tag:'(0019,"GEMS_ACQU_01",42)',vr:"SS",name:"SegmentNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",43)':{tag:'(0019,"GEMS_ACQU_01",43)',vr:"SS",name:"TotalSegmentsRequested",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",44)':{tag:'(0019,"GEMS_ACQU_01",44)',vr:"DS",name:"InterscanDelay",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",47)':{tag:'(0019,"GEMS_ACQU_01",47)',vr:"SS",name:"ViewCompressionFactor",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",48)':{tag:'(0019,"GEMS_ACQU_01",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",49)':{tag:'(0019,"GEMS_ACQU_01",49)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",4a)':{tag:'(0019,"GEMS_ACQU_01",4a)',vr:"SS",name:"TotalNumberOfRefChannels",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",4b)':{tag:'(0019,"GEMS_ACQU_01",4b)',vr:"SL",name:"DataSizeForScanData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",52)':{tag:'(0019,"GEMS_ACQU_01",52)',vr:"SS",name:"ReconPostProcessingFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",54)':{tag:'(0019,"GEMS_ACQU_01",54)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",57)':{tag:'(0019,"GEMS_ACQU_01",57)',vr:"SS",name:"CTWaterNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",58)':{tag:'(0019,"GEMS_ACQU_01",58)',vr:"SS",name:"CTBoneNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5a)':{tag:'(0019,"GEMS_ACQU_01",5a)',vr:"FL",name:"AcquisitionDuration",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5d)':{tag:'(0019,"GEMS_ACQU_01",5d)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5e)':{tag:'(0019,"GEMS_ACQU_01",5e)',vr:"SL",name:"NumberOfChannels1To512",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",5f)':{tag:'(0019,"GEMS_ACQU_01",5f)',vr:"SL",name:"IncrementBetweenChannels",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",60)':{tag:'(0019,"GEMS_ACQU_01",60)',vr:"SL",name:"StartingView",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",61)':{tag:'(0019,"GEMS_ACQU_01",61)',vr:"SL",name:"NumberOfViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",62)':{tag:'(0019,"GEMS_ACQU_01",62)',vr:"SL",name:"IncrementBetweenViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",6a)':{tag:'(0019,"GEMS_ACQU_01",6a)',vr:"SS",name:"DependantOnNumberOfViewsProcessed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",6b)':{tag:'(0019,"GEMS_ACQU_01",6b)',vr:"SS",name:"FieldOfViewInDetectorCells",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",70)':{tag:'(0019,"GEMS_ACQU_01",70)',vr:"SS",name:"ValueOfBackProjectionButton",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",71)':{tag:'(0019,"GEMS_ACQU_01",71)',vr:"SS",name:"SetIfFatqEstimatesWereUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",72)':{tag:'(0019,"GEMS_ACQU_01",72)',vr:"DS",name:"ZChannelAvgOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",73)':{tag:'(0019,"GEMS_ACQU_01",73)',vr:"DS",name:"AvgOfLeftRefChannelsOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",74)':{tag:'(0019,"GEMS_ACQU_01",74)',vr:"DS",name:"MaxLeftChannelOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",75)':{tag:'(0019,"GEMS_ACQU_01",75)',vr:"DS",name:"AvgOfRightRefChannelsOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",76)':{tag:'(0019,"GEMS_ACQU_01",76)',vr:"DS",name:"MaxRightChannelOverViews",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7d)':{tag:'(0019,"GEMS_ACQU_01",7d)',vr:"DS",name:"SecondEcho",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7e)':{tag:'(0019,"GEMS_ACQU_01",7e)',vr:"SS",name:"NumberOfEchos",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",7f)':{tag:'(0019,"GEMS_ACQU_01",7f)',vr:"DS",name:"TableDelta",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",81)':{tag:'(0019,"GEMS_ACQU_01",81)',vr:"SS",name:"Contiguous",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",82)':{tag:'(0019,"GEMS_ACQU_01",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",83)':{tag:'(0019,"GEMS_ACQU_01",83)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",84)':{tag:'(0019,"GEMS_ACQU_01",84)',vr:"DS",name:"PeakSAR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",85)':{tag:'(0019,"GEMS_ACQU_01",85)',vr:"SS",name:"MonitorSAR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",86)':{tag:'(0019,"GEMS_ACQU_01",86)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",87)':{tag:'(0019,"GEMS_ACQU_01",87)',vr:"DS",name:"CardiacRepetition Time",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",88)':{tag:'(0019,"GEMS_ACQU_01",88)',vr:"SS",name:"ImagesPerCardiacCycle",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8a)':{tag:'(0019,"GEMS_ACQU_01",8a)',vr:"SS",name:"ActualReceiveGainAnalog",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8b)':{tag:'(0019,"GEMS_ACQU_01",8b)',vr:"SS",name:"ActualReceiveGainDigital",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8d)':{tag:'(0019,"GEMS_ACQU_01",8d)',vr:"DS",name:"DelayAfterTrigger",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",8f)':{tag:'(0019,"GEMS_ACQU_01",8f)',vr:"SS",name:"SwapPhaseFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",90)':{tag:'(0019,"GEMS_ACQU_01",90)',vr:"SS",name:"PauseInterval",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",91)':{tag:'(0019,"GEMS_ACQU_01",91)',vr:"DS",name:"PulseTime",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",92)':{tag:'(0019,"GEMS_ACQU_01",92)',vr:"SL",name:"SliceOffsetOnFrequencyAxis",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",93)':{tag:'(0019,"GEMS_ACQU_01",93)',vr:"DS",name:"CenterFrequency",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",94)':{tag:'(0019,"GEMS_ACQU_01",94)',vr:"SS",name:"TransmitGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",95)':{tag:'(0019,"GEMS_ACQU_01",95)',vr:"SS",name:"AnalogReceiverGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",96)':{tag:'(0019,"GEMS_ACQU_01",96)',vr:"SS",name:"DigitalReceiverGain",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",97)':{tag:'(0019,"GEMS_ACQU_01",97)',vr:"SL",name:"BitmapDefiningCVs",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",98)':{tag:'(0019,"GEMS_ACQU_01",98)',vr:"SS",name:"CenterFrequencyMethod",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",99)':{tag:'(0019,"GEMS_ACQU_01",99)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9b)':{tag:'(0019,"GEMS_ACQU_01",9b)',vr:"SS",name:"PulseSequenceMode",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9c)':{tag:'(0019,"GEMS_ACQU_01",9c)',vr:"LO",name:"PulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9d)':{tag:'(0019,"GEMS_ACQU_01",9d)',vr:"DT",name:"PulseSequenceDate",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9e)':{tag:'(0019,"GEMS_ACQU_01",9e)',vr:"LO",name:"InternalPulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",9f)':{tag:'(0019,"GEMS_ACQU_01",9f)',vr:"SS",name:"TransmittingCoil",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a0)':{tag:'(0019,"GEMS_ACQU_01",a0)',vr:"SS",name:"SurfaceCoilType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a1)':{tag:'(0019,"GEMS_ACQU_01",a1)',vr:"SS",name:"ExtremityCoilFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a2)':{tag:'(0019,"GEMS_ACQU_01",a2)',vr:"SL",name:"RawDataRunNumber",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a3)':{tag:'(0019,"GEMS_ACQU_01",a3)',vr:"UL",name:"CalibratedFieldStrength",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a4)':{tag:'(0019,"GEMS_ACQU_01",a4)',vr:"SS",name:"SATFatWaterBone",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a5)':{tag:'(0019,"GEMS_ACQU_01",a5)',vr:"DS",name:"ReceiveBandwidth",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a7)':{tag:'(0019,"GEMS_ACQU_01",a7)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a8)':{tag:'(0019,"GEMS_ACQU_01",a8)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",a9)':{tag:'(0019,"GEMS_ACQU_01",a9)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",aa)':{tag:'(0019,"GEMS_ACQU_01",aa)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ab)':{tag:'(0019,"GEMS_ACQU_01",ab)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ac)':{tag:'(0019,"GEMS_ACQU_01",ac)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ad)':{tag:'(0019,"GEMS_ACQU_01",ad)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ae)':{tag:'(0019,"GEMS_ACQU_01",ae)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",af)':{tag:'(0019,"GEMS_ACQU_01",af)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b0)':{tag:'(0019,"GEMS_ACQU_01",b0)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b1)':{tag:'(0019,"GEMS_ACQU_01",b1)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b2)':{tag:'(0019,"GEMS_ACQU_01",b2)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b3)':{tag:'(0019,"GEMS_ACQU_01",b3)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b4)':{tag:'(0019,"GEMS_ACQU_01",b4)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b5)':{tag:'(0019,"GEMS_ACQU_01",b5)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b6)':{tag:'(0019,"GEMS_ACQU_01",b6)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b7)':{tag:'(0019,"GEMS_ACQU_01",b7)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b8)':{tag:'(0019,"GEMS_ACQU_01",b8)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",b9)':{tag:'(0019,"GEMS_ACQU_01",b9)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ba)':{tag:'(0019,"GEMS_ACQU_01",ba)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bb)':{tag:'(0019,"GEMS_ACQU_01",bb)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bc)':{tag:'(0019,"GEMS_ACQU_01",bc)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",bd)':{tag:'(0019,"GEMS_ACQU_01",bd)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",be)':{tag:'(0019,"GEMS_ACQU_01",be)',vr:"DS",name:"ProjectionAngle",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c0)':{tag:'(0019,"GEMS_ACQU_01",c0)',vr:"SS",name:"SaturationPlanes",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c1)':{tag:'(0019,"GEMS_ACQU_01",c1)',vr:"SS",name:"SurfaceCoilIntensityCorrectionFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c2)':{tag:'(0019,"GEMS_ACQU_01",c2)',vr:"SS",name:"SATLocationR",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c3)':{tag:'(0019,"GEMS_ACQU_01",c3)',vr:"SS",name:"SATLocationL",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c4)':{tag:'(0019,"GEMS_ACQU_01",c4)',vr:"SS",name:"SATLocationA",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c5)':{tag:'(0019,"GEMS_ACQU_01",c5)',vr:"SS",name:"SATLocationP",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c6)':{tag:'(0019,"GEMS_ACQU_01",c6)',vr:"SS",name:"SATLocationH",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c7)':{tag:'(0019,"GEMS_ACQU_01",c7)',vr:"SS",name:"SATLocationF",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c8)':{tag:'(0019,"GEMS_ACQU_01",c8)',vr:"SS",name:"SATThicknessRL",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",c9)':{tag:'(0019,"GEMS_ACQU_01",c9)',vr:"SS",name:"SATThicknessAP",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ca)':{tag:'(0019,"GEMS_ACQU_01",ca)',vr:"SS",name:"SATThicknessHF",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cb)':{tag:'(0019,"GEMS_ACQU_01",cb)',vr:"SS",name:"PrescribedFlowAxis",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cc)':{tag:'(0019,"GEMS_ACQU_01",cc)',vr:"SS",name:"VelocityEncoding",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cd)':{tag:'(0019,"GEMS_ACQU_01",cd)',vr:"SS",name:"ThicknessDisclaimer",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ce)':{tag:'(0019,"GEMS_ACQU_01",ce)',vr:"SS",name:"PrescanType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",cf)':{tag:'(0019,"GEMS_ACQU_01",cf)',vr:"SS",name:"PrescanStatus",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d0)':{tag:'(0019,"GEMS_ACQU_01",d0)',vr:"SH",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d2)':{tag:'(0019,"GEMS_ACQU_01",d2)',vr:"SS",name:"ProjectionAlgorithm",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d3)':{tag:'(0019,"GEMS_ACQU_01",d3)',vr:"SH",name:"ProjectionAlgorithm",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d4)':{tag:'(0019,"GEMS_ACQU_01",d4)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d5)':{tag:'(0019,"GEMS_ACQU_01",d5)',vr:"SS",name:"FractionalEcho",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d6)':{tag:'(0019,"GEMS_ACQU_01",d6)',vr:"SS",name:"PrepPulse",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d7)':{tag:'(0019,"GEMS_ACQU_01",d7)',vr:"SS",name:"CardiacPhases",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d8)':{tag:'(0019,"GEMS_ACQU_01",d8)',vr:"SS",name:"VariableEchoFlag",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",d9)':{tag:'(0019,"GEMS_ACQU_01",d9)',vr:"DS",name:"ConcatenatedSAT",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",da)':{tag:'(0019,"GEMS_ACQU_01",da)',vr:"SS",name:"ReferenceChannelUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",db)':{tag:'(0019,"GEMS_ACQU_01",db)',vr:"DS",name:"BackProjectorCoefficient",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",dc)':{tag:'(0019,"GEMS_ACQU_01",dc)',vr:"SS",name:"PrimarySpeedCorrectionUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",dd)':{tag:'(0019,"GEMS_ACQU_01",dd)',vr:"SS",name:"OverrangeCorrectionUsed",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",de)':{tag:'(0019,"GEMS_ACQU_01",de)',vr:"DS",name:"DynamicZAlphaValue",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",df)':{tag:'(0019,"GEMS_ACQU_01",df)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e0)':{tag:'(0019,"GEMS_ACQU_01",e0)',vr:"DS",name:"UserData",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e1)':{tag:'(0019,"GEMS_ACQU_01",e1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e2)':{tag:'(0019,"GEMS_ACQU_01",e2)',vr:"DS",name:"VelocityEncodeScale",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e3)':{tag:'(0019,"GEMS_ACQU_01",e3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e4)':{tag:'(0019,"GEMS_ACQU_01",e4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e5)':{tag:'(0019,"GEMS_ACQU_01",e5)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e6)':{tag:'(0019,"GEMS_ACQU_01",e6)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e8)':{tag:'(0019,"GEMS_ACQU_01",e8)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",e9)':{tag:'(0019,"GEMS_ACQU_01",e9)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",eb)':{tag:'(0019,"GEMS_ACQU_01",eb)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",ec)':{tag:'(0019,"GEMS_ACQU_01",ec)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f0)':{tag:'(0019,"GEMS_ACQU_01",f0)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f1)':{tag:'(0019,"GEMS_ACQU_01",f1)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f2)':{tag:'(0019,"GEMS_ACQU_01",f2)',vr:"SS",name:"FastPhases",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f3)':{tag:'(0019,"GEMS_ACQU_01",f3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f4)':{tag:'(0019,"GEMS_ACQU_01",f4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GEMS_ACQU_01",f9)':{tag:'(0019,"GEMS_ACQU_01",f9)',vr:"DS",name:"TransmitGain",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",00)',vr:"LO",name:"CRExposureMenuCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",10)',vr:"LO",name:"CRExposureMenuString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",20)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",30)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",40)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",50)',vr:"US",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",60)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",70)',vr:"LO",name:"CRFilmOutputExposure",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",80)',vr:"LO",name:"CRFilmFormat",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK1",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK1",90)',vr:"LO",name:"CRSShiftString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",00)',vr:"US",name:"CRSShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",10)',vr:"DS",name:"CRCShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",20)',vr:"DS",name:"CRGT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",30)',vr:"DS",name:"CRGA",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",40)',vr:"DS",name:"CRGC",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",50)',vr:"DS",name:"CRGS",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",60)',vr:"DS",name:"CRRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",70)',vr:"DS",name:"CRRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",80)',vr:"US",name:"CRRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK2",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK2",90)',vr:"DS",name:"CRDRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",00)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",00)',vr:"DS",name:"CRDRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",10)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",10)',vr:"US",name:"CRDRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",20)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",20)',vr:"DS",name:"CRORE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",30)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",30)',vr:"US",name:"CRORN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",40)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",40)',vr:"US",name:"CRORD",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",50)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",50)',vr:"LO",name:"CRCassetteSize",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",60)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",60)',vr:"LO",name:"CRMachineID",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",70)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",70)',vr:"LO",name:"CRMachineType",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",80)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",80)',vr:"LO",name:"CRTechnicianCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_1.0 BLOCK3",90)':{tag:'(0023,"GEMS_ACRQA_1.0 BLOCK3",90)',vr:"LO",name:"CREnergySubtractionParameters",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",00)',vr:"LO",name:"CRExposureMenuCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",10)',vr:"LO",name:"CRExposureMenuString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",20)',vr:"LO",name:"CREDRMode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",30)',vr:"LO",name:"CRLatitude",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",40)',vr:"LO",name:"CRGroupNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",50)',vr:"US",name:"CRImageSerialNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",60)',vr:"LO",name:"CRBarCodeNumber",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",70)',vr:"LO",name:"CRFilmOutputExposure",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",80)',vr:"LO",name:"CRFilmFormat",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK1",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK1",90)',vr:"LO",name:"CRSShiftString",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",00)',vr:"US",name:"CRSShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",10)',vr:"LO",name:"CRCShift",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",20)',vr:"LO",name:"CRGT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",30)',vr:"DS",name:"CRGA",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",40)',vr:"DS",name:"CRGC",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",50)',vr:"DS",name:"CRGS",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",60)',vr:"LO",name:"CRRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",70)',vr:"DS",name:"CRRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",80)',vr:"US",name:"CRRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK2",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK2",90)',vr:"DS",name:"CRDRT",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",00)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",00)',vr:"DS",name:"CRDRE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",10)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",10)',vr:"US",name:"CRDRN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",20)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",20)',vr:"DS",name:"CRORE",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",30)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",30)',vr:"US",name:"CRORN",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",40)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",40)',vr:"US",name:"CRORD",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",50)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",50)',vr:"LO",name:"CRCassetteSize",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",60)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",60)',vr:"LO",name:"CRMachineID",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",70)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",70)',vr:"LO",name:"CRMachineType",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",80)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",80)',vr:"LO",name:"CRTechnicianCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",90)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",90)',vr:"LO",name:"CREnergySubtractionParameters",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",f0)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",f0)',vr:"LO",name:"CRDistributionCode",vm:"1",version:"PrivateTag"},'(0023,"GEMS_ACRQA_2.0 BLOCK3",ff)':{tag:'(0023,"GEMS_ACRQA_2.0 BLOCK3",ff)',vr:"US",name:"CRShuttersApplied",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",01)':{tag:'(0047,"GEMS_ADWSoft_3D1",01)',vr:"SQ",name:"Reconstruction Parameters Sequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",50)':{tag:'(0047,"GEMS_ADWSoft_3D1",50)',vr:"UL",name:"VolumeVoxelCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",51)':{tag:'(0047,"GEMS_ADWSoft_3D1",51)',vr:"UL",name:"VolumeSegmentCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",53)':{tag:'(0047,"GEMS_ADWSoft_3D1",53)',vr:"US",name:"VolumeSliceSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",54)':{tag:'(0047,"GEMS_ADWSoft_3D1",54)',vr:"US",name:"VolumeSliceCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",55)':{tag:'(0047,"GEMS_ADWSoft_3D1",55)',vr:"SL",name:"VolumeThresholdValue",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",57)':{tag:'(0047,"GEMS_ADWSoft_3D1",57)',vr:"DS",name:"VolumeVoxelRatio",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",58)':{tag:'(0047,"GEMS_ADWSoft_3D1",58)',vr:"DS",name:"VolumeVoxelSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",59)':{tag:'(0047,"GEMS_ADWSoft_3D1",59)',vr:"US",name:"VolumeZPositionSize",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",60)':{tag:'(0047,"GEMS_ADWSoft_3D1",60)',vr:"DS",name:"VolumeBaseLine",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",61)':{tag:'(0047,"GEMS_ADWSoft_3D1",61)',vr:"DS",name:"VolumeCenterPoint",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",63)':{tag:'(0047,"GEMS_ADWSoft_3D1",63)',vr:"SL",name:"VolumeSkewBase",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",64)':{tag:'(0047,"GEMS_ADWSoft_3D1",64)',vr:"DS",name:"VolumeRegistrationTransformRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",65)':{tag:'(0047,"GEMS_ADWSoft_3D1",65)',vr:"DS",name:"VolumeRegistrationTransformTranslationVector",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",70)':{tag:'(0047,"GEMS_ADWSoft_3D1",70)',vr:"DS",name:"KVPList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",71)':{tag:'(0047,"GEMS_ADWSoft_3D1",71)',vr:"IS",name:"XRayTubeCurrentList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",72)':{tag:'(0047,"GEMS_ADWSoft_3D1",72)',vr:"IS",name:"ExposureList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",80)':{tag:'(0047,"GEMS_ADWSoft_3D1",80)',vr:"LO",name:"AcquisitionDLXIdentifier",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",85)':{tag:'(0047,"GEMS_ADWSoft_3D1",85)',vr:"SQ",name:"AcquisitionDLX2DSeriesSequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",89)':{tag:'(0047,"GEMS_ADWSoft_3D1",89)',vr:"DS",name:"ContrastAgentVolumeList",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",8A)':{tag:'(0047,"GEMS_ADWSoft_3D1",8A)',vr:"US",name:"NumberOfInjections",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",8B)':{tag:'(0047,"GEMS_ADWSoft_3D1",8B)',vr:"US",name:"FrameCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",91)':{tag:'(0047,"GEMS_ADWSoft_3D1",91)',vr:"LO",name:"XA3DReconstructionAlgorithmName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",92)':{tag:'(0047,"GEMS_ADWSoft_3D1",92)',vr:"CS",name:"XA3DReconstructionAlgorithmVersion",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",93)':{tag:'(0047,"GEMS_ADWSoft_3D1",93)',vr:"DA",name:"DLXCalibrationDate",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",94)':{tag:'(0047,"GEMS_ADWSoft_3D1",94)',vr:"TM",name:"DLXCalibrationTime",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",95)':{tag:'(0047,"GEMS_ADWSoft_3D1",95)',vr:"CS",name:"DLXCalibrationStatus",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",96)':{tag:'(0047,"GEMS_ADWSoft_3D1",96)',vr:"IS",name:"UsedFrames",vm:"1-n",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",98)':{tag:'(0047,"GEMS_ADWSoft_3D1",98)',vr:"US",name:"TransformCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",99)':{tag:'(0047,"GEMS_ADWSoft_3D1",99)',vr:"SQ",name:"TransformSequence",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9A)':{tag:'(0047,"GEMS_ADWSoft_3D1",9A)',vr:"DS",name:"TransformRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9B)':{tag:'(0047,"GEMS_ADWSoft_3D1",9B)',vr:"DS",name:"TransformTranslationVector",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",9C)':{tag:'(0047,"GEMS_ADWSoft_3D1",9C)',vr:"LO",name:"TransformLabel",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B0)':{tag:'(0047,"GEMS_ADWSoft_3D1",B0)',vr:"SQ",name:"WireframeList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B1)':{tag:'(0047,"GEMS_ADWSoft_3D1",B1)',vr:"US",name:"WireframeCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B2)':{tag:'(0047,"GEMS_ADWSoft_3D1",B2)',vr:"US",name:"LocationSystem",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B5)':{tag:'(0047,"GEMS_ADWSoft_3D1",B5)',vr:"LO",name:"WireframeName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B6)':{tag:'(0047,"GEMS_ADWSoft_3D1",B6)',vr:"LO",name:"WireframeGroupName",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B7)':{tag:'(0047,"GEMS_ADWSoft_3D1",B7)',vr:"LO",name:"WireframeColor",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B8)':{tag:'(0047,"GEMS_ADWSoft_3D1",B8)',vr:"SL",name:"WireframeAttributes",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",B9)':{tag:'(0047,"GEMS_ADWSoft_3D1",B9)',vr:"SL",name:"WireframePointCount",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BA)':{tag:'(0047,"GEMS_ADWSoft_3D1",BA)',vr:"SL",name:"WireframeTimestamp",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BB)':{tag:'(0047,"GEMS_ADWSoft_3D1",BB)',vr:"SQ",name:"WireframePointList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",BC)':{tag:'(0047,"GEMS_ADWSoft_3D1",BC)',vr:"DS",name:"WireframePointsCoordinates",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C0)':{tag:'(0047,"GEMS_ADWSoft_3D1",C0)',vr:"DS",name:"VolumeUpperLeftHighCornerRAS",vm:"3",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C1)':{tag:'(0047,"GEMS_ADWSoft_3D1",C1)',vr:"DS",name:"VolumeSliceToRASRotationMatrix",vm:"9",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",C2)':{tag:'(0047,"GEMS_ADWSoft_3D1",C2)',vr:"DS",name:"VolumeUpperLeftHighCornerTLOC",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D1)':{tag:'(0047,"GEMS_ADWSoft_3D1",D1)',vr:"OB",name:"VolumeSegmentList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D2)':{tag:'(0047,"GEMS_ADWSoft_3D1",D2)',vr:"OB",name:"VolumeGradientList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D3)':{tag:'(0047,"GEMS_ADWSoft_3D1",D3)',vr:"OB",name:"VolumeDensityList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D4)':{tag:'(0047,"GEMS_ADWSoft_3D1",D4)',vr:"OB",name:"VolumeZPositionList",vm:"1",version:"PrivateTag"},'(0047,"GEMS_ADWSoft_3D1",D5)':{tag:'(0047,"GEMS_ADWSoft_3D1",D5)',vr:"OB",name:"VolumeOriginalIndexList",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",80)':{tag:'(0039,"GEMS_ADWSoft_DPO",80)',vr:"IS",name:"PrivateEntityNumber",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",85)':{tag:'(0039,"GEMS_ADWSoft_DPO",85)',vr:"DA",name:"PrivateEntityDate",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",90)':{tag:'(0039,"GEMS_ADWSoft_DPO",90)',vr:"TM",name:"PrivateEntityTime",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",95)':{tag:'(0039,"GEMS_ADWSoft_DPO",95)',vr:"LO",name:"PrivateEntityLaunchCommand",vm:"1",version:"PrivateTag"},'(0039,"GEMS_ADWSoft_DPO",AA)':{tag:'(0039,"GEMS_ADWSoft_DPO",AA)',vr:"CS",name:"PrivateEntityType",vm:"1",version:"PrivateTag"},'(0033,"GEMS_CTHD_01",02)':{tag:'(0033,"GEMS_CTHD_01",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",10)':{tag:'(0037,"GEMS_DRS_1",10)',vr:"LO",name:"ReferringDepartment",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",20)':{tag:'(0037,"GEMS_DRS_1",20)',vr:"US",name:"ScreenNumber",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",40)':{tag:'(0037,"GEMS_DRS_1",40)',vr:"SH",name:"LeftOrientation",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",42)':{tag:'(0037,"GEMS_DRS_1",42)',vr:"SH",name:"RightOrientation",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",50)':{tag:'(0037,"GEMS_DRS_1",50)',vr:"CS",name:"Inversion",vm:"1",version:"PrivateTag"},'(0037,"GEMS_DRS_1",60)':{tag:'(0037,"GEMS_DRS_1",60)',vr:"US",name:"DSA",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",10)':{tag:'(0009,"GEMS_GENIE_1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",11)':{tag:'(0009,"GEMS_GENIE_1",11)',vr:"SL",name:"StudyFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",12)':{tag:'(0009,"GEMS_GENIE_1",12)',vr:"SL",name:"StudyType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",1e)':{tag:'(0009,"GEMS_GENIE_1",1e)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",20)':{tag:'(0009,"GEMS_GENIE_1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",21)':{tag:'(0009,"GEMS_GENIE_1",21)',vr:"SL",name:"SeriesFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",22)':{tag:'(0009,"GEMS_GENIE_1",22)',vr:"SH",name:"UserOrientation",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",23)':{tag:'(0009,"GEMS_GENIE_1",23)',vr:"SL",name:"InitiationType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",24)':{tag:'(0009,"GEMS_GENIE_1",24)',vr:"SL",name:"InitiationDelay",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",25)':{tag:'(0009,"GEMS_GENIE_1",25)',vr:"SL",name:"InitiationCountRate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",26)':{tag:'(0009,"GEMS_GENIE_1",26)',vr:"SL",name:"NumberEnergySets",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",27)':{tag:'(0009,"GEMS_GENIE_1",27)',vr:"SL",name:"NumberDetectors",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",29)':{tag:'(0009,"GEMS_GENIE_1",29)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2a)':{tag:'(0009,"GEMS_GENIE_1",2a)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2c)':{tag:'(0009,"GEMS_GENIE_1",2c)',vr:"LO",name:"SeriesComments",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2d)':{tag:'(0009,"GEMS_GENIE_1",2d)',vr:"SL",name:"TrackBeatAverage",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",2e)':{tag:'(0009,"GEMS_GENIE_1",2e)',vr:"FD",name:"DistancePrescribed",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",30)':{tag:'(0009,"GEMS_GENIE_1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",35)':{tag:'(0009,"GEMS_GENIE_1",35)',vr:"SL",name:"GantryLocusType",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",37)':{tag:'(0009,"GEMS_GENIE_1",37)',vr:"SL",name:"StartingHeartRate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",38)':{tag:'(0009,"GEMS_GENIE_1",38)',vr:"SL",name:"RRWindowWidth",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",39)':{tag:'(0009,"GEMS_GENIE_1",39)',vr:"SL",name:"RRWindowOffset",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",3a)':{tag:'(0009,"GEMS_GENIE_1",3a)',vr:"SL",name:"PercentCycleImaged",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",40)':{tag:'(0009,"GEMS_GENIE_1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",41)':{tag:'(0009,"GEMS_GENIE_1",41)',vr:"SL",name:"PatientFlags",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",42)':{tag:'(0009,"GEMS_GENIE_1",42)',vr:"DA",name:"PatientCreationDate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_GENIE_1",43)':{tag:'(0009,"GEMS_GENIE_1",43)',vr:"TM",name:"PatientCreationTime",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0a)':{tag:'(0011,"GEMS_GENIE_1",0a)',vr:"SL",name:"SeriesType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0b)':{tag:'(0011,"GEMS_GENIE_1",0b)',vr:"SL",name:"EffectiveSeriesDuration",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0c)':{tag:'(0011,"GEMS_GENIE_1",0c)',vr:"SL",name:"NumBeats",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",0d)':{tag:'(0011,"GEMS_GENIE_1",0d)',vr:"LO",name:"RadioNuclideName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",10)':{tag:'(0011,"GEMS_GENIE_1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",12)':{tag:'(0011,"GEMS_GENIE_1",12)',vr:"LO",name:"DatasetName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",13)':{tag:'(0011,"GEMS_GENIE_1",13)',vr:"SL",name:"DatasetType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",15)':{tag:'(0011,"GEMS_GENIE_1",15)',vr:"SL",name:"DetectorNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",16)':{tag:'(0011,"GEMS_GENIE_1",16)',vr:"SL",name:"EnergyNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",17)':{tag:'(0011,"GEMS_GENIE_1",17)',vr:"SL",name:"RRIntervalWindowNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",18)':{tag:'(0011,"GEMS_GENIE_1",18)',vr:"SL",name:"MGBinNumber",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",19)':{tag:'(0011,"GEMS_GENIE_1",19)',vr:"FD",name:"RadiusOfRotation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1a)':{tag:'(0011,"GEMS_GENIE_1",1a)',vr:"SL",name:"DetectorCountZone",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1b)':{tag:'(0011,"GEMS_GENIE_1",1b)',vr:"SL",name:"NumEnergyWindows",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1c)':{tag:'(0011,"GEMS_GENIE_1",1c)',vr:"SL",name:"EnergyOffset",vm:"4",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1d)':{tag:'(0011,"GEMS_GENIE_1",1d)',vr:"SL",name:"EnergyRange",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",1f)':{tag:'(0011,"GEMS_GENIE_1",1f)',vr:"SL",name:"ImageOrientation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",23)':{tag:'(0011,"GEMS_GENIE_1",23)',vr:"SL",name:"UseFOVMask",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",24)':{tag:'(0011,"GEMS_GENIE_1",24)',vr:"SL",name:"FOVMaskYCutoffAngle",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",25)':{tag:'(0011,"GEMS_GENIE_1",25)',vr:"SL",name:"FOVMaskCutoffAngle",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",26)':{tag:'(0011,"GEMS_GENIE_1",26)',vr:"SL",name:"TableOrientation",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",27)':{tag:'(0011,"GEMS_GENIE_1",27)',vr:"SL",name:"ROITopLeft",vm:"2",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",28)':{tag:'(0011,"GEMS_GENIE_1",28)',vr:"SL",name:"ROIBottomRight",vm:"2",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",30)':{tag:'(0011,"GEMS_GENIE_1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",33)':{tag:'(0011,"GEMS_GENIE_1",33)',vr:"LO",name:"EnergyCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",34)':{tag:'(0011,"GEMS_GENIE_1",34)',vr:"LO",name:"SpatialCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",35)':{tag:'(0011,"GEMS_GENIE_1",35)',vr:"LO",name:"TuningCalibName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",36)':{tag:'(0011,"GEMS_GENIE_1",36)',vr:"LO",name:"UniformityCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",37)':{tag:'(0011,"GEMS_GENIE_1",37)',vr:"LO",name:"AcquisitionSpecificCorrectName",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",38)':{tag:'(0011,"GEMS_GENIE_1",38)',vr:"SL",name:"ByteOrder",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3a)':{tag:'(0011,"GEMS_GENIE_1",3a)',vr:"SL",name:"PictureFormat",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3b)':{tag:'(0011,"GEMS_GENIE_1",3b)',vr:"FD",name:"PixelScale",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3c)':{tag:'(0011,"GEMS_GENIE_1",3c)',vr:"FD",name:"PixelOffset",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3e)':{tag:'(0011,"GEMS_GENIE_1",3e)',vr:"SL",name:"FOVShape",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",3f)':{tag:'(0011,"GEMS_GENIE_1",3f)',vr:"SL",name:"DatasetFlags",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",44)':{tag:'(0011,"GEMS_GENIE_1",44)',vr:"FD",name:"ThresholdCenter",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",45)':{tag:'(0011,"GEMS_GENIE_1",45)',vr:"FD",name:"ThresholdWidth",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",46)':{tag:'(0011,"GEMS_GENIE_1",46)',vr:"SL",name:"InterpolationType",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",55)':{tag:'(0011,"GEMS_GENIE_1",55)',vr:"FD",name:"Period",vm:"1",version:"PrivateTag"},'(0011,"GEMS_GENIE_1",56)':{tag:'(0011,"GEMS_GENIE_1",56)',vr:"FD",name:"ElapsedTime",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",10)':{tag:'(0013,"GEMS_GENIE_1",10)',vr:"FD",name:"DigitalFOV",vm:"2",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",11)':{tag:'(0013,"GEMS_GENIE_1",11)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",12)':{tag:'(0013,"GEMS_GENIE_1",12)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",16)':{tag:'(0013,"GEMS_GENIE_1",16)',vr:"SL",name:"AutoTrackPeak",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",17)':{tag:'(0013,"GEMS_GENIE_1",17)',vr:"SL",name:"AutoTrackWidth",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",18)':{tag:'(0013,"GEMS_GENIE_1",18)',vr:"FD",name:"TransmissionScanTime",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",19)':{tag:'(0013,"GEMS_GENIE_1",19)',vr:"FD",name:"TransmissionMaskWidth",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1a)':{tag:'(0013,"GEMS_GENIE_1",1a)',vr:"FD",name:"CopperAttenuatorThickness",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1c)':{tag:'(0013,"GEMS_GENIE_1",1c)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1d)':{tag:'(0013,"GEMS_GENIE_1",1d)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",1e)':{tag:'(0013,"GEMS_GENIE_1",1e)',vr:"FD",name:"TomoViewOffset",vm:"1-n",version:"PrivateTag"},'(0013,"GEMS_GENIE_1",26)':{tag:'(0013,"GEMS_GENIE_1",26)',vr:"LT",name:"StudyComments",vm:"1",version:"PrivateTag"},'(0033,"GEMS_GNHD_01",01)':{tag:'(0033,"GEMS_GNHD_01",01)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0033,"GEMS_GNHD_01",02)':{tag:'(0033,"GEMS_GNHD_01",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",01)':{tag:'(0009,"GEMS_IDEN_01",01)',vr:"LO",name:"FullFidelity",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",02)':{tag:'(0009,"GEMS_IDEN_01",02)',vr:"SH",name:"SuiteId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",04)':{tag:'(0009,"GEMS_IDEN_01",04)',vr:"SH",name:"ProductId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",17)':{tag:'(0009,"GEMS_IDEN_01",17)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",1a)':{tag:'(0009,"GEMS_IDEN_01",1a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",20)':{tag:'(0009,"GEMS_IDEN_01",20)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",27)':{tag:'(0009,"GEMS_IDEN_01",27)',vr:"SL",name:"ImageActualDate",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",2f)':{tag:'(0009,"GEMS_IDEN_01",2f)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",30)':{tag:'(0009,"GEMS_IDEN_01",30)',vr:"SH",name:"ServiceId",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",31)':{tag:'(0009,"GEMS_IDEN_01",31)',vr:"SH",name:"MobileLocationNumber",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e2)':{tag:'(0009,"GEMS_IDEN_01",e2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e3)':{tag:'(0009,"GEMS_IDEN_01",e3)',vr:"UI",name:"EquipmentUID",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e6)':{tag:'(0009,"GEMS_IDEN_01",e6)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e7)':{tag:'(0009,"GEMS_IDEN_01",e7)',vr:"UL",name:"ExamRecordChecksum",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e8)':{tag:'(0009,"GEMS_IDEN_01",e8)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"GEMS_IDEN_01",e9)':{tag:'(0009,"GEMS_IDEN_01",e9)',vr:"SL",name:"ActualSeriesDataTimeStamp",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",06)':{tag:'(0027,"GEMS_IMAG_01",06)',vr:"SL",name:"ImageArchiveFlag",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",10)':{tag:'(0027,"GEMS_IMAG_01",10)',vr:"SS",name:"ScoutType",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1c)':{tag:'(0027,"GEMS_IMAG_01",1c)',vr:"SL",name:"VmaMamp",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1d)':{tag:'(0027,"GEMS_IMAG_01",1d)',vr:"SS",name:"VmaPhase",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1e)':{tag:'(0027,"GEMS_IMAG_01",1e)',vr:"SL",name:"VmaMod",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",1f)':{tag:'(0027,"GEMS_IMAG_01",1f)',vr:"SL",name:"VmaClip",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",20)':{tag:'(0027,"GEMS_IMAG_01",20)',vr:"SS",name:"SmartScanOnOffFlag",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",30)':{tag:'(0027,"GEMS_IMAG_01",30)',vr:"SH",name:"ForeignImageRevision",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",31)':{tag:'(0027,"GEMS_IMAG_01",31)',vr:"SS",name:"ImagingMode",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",32)':{tag:'(0027,"GEMS_IMAG_01",32)',vr:"SS",name:"PulseSequence",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",33)':{tag:'(0027,"GEMS_IMAG_01",33)',vr:"SL",name:"ImagingOptions",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",35)':{tag:'(0027,"GEMS_IMAG_01",35)',vr:"SS",name:"PlaneType",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",36)':{tag:'(0027,"GEMS_IMAG_01",36)',vr:"SL",name:"ObliquePlane",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",40)':{tag:'(0027,"GEMS_IMAG_01",40)',vr:"SH",name:"RASLetterOfImageLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",41)':{tag:'(0027,"GEMS_IMAG_01",41)',vr:"FL",name:"ImageLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",42)':{tag:'(0027,"GEMS_IMAG_01",42)',vr:"FL",name:"CenterRCoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",43)':{tag:'(0027,"GEMS_IMAG_01",43)',vr:"FL",name:"CenterACoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",44)':{tag:'(0027,"GEMS_IMAG_01",44)',vr:"FL",name:"CenterSCoordOfPlaneImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",45)':{tag:'(0027,"GEMS_IMAG_01",45)',vr:"FL",name:"NormalRCoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",46)':{tag:'(0027,"GEMS_IMAG_01",46)',vr:"FL",name:"NormalACoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",47)':{tag:'(0027,"GEMS_IMAG_01",47)',vr:"FL",name:"NormalSCoord",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",48)':{tag:'(0027,"GEMS_IMAG_01",48)',vr:"FL",name:"RCoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",49)':{tag:'(0027,"GEMS_IMAG_01",49)',vr:"FL",name:"ACoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4a)':{tag:'(0027,"GEMS_IMAG_01",4a)',vr:"FL",name:"SCoordOfTopRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4b)':{tag:'(0027,"GEMS_IMAG_01",4b)',vr:"FL",name:"RCoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4c)':{tag:'(0027,"GEMS_IMAG_01",4c)',vr:"FL",name:"ACoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",4d)':{tag:'(0027,"GEMS_IMAG_01",4d)',vr:"FL",name:"SCoordOfBottomRightCorner",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",50)':{tag:'(0027,"GEMS_IMAG_01",50)',vr:"FL",name:"TableStartLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",51)':{tag:'(0027,"GEMS_IMAG_01",51)',vr:"FL",name:"TableEndLocation",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",52)':{tag:'(0027,"GEMS_IMAG_01",52)',vr:"SH",name:"RASLetterForSideOfImage",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",53)':{tag:'(0027,"GEMS_IMAG_01",53)',vr:"SH",name:"RASLetterForAnteriorPosterior",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",54)':{tag:'(0027,"GEMS_IMAG_01",54)',vr:"SH",name:"RASLetterForScoutStartLoc",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",55)':{tag:'(0027,"GEMS_IMAG_01",55)',vr:"SH",name:"RASLetterForScoutEndLoc",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",60)':{tag:'(0027,"GEMS_IMAG_01",60)',vr:"FL",name:"ImageDimensionX",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",61)':{tag:'(0027,"GEMS_IMAG_01",61)',vr:"FL",name:"ImageDimensionY",vm:"1",version:"PrivateTag"},'(0027,"GEMS_IMAG_01",62)':{tag:'(0027,"GEMS_IMAG_01",62)',vr:"FL",name:"NumberOfExcitations",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",04)':{tag:'(0029,"GEMS_IMPS_01",04)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",05)':{tag:'(0029,"GEMS_IMPS_01",05)',vr:"DS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",06)':{tag:'(0029,"GEMS_IMPS_01",06)',vr:"DS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",07)':{tag:'(0029,"GEMS_IMPS_01",07)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",08)':{tag:'(0029,"GEMS_IMPS_01",08)',vr:"SH",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",09)':{tag:'(0029,"GEMS_IMPS_01",09)',vr:"SH",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",0a)':{tag:'(0029,"GEMS_IMPS_01",0a)',vr:"SS",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",15)':{tag:'(0029,"GEMS_IMPS_01",15)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",16)':{tag:'(0029,"GEMS_IMPS_01",16)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",17)':{tag:'(0029,"GEMS_IMPS_01",17)',vr:"SL",name:"LowerRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",18)':{tag:'(0029,"GEMS_IMPS_01",18)',vr:"SL",name:"UpperRangeOfPixels",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",1a)':{tag:'(0029,"GEMS_IMPS_01",1a)',vr:"SL",name:"LengthOfTotalHeaderInBytes",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",26)':{tag:'(0029,"GEMS_IMPS_01",26)',vr:"SS",name:"VersionOfHeaderStructure",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",34)':{tag:'(0029,"GEMS_IMPS_01",34)',vr:"SL",name:"AdvantageCompOverflow",vm:"1",version:"PrivateTag"},'(0029,"GEMS_IMPS_01",35)':{tag:'(0029,"GEMS_IMPS_01",35)',vr:"SL",name:"AdvantageCompUnderflow",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",01)':{tag:'(0043,"GEMS_PARM_01",01)',vr:"SS",name:"BitmapOfPrescanOptions",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",02)':{tag:'(0043,"GEMS_PARM_01",02)',vr:"SS",name:"GradientOffsetInX",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",03)':{tag:'(0043,"GEMS_PARM_01",03)',vr:"SS",name:"GradientOffsetInY",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",04)':{tag:'(0043,"GEMS_PARM_01",04)',vr:"SS",name:"GradientOffsetInZ",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",05)':{tag:'(0043,"GEMS_PARM_01",05)',vr:"SS",name:"ImageIsOriginalOrUnoriginal",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",06)':{tag:'(0043,"GEMS_PARM_01",06)',vr:"SS",name:"NumberOfEPIShots",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",07)':{tag:'(0043,"GEMS_PARM_01",07)',vr:"SS",name:"ViewsPerSegment",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",08)':{tag:'(0043,"GEMS_PARM_01",08)',vr:"SS",name:"RespiratoryRateInBPM",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",09)':{tag:'(0043,"GEMS_PARM_01",09)',vr:"SS",name:"RespiratoryTriggerPoint",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0a)':{tag:'(0043,"GEMS_PARM_01",0a)',vr:"SS",name:"TypeOfReceiverUsed",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0b)':{tag:'(0043,"GEMS_PARM_01",0b)',vr:"DS",name:"PeakRateOfChangeOfGradientField",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0c)':{tag:'(0043,"GEMS_PARM_01",0c)',vr:"DS",name:"LimitsInUnitsOfPercent",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0d)':{tag:'(0043,"GEMS_PARM_01",0d)',vr:"DS",name:"PSDEstimatedLimit",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0e)':{tag:'(0043,"GEMS_PARM_01",0e)',vr:"DS",name:"PSDEstimatedLimitInTeslaPerSecond",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",0f)':{tag:'(0043,"GEMS_PARM_01",0f)',vr:"DS",name:"SARAvgHead",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",10)':{tag:'(0043,"GEMS_PARM_01",10)',vr:"US",name:"WindowValue",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",11)':{tag:'(0043,"GEMS_PARM_01",11)',vr:"US",name:"TotalInputViews",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",12)':{tag:'(0043,"GEMS_PARM_01",12)',vr:"SS",name:"XrayChain",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",13)':{tag:'(0043,"GEMS_PARM_01",13)',vr:"SS",name:"ReconKernelParameters",vm:"5",version:"PrivateTag"},'(0043,"GEMS_PARM_01",14)':{tag:'(0043,"GEMS_PARM_01",14)',vr:"SS",name:"CalibrationParameters",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",15)':{tag:'(0043,"GEMS_PARM_01",15)',vr:"SS",name:"TotalOutputViews",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",16)':{tag:'(0043,"GEMS_PARM_01",16)',vr:"SS",name:"NumberOfOverranges",vm:"5",version:"PrivateTag"},'(0043,"GEMS_PARM_01",17)':{tag:'(0043,"GEMS_PARM_01",17)',vr:"DS",name:"IBHImageScaleFactors",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",18)':{tag:'(0043,"GEMS_PARM_01",18)',vr:"DS",name:"BBHCoefficients",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",19)':{tag:'(0043,"GEMS_PARM_01",19)',vr:"SS",name:"NumberOfBBHChainsToBlend",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1a)':{tag:'(0043,"GEMS_PARM_01",1a)',vr:"SL",name:"StartingChannelNumber",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1b)':{tag:'(0043,"GEMS_PARM_01",1b)',vr:"SS",name:"PPScanParameters",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1c)':{tag:'(0043,"GEMS_PARM_01",1c)',vr:"SS",name:"GEImageIntegrity",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1d)':{tag:'(0043,"GEMS_PARM_01",1d)',vr:"SS",name:"LevelValue",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1e)':{tag:'(0043,"GEMS_PARM_01",1e)',vr:"DS",name:"DeltaStartTime",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",1f)':{tag:'(0043,"GEMS_PARM_01",1f)',vr:"SL",name:"MaxOverrangesInAView",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",20)':{tag:'(0043,"GEMS_PARM_01",20)',vr:"DS",name:"AvgOverrangesAllViews",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",21)':{tag:'(0043,"GEMS_PARM_01",21)',vr:"SS",name:"CorrectedAfterglowTerms",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",25)':{tag:'(0043,"GEMS_PARM_01",25)',vr:"SS",name:"ReferenceChannels",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",26)':{tag:'(0043,"GEMS_PARM_01",26)',vr:"US",name:"NoViewsRefChannelsBlocked",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",27)':{tag:'(0043,"GEMS_PARM_01",27)',vr:"SH",name:"ScanPitchRatio",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",28)':{tag:'(0043,"GEMS_PARM_01",28)',vr:"OB",name:"UniqueImageIdentifier",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",29)':{tag:'(0043,"GEMS_PARM_01",29)',vr:"OB",name:"HistogramTables",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2a)':{tag:'(0043,"GEMS_PARM_01",2a)',vr:"OB",name:"UserDefinedData",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2b)':{tag:'(0043,"GEMS_PARM_01",2b)',vr:"SS",name:"PrivateScanOptions",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2c)':{tag:'(0043,"GEMS_PARM_01",2c)',vr:"SS",name:"EffectiveEchoSpacing",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2d)':{tag:'(0043,"GEMS_PARM_01",2d)',vr:"SH",name:"StringSlopField1",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2e)':{tag:'(0043,"GEMS_PARM_01",2e)',vr:"SH",name:"StringSlopField2",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",2f)':{tag:'(0043,"GEMS_PARM_01",2f)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",30)':{tag:'(0043,"GEMS_PARM_01",30)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",31)':{tag:'(0043,"GEMS_PARM_01",31)',vr:"DS",name:"RACoordOfTargetReconCentre",vm:"2",version:"PrivateTag"},'(0043,"GEMS_PARM_01",32)':{tag:'(0043,"GEMS_PARM_01",32)',vr:"SS",name:"RawDataType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",33)':{tag:'(0043,"GEMS_PARM_01",33)',vr:"FL",name:"NegScanSpacing",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",34)':{tag:'(0043,"GEMS_PARM_01",34)',vr:"IS",name:"OffsetFrequency",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",35)':{tag:'(0043,"GEMS_PARM_01",35)',vr:"UL",name:"UserUsageTag",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",36)':{tag:'(0043,"GEMS_PARM_01",36)',vr:"UL",name:"UserFillMapMSW",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",37)':{tag:'(0043,"GEMS_PARM_01",37)',vr:"UL",name:"UserFillMapLSW",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",38)':{tag:'(0043,"GEMS_PARM_01",38)',vr:"FL",name:"User25ToUser48",vm:"24",version:"PrivateTag"},'(0043,"GEMS_PARM_01",39)':{tag:'(0043,"GEMS_PARM_01",39)',vr:"IS",name:"SlopInteger6ToSlopInteger9",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",40)':{tag:'(0043,"GEMS_PARM_01",40)',vr:"FL",name:"TriggerOnPosition",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",41)':{tag:'(0043,"GEMS_PARM_01",41)',vr:"FL",name:"DegreeOfRotation",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",42)':{tag:'(0043,"GEMS_PARM_01",42)',vr:"SL",name:"DASTriggerSource",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",43)':{tag:'(0043,"GEMS_PARM_01",43)',vr:"SL",name:"DASFpaGain",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",44)':{tag:'(0043,"GEMS_PARM_01",44)',vr:"SL",name:"DASOutputSource",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",45)':{tag:'(0043,"GEMS_PARM_01",45)',vr:"SL",name:"DASAdInput",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",46)':{tag:'(0043,"GEMS_PARM_01",46)',vr:"SL",name:"DASCalMode",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",47)':{tag:'(0043,"GEMS_PARM_01",47)',vr:"SL",name:"DASCalFrequency",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",48)':{tag:'(0043,"GEMS_PARM_01",48)',vr:"SL",name:"DASRegXm",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",49)':{tag:'(0043,"GEMS_PARM_01",49)',vr:"SL",name:"DASAutoZero",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4a)':{tag:'(0043,"GEMS_PARM_01",4a)',vr:"SS",name:"StartingChannelOfView",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4b)':{tag:'(0043,"GEMS_PARM_01",4b)',vr:"SL",name:"DASXmPattern",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4c)':{tag:'(0043,"GEMS_PARM_01",4c)',vr:"SS",name:"TGGCTriggerMode",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4d)':{tag:'(0043,"GEMS_PARM_01",4d)',vr:"FL",name:"StartScanToXrayOnDelay",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",4e)':{tag:'(0043,"GEMS_PARM_01",4e)',vr:"FL",name:"DurationOfXrayOn",vm:"4",version:"PrivateTag"},'(0043,"GEMS_PARM_01",60)':{tag:'(0043,"GEMS_PARM_01",60)',vr:"IS",name:"SlopInteger10ToSlopInteger17",vm:"8",version:"PrivateTag"},'(0043,"GEMS_PARM_01",61)':{tag:'(0043,"GEMS_PARM_01",61)',vr:"UI",name:"ScannerStudyEntityUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",62)':{tag:'(0043,"GEMS_PARM_01",62)',vr:"SH",name:"ScannerStudyID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",6f)':{tag:'(0043,"GEMS_PARM_01",6f)',vr:"DS",name:"ScannerTableEntry",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",70)':{tag:'(0043,"GEMS_PARM_01",70)',vr:"LO",name:"ParadigmName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",71)':{tag:'(0043,"GEMS_PARM_01",71)',vr:"ST",name:"ParadigmDescription",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",72)':{tag:'(0043,"GEMS_PARM_01",72)',vr:"UI",name:"ParadigmUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",73)':{tag:'(0043,"GEMS_PARM_01",73)',vr:"US",name:"ExperimentType",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",74)':{tag:'(0043,"GEMS_PARM_01",74)',vr:"US",name:"NumberOfRestVolumes",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",75)':{tag:'(0043,"GEMS_PARM_01",75)',vr:"US",name:"NumberOfActiveVolumes",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",76)':{tag:'(0043,"GEMS_PARM_01",76)',vr:"US",name:"NumberOfDummyScans",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",77)':{tag:'(0043,"GEMS_PARM_01",77)',vr:"SH",name:"ApplicationName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",78)':{tag:'(0043,"GEMS_PARM_01",78)',vr:"SH",name:"ApplicationVersion",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",79)':{tag:'(0043,"GEMS_PARM_01",79)',vr:"US",name:"SlicesPerVolume",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7a)':{tag:'(0043,"GEMS_PARM_01",7a)',vr:"US",name:"ExpectedTimePoints",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7b)':{tag:'(0043,"GEMS_PARM_01",7b)',vr:"FL",name:"RegressorValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7c)':{tag:'(0043,"GEMS_PARM_01",7c)',vr:"FL",name:"DelayAfterSliceGroup",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7d)':{tag:'(0043,"GEMS_PARM_01",7d)',vr:"US",name:"ReconModeFlagWord",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7e)':{tag:'(0043,"GEMS_PARM_01",7e)',vr:"LO",name:"PACCSpecificInformation",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",7f)':{tag:'(0043,"GEMS_PARM_01",7f)',vr:"DS",name:"EDWIScaleFactor",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",80)':{tag:'(0043,"GEMS_PARM_01",80)',vr:"LO",name:"CoilIDData",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",81)':{tag:'(0043,"GEMS_PARM_01",81)',vr:"LO",name:"GECoilName",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",82)':{tag:'(0043,"GEMS_PARM_01",82)',vr:"LO",name:"SystemConfigurationInformation",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",83)':{tag:'(0043,"GEMS_PARM_01",83)',vr:"DS",name:"AssetRFactors",vm:"1-2",version:"PrivateTag"},'(0043,"GEMS_PARM_01",84)':{tag:'(0043,"GEMS_PARM_01",84)',vr:"LO",name:"AdditionalAssetData",vm:"5-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",85)':{tag:'(0043,"GEMS_PARM_01",85)',vr:"UT",name:"DebugDataTextFormat",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",86)':{tag:'(0043,"GEMS_PARM_01",86)',vr:"OB",name:"DebugDataBinaryFormat",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",87)':{tag:'(0043,"GEMS_PARM_01",87)',vr:"UT",name:"ScannerSoftwareVersionLongForm",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",88)':{tag:'(0043,"GEMS_PARM_01",88)',vr:"UI",name:"PUREAcquisitionCalibrationSeriesUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",89)':{tag:'(0043,"GEMS_PARM_01",89)',vr:"LO",name:"GoverningBodydBdtAndSARDefinition",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8a)':{tag:'(0043,"GEMS_PARM_01",8a)',vr:"CS",name:"PrivateInPlanePhaseEncodingDirection",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8b)':{tag:'(0043,"GEMS_PARM_01",8b)',vr:"OB",name:"FMRIBinaryDataBlock",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8c)':{tag:'(0043,"GEMS_PARM_01",8c)',vr:"DS",name:"VoxelLocation",vm:"6",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8d)':{tag:'(0043,"GEMS_PARM_01",8d)',vr:"DS",name:"SATBandLocations",vm:"7-7n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8e)':{tag:'(0043,"GEMS_PARM_01",8e)',vr:"DS",name:"SpectroPrescanValues",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",8f)':{tag:'(0043,"GEMS_PARM_01",8f)',vr:"DS",name:"SpectroParameters",vm:"3",version:"PrivateTag"},'(0043,"GEMS_PARM_01",90)':{tag:'(0043,"GEMS_PARM_01",90)',vr:"LO",name:"SARDefinition",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",91)':{tag:'(0043,"GEMS_PARM_01",91)',vr:"DS",name:"SARValue",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",92)':{tag:'(0043,"GEMS_PARM_01",92)',vr:"LO",name:"ImageErrorText",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",93)':{tag:'(0043,"GEMS_PARM_01",93)',vr:"DS",name:"SpectroQuantitationValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",94)':{tag:'(0043,"GEMS_PARM_01",94)',vr:"DS",name:"SpectroRatioValues",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",95)':{tag:'(0043,"GEMS_PARM_01",95)',vr:"LO",name:"PrescanReuseString",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",96)':{tag:'(0043,"GEMS_PARM_01",96)',vr:"CS",name:"ContentQualification",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",97)':{tag:'(0043,"GEMS_PARM_01",97)',vr:"LO",name:"ImageFilteringParameters",vm:"9",version:"PrivateTag"},'(0043,"GEMS_PARM_01",98)':{tag:'(0043,"GEMS_PARM_01",98)',vr:"UI",name:"ASSETAcquisitionCalibrationSeriesUID",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",99)':{tag:'(0043,"GEMS_PARM_01",99)',vr:"LO",name:"ExtendedOptions",vm:"1-n",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9a)':{tag:'(0043,"GEMS_PARM_01",9a)',vr:"IS",name:"RxStackIdentification",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9b)':{tag:'(0043,"GEMS_PARM_01",9b)',vr:"DS",name:"NPWFactor",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9c)':{tag:'(0043,"GEMS_PARM_01",9c)',vr:"OB",name:"ResearchTag1",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9d)':{tag:'(0043,"GEMS_PARM_01",9d)',vr:"OB",name:"ResearchTag2",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9e)':{tag:'(0043,"GEMS_PARM_01",9e)',vr:"OB",name:"ResearchTag3",vm:"1",version:"PrivateTag"},'(0043,"GEMS_PARM_01",9f)':{tag:'(0043,"GEMS_PARM_01",9f)',vr:"OB",name:"ResearchTag4",vm:"1",version:"PrivateTag"},'(0011,"GEMS_PATI_01",10)':{tag:'(0011,"GEMS_PATI_01",10)',vr:"SS",name:"PatientStatus",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",03)':{tag:'(0021,"GEMS_RELA_01",03)',vr:"SS",name:"SeriesFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",05)':{tag:'(0021,"GEMS_RELA_01",05)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",07)':{tag:'(0021,"GEMS_RELA_01",07)',vr:"UL",name:"SeriesRecordChecksum",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",15)':{tag:'(0021,"GEMS_RELA_01",15)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",16)':{tag:'(0021,"GEMS_RELA_01",16)',vr:"SS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",18)':{tag:'(0021,"GEMS_RELA_01",18)',vr:"SH",name:"GenesisVersionNow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",19)':{tag:'(0021,"GEMS_RELA_01",19)',vr:"UL",name:"AcqReconRecordChecksum",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",20)':{tag:'(0021,"GEMS_RELA_01",20)',vr:"DS",name:"TableStartLocation",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",35)':{tag:'(0021,"GEMS_RELA_01",35)',vr:"SS",name:"SeriesFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",36)':{tag:'(0021,"GEMS_RELA_01",36)',vr:"SS",name:"ImageFromWhichPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",37)':{tag:'(0021,"GEMS_RELA_01",37)',vr:"SS",name:"ScreenFormat",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4a)':{tag:'(0021,"GEMS_RELA_01",4a)',vr:"LO",name:"AnatomicalReferenceForScout",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4e)':{tag:'(0021,"GEMS_RELA_01",4e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",4f)':{tag:'(0021,"GEMS_RELA_01",4f)',vr:"SS",name:"LocationsInAcquisition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",50)':{tag:'(0021,"GEMS_RELA_01",50)',vr:"SS",name:"GraphicallyPrescribed",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",51)':{tag:'(0021,"GEMS_RELA_01",51)',vr:"DS",name:"RotationFromSourceXRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",52)':{tag:'(0021,"GEMS_RELA_01",52)',vr:"DS",name:"RotationFromSourceYRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",53)':{tag:'(0021,"GEMS_RELA_01",53)',vr:"DS",name:"RotationFromSourceZRot",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",54)':{tag:'(0021,"GEMS_RELA_01",54)',vr:"SH",name:"ImagePosition",vm:"3",version:"PrivateTag"},'(0021,"GEMS_RELA_01",55)':{tag:'(0021,"GEMS_RELA_01",55)',vr:"SH",name:"ImageOrientation",vm:"6",version:"PrivateTag"},'(0021,"GEMS_RELA_01",56)':{tag:'(0021,"GEMS_RELA_01",56)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",57)':{tag:'(0021,"GEMS_RELA_01",57)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",58)':{tag:'(0021,"GEMS_RELA_01",58)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",59)':{tag:'(0021,"GEMS_RELA_01",59)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5a)':{tag:'(0021,"GEMS_RELA_01",5a)',vr:"SL",name:"IntegerSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5b)':{tag:'(0021,"GEMS_RELA_01",5b)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5c)':{tag:'(0021,"GEMS_RELA_01",5c)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5d)':{tag:'(0021,"GEMS_RELA_01",5d)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5e)':{tag:'(0021,"GEMS_RELA_01",5e)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",5f)':{tag:'(0021,"GEMS_RELA_01",5f)',vr:"DS",name:"FloatSlop",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",70)':{tag:'(0021,"GEMS_RELA_01",70)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",71)':{tag:'(0021,"GEMS_RELA_01",71)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",81)':{tag:'(0021,"GEMS_RELA_01",81)',vr:"DS",name:"AutoWindowLevelAlpha",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",82)':{tag:'(0021,"GEMS_RELA_01",82)',vr:"DS",name:"AutoWindowLevelBeta",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",83)':{tag:'(0021,"GEMS_RELA_01",83)',vr:"DS",name:"AutoWindowLevelWindow",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",84)':{tag:'(0021,"GEMS_RELA_01",84)',vr:"DS",name:"AutoWindowLevelLevel",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",90)':{tag:'(0021,"GEMS_RELA_01",90)',vr:"SS",name:"TubeFocalSpotPosition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",91)':{tag:'(0021,"GEMS_RELA_01",91)',vr:"SS",name:"BiopsyPosition",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",92)':{tag:'(0021,"GEMS_RELA_01",92)',vr:"FL",name:"BiopsyTLocation",vm:"1",version:"PrivateTag"},'(0021,"GEMS_RELA_01",93)':{tag:'(0021,"GEMS_RELA_01",93)',vr:"FL",name:"BiopsyRefLocation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",04)':{tag:'(0045,"GEMS_SENO_02",04)',vr:"CS",name:"AES",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",06)':{tag:'(0045,"GEMS_SENO_02",06)',vr:"DS",name:"Angulation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",09)':{tag:'(0045,"GEMS_SENO_02",09)',vr:"DS",name:"RealMagnificationFactor",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0b)':{tag:'(0045,"GEMS_SENO_02",0b)',vr:"CS",name:"SenographType",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0c)':{tag:'(0045,"GEMS_SENO_02",0c)',vr:"DS",name:"IntegrationTime",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",0d)':{tag:'(0045,"GEMS_SENO_02",0d)',vr:"DS",name:"ROIOriginXY",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",11)':{tag:'(0045,"GEMS_SENO_02",11)',vr:"DS",name:"ReceptorSizeCmXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",12)':{tag:'(0045,"GEMS_SENO_02",12)',vr:"IS",name:"ReceptorSizePixelsXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",13)':{tag:'(0045,"GEMS_SENO_02",13)',vr:"ST",name:"Screen",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",14)':{tag:'(0045,"GEMS_SENO_02",14)',vr:"DS",name:"PixelPitchMicrons",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",15)':{tag:'(0045,"GEMS_SENO_02",15)',vr:"IS",name:"PixelDepthBits",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",16)':{tag:'(0045,"GEMS_SENO_02",16)',vr:"IS",name:"BinningFactorXY",vm:"2",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1B)':{tag:'(0045,"GEMS_SENO_02",1B)',vr:"CS",name:"ClinicalView",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1D)':{tag:'(0045,"GEMS_SENO_02",1D)',vr:"DS",name:"MeanOfRawGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1E)':{tag:'(0045,"GEMS_SENO_02",1E)',vr:"DS",name:"MeanOfOffsetGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",1F)':{tag:'(0045,"GEMS_SENO_02",1F)',vr:"DS",name:"MeanOfCorrectedGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",20)':{tag:'(0045,"GEMS_SENO_02",20)',vr:"DS",name:"MeanOfRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",21)':{tag:'(0045,"GEMS_SENO_02",21)',vr:"DS",name:"MeanOfLogRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",22)':{tag:'(0045,"GEMS_SENO_02",22)',vr:"DS",name:"StandardDeviationOfRawGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",23)':{tag:'(0045,"GEMS_SENO_02",23)',vr:"DS",name:"StandardDeviationOfCorrectedGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",24)':{tag:'(0045,"GEMS_SENO_02",24)',vr:"DS",name:"StandardDeviationOfRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",25)':{tag:'(0045,"GEMS_SENO_02",25)',vr:"DS",name:"StandardDeviationOfLogRegionGrayLevels",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",26)':{tag:'(0045,"GEMS_SENO_02",26)',vr:"OB",name:"MAOBuffer",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",27)':{tag:'(0045,"GEMS_SENO_02",27)',vr:"IS",name:"SetNumber",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",28)':{tag:'(0045,"GEMS_SENO_02",28)',vr:"CS",name:"WindowingType",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",29)':{tag:'(0045,"GEMS_SENO_02",29)',vr:"DS",name:"WindowingParameters",vm:"1-n",version:"PrivateTag"},'(0045,"GEMS_SENO_02",2a)':{tag:'(0045,"GEMS_SENO_02",2a)',vr:"IS",name:"CrosshairCursorXCoordinates",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",2b)':{tag:'(0045,"GEMS_SENO_02",2b)',vr:"IS",name:"CrosshairCursorYCoordinates",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",39)':{tag:'(0045,"GEMS_SENO_02",39)',vr:"US",name:"VignetteRows",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3a)':{tag:'(0045,"GEMS_SENO_02",3a)',vr:"US",name:"VignetteColumns",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3b)':{tag:'(0045,"GEMS_SENO_02",3b)',vr:"US",name:"VignetteBitsAllocated",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3c)':{tag:'(0045,"GEMS_SENO_02",3c)',vr:"US",name:"VignetteBitsStored",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3d)':{tag:'(0045,"GEMS_SENO_02",3d)',vr:"US",name:"VignetteHighBit",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3e)':{tag:'(0045,"GEMS_SENO_02",3e)',vr:"US",name:"VignettePixelRepresentation",vm:"1",version:"PrivateTag"},'(0045,"GEMS_SENO_02",3f)':{tag:'(0045,"GEMS_SENO_02",3f)',vr:"OB",name:"VignettePixelData",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",06)':{tag:'(0025,"GEMS_SERS_01",06)',vr:"SS",name:"LastPulseSequenceUsed",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",07)':{tag:'(0025,"GEMS_SERS_01",07)',vr:"SL",name:"ImagesInSeries",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",10)':{tag:'(0025,"GEMS_SERS_01",10)',vr:"SL",name:"LandmarkCounter",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",11)':{tag:'(0025,"GEMS_SERS_01",11)',vr:"SS",name:"NumberOfAcquisitions",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",14)':{tag:'(0025,"GEMS_SERS_01",14)',vr:"SL",name:"IndicatesNumberOfUpdatesToHeader",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",17)':{tag:'(0025,"GEMS_SERS_01",17)',vr:"SL",name:"SeriesCompleteFlag",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",18)':{tag:'(0025,"GEMS_SERS_01",18)',vr:"SL",name:"NumberOfImagesArchived",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",19)':{tag:'(0025,"GEMS_SERS_01",19)',vr:"SL",name:"LastImageNumberUsed",vm:"1",version:"PrivateTag"},'(0025,"GEMS_SERS_01",1a)':{tag:'(0025,"GEMS_SERS_01",1a)',vr:"SH",name:"PrimaryReceiverSuiteAndHost",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",01)':{tag:'(0023,"GEMS_STDY_01",01)',vr:"SL",name:"NumberOfSeriesInStudy",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",02)':{tag:'(0023,"GEMS_STDY_01",02)',vr:"SL",name:"NumberOfUnarchivedSeries",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",10)':{tag:'(0023,"GEMS_STDY_01",10)',vr:"SS",name:"ReferenceImageField",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",50)':{tag:'(0023,"GEMS_STDY_01",50)',vr:"SS",name:"SummaryImage",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",70)':{tag:'(0023,"GEMS_STDY_01",70)',vr:"FD",name:"StartTimeSecsInFirstAxial",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",74)':{tag:'(0023,"GEMS_STDY_01",74)',vr:"SL",name:"NumberOfUpdatesToHeader",vm:"1",version:"PrivateTag"},'(0023,"GEMS_STDY_01",7d)':{tag:'(0023,"GEMS_STDY_01",7d)',vr:"SS",name:"IndicatesIfStudyHasCompleteInfo",vm:"1",version:"PrivateTag"},'(0033,"GEMS_YMHD_01",05)':{tag:'(0033,"GEMS_YMHD_01",05)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0033,"GEMS_YMHD_01",06)':{tag:'(0033,"GEMS_YMHD_01",06)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",39)':{tag:'(0019,"GE_GENESIS_REV3.0",39)',vr:"SS",name:"AxialType",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",8f)':{tag:'(0019,"GE_GENESIS_REV3.0",8f)',vr:"SS",name:"SwapPhaseFrequency",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",9c)':{tag:'(0019,"GE_GENESIS_REV3.0",9c)',vr:"SS",name:"PulseSequenceName",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",9f)':{tag:'(0019,"GE_GENESIS_REV3.0",9f)',vr:"SS",name:"CoilType",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",a4)':{tag:'(0019,"GE_GENESIS_REV3.0",a4)',vr:"SS",name:"SATFatWaterBone",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",c0)':{tag:'(0019,"GE_GENESIS_REV3.0",c0)',vr:"SS",name:"BitmapOfSATSelections",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",c1)':{tag:'(0019,"GE_GENESIS_REV3.0",c1)',vr:"SS",name:"SurfaceCoilIntensityCorrectionFlag",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",cb)':{tag:'(0019,"GE_GENESIS_REV3.0",cb)',vr:"SS",name:"PhaseContrastFlowAxis",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",cc)':{tag:'(0019,"GE_GENESIS_REV3.0",cc)',vr:"SS",name:"PhaseContrastVelocityEncoding",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d5)':{tag:'(0019,"GE_GENESIS_REV3.0",d5)',vr:"SS",name:"FractionalEcho",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d8)':{tag:'(0019,"GE_GENESIS_REV3.0",d8)',vr:"SS",name:"VariableEchoFlag",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",d9)':{tag:'(0019,"GE_GENESIS_REV3.0",d9)',vr:"DS",name:"ConcatenatedSat",vm:"1",version:"PrivateTag"},'(0019,"GE_GENESIS_REV3.0",f2)':{tag:'(0019,"GE_GENESIS_REV3.0",f2)',vr:"SS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0043,"GE_GENESIS_REV3.0",1e)':{tag:'(0043,"GE_GENESIS_REV3.0",1e)',vr:"DS",name:"DeltaStartTime",vm:"1",version:"PrivateTag"},'(0043,"GE_GENESIS_REV3.0",27)':{tag:'(0043,"GE_GENESIS_REV3.0",27)',vr:"SH",name:"ScanPitchRatio",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",01)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",01)',vr:"FD",name:"ImageCompressionFraction",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",02)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",02)',vr:"FD",name:"ImageQuality",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",03)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",03)',vr:"FD",name:"ImageBytesTransferred",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",10)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",10)',vr:"SH",name:"J2cParameterType",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",11)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",11)',vr:"US",name:"J2cPixelRepresentation",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",12)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",12)',vr:"US",name:"J2cBitsAllocated",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",13)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",13)',vr:"US",name:"J2cPixelShiftValue",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",14)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",14)',vr:"US",name:"J2cPlanarConfiguration",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",15)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",15)',vr:"DS",name:"J2cRescaleIntercept",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",20)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",20)',vr:"LO",name:"PixelDataMD5SumPerFrame",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",21)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",21)',vr:"US",name:"HistogramPercentileLabels",vm:"1",version:"PrivateTag"},'(0029,"INTELERAD MEDICAL SYSTEMS",22)':{tag:'(0029,"INTELERAD MEDICAL SYSTEMS",22)',vr:"FD",name:"HistogramPercentileValues",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",01)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",01)',vr:"LO",name:"InstitutionCode",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",02)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",02)',vr:"LO",name:"RoutedTransferAE",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",03)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",03)',vr:"LO",name:"SourceAE",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",04)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",04)',vr:"SH",name:"DeferredValidation",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",05)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",05)',vr:"LO",name:"SeriesOwner",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",06)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",06)',vr:"LO",name:"OrderGroupNumber",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",07)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",07)',vr:"SH",name:"StrippedPixelData",vm:"1",version:"PrivateTag"},'(3f01,"INTELERAD MEDICAL SYSTEMS",08)':{tag:'(3f01,"INTELERAD MEDICAL SYSTEMS",08)',vr:"SH",name:"PendingMoveRequest",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",20)':{tag:'(0041,"INTEGRIS 1.0",20)',vr:"FL",name:"AccumulatedFluoroscopyDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",30)':{tag:'(0041,"INTEGRIS 1.0",30)',vr:"FL",name:"AccumulatedExposureDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",40)':{tag:'(0041,"INTEGRIS 1.0",40)',vr:"FL",name:"TotalDose",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",41)':{tag:'(0041,"INTEGRIS 1.0",41)',vr:"FL",name:"TotalNumberOfFrames",vm:"1",version:"PrivateTag"},'(0041,"INTEGRIS 1.0",50)':{tag:'(0041,"INTEGRIS 1.0",50)',vr:"SQ",name:"ExposureInformationSequence",vm:"1",version:"PrivateTag"},'(0009,"INTEGRIS 1.0",08)':{tag:'(0009,"INTEGRIS 1.0",08)',vr:"CS",name:"ExposureChannel",vm:"1-n",version:"PrivateTag"},'(0009,"INTEGRIS 1.0",32)':{tag:'(0009,"INTEGRIS 1.0",32)',vr:"TM",name:"ExposureStartTime",vm:"1",version:"PrivateTag"},'(0019,"INTEGRIS 1.0",00)':{tag:'(0019,"INTEGRIS 1.0",00)',vr:"LO",name:"APRName",vm:"1",version:"PrivateTag"},'(0019,"INTEGRIS 1.0",40)':{tag:'(0019,"INTEGRIS 1.0",40)',vr:"DS",name:"FrameRate",vm:"1",version:"PrivateTag"},'(0021,"INTEGRIS 1.0",12)':{tag:'(0021,"INTEGRIS 1.0",12)',vr:"IS",name:"ExposureNumber",vm:"1",version:"PrivateTag"},'(0029,"INTEGRIS 1.0",08)':{tag:'(0029,"INTEGRIS 1.0",08)',vr:"IS",name:"NumberOfExposureResults",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",70)':{tag:'(0029,"ISG shadow",70)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",80)':{tag:'(0029,"ISG shadow",80)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"ISG shadow",90)':{tag:'(0029,"ISG shadow",90)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"ISI",01)':{tag:'(0009,"ISI",01)',vr:"UN",name:"SIENETGeneralPurposeIMGEF",vm:"1",version:"PrivateTag"},'(0009,"MERGE TECHNOLOGIES, INC.",00)':{tag:'(0009,"MERGE TECHNOLOGIES, INC.",00)',vr:"OB",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1010)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1010)',vr:"OB",name:"OriginalMeasuringData",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1012)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1012)',vr:"UL",name:"OriginalMeasuringDataLength",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1020)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1020)',vr:"OB",name:"OriginalMeasuringRawData",vm:"1",version:"PrivateTag"},'(0029,"OCULUS Optikgeraete GmbH",1022)':{tag:'(0029,"OCULUS Optikgeraete GmbH",1022)',vr:"UL",name:"OriginalMeasuringRawDataLength",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",00)':{tag:'(0041,"PAPYRUS 3.0",00)',vr:"LT",name:"PapyrusComments",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",10)':{tag:'(0041,"PAPYRUS 3.0",10)',vr:"SQ",name:"PointerSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",11)':{tag:'(0041,"PAPYRUS 3.0",11)',vr:"UL",name:"ImagePointer",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",12)':{tag:'(0041,"PAPYRUS 3.0",12)',vr:"UL",name:"PixelOffset",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",13)':{tag:'(0041,"PAPYRUS 3.0",13)',vr:"SQ",name:"ImageIdentifierSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",14)':{tag:'(0041,"PAPYRUS 3.0",14)',vr:"SQ",name:"ExternalFileReferenceSequence",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",15)':{tag:'(0041,"PAPYRUS 3.0",15)',vr:"US",name:"NumberOfImages",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",21)':{tag:'(0041,"PAPYRUS 3.0",21)',vr:"UI",name:"ReferencedSOPClassUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",22)':{tag:'(0041,"PAPYRUS 3.0",22)',vr:"UI",name:"ReferencedSOPInstanceUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",31)':{tag:'(0041,"PAPYRUS 3.0",31)',vr:"LT",name:"ReferencedFileName",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",32)':{tag:'(0041,"PAPYRUS 3.0",32)',vr:"LT",name:"ReferencedFilePath",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",41)':{tag:'(0041,"PAPYRUS 3.0",41)',vr:"UI",name:"ReferencedImageSOPClassUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",42)':{tag:'(0041,"PAPYRUS 3.0",42)',vr:"UI",name:"ReferencedImageSOPInstanceUID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS 3.0",50)':{tag:'(0041,"PAPYRUS 3.0",50)',vr:"SQ",name:"ImageSequence",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",00)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",00)',vr:"IS",name:"OverlayID",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",01)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",01)',vr:"LT",name:"LinkedOverlays",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",10)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",10)',vr:"US",name:"OverlayRows",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",11)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",11)',vr:"US",name:"OverlayColumns",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",40)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",40)',vr:"LO",name:"OverlayType",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",50)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",50)',vr:"US",name:"OverlayOrigin",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",60)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",60)',vr:"LO",name:"Editable",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",70)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",70)',vr:"LO",name:"OverlayFont",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",72)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",72)',vr:"LO",name:"OverlayStyle",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",74)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",74)',vr:"US",name:"OverlayFontSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",76)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",76)',vr:"LO",name:"OverlayColor",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",78)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",78)',vr:"US",name:"ShadowSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",80)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",80)',vr:"LO",name:"FillPattern",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",82)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",82)',vr:"US",name:"OverlayPenSize",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a0)',vr:"LO",name:"Label",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a2)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a2)',vr:"LT",name:"PostItText",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",a4)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",a4)',vr:"US",name:"AnchorPoint",vm:"2",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",b0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",b0)',vr:"LO",name:"ROIType",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",b2)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",b2)',vr:"LT",name:"AttachedAnnotation",vm:"1",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",ba)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",ba)',vr:"US",name:"ContourPoints",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",bc)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",bc)',vr:"US",name:"MaskData",vm:"1-n",version:"PrivateTag"},'(6001-o-60ff,"PAPYRUS 3.0",c0)':{tag:'(6001-o-60ff,"PAPYRUS 3.0",c0)',vr:"SQ",name:"UINOverlaySequence",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",00)':{tag:'(0009,"PAPYRUS",00)',vr:"LT",name:"OriginalFileName",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",10)':{tag:'(0009,"PAPYRUS",10)',vr:"LT",name:"OriginalFileLocation",vm:"1",version:"PrivateTag"},'(0009,"PAPYRUS",18)':{tag:'(0009,"PAPYRUS",18)',vr:"LT",name:"DataSetIdentifier",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",00)':{tag:'(0041,"PAPYRUS",00)',vr:"LT",name:"PapyrusComments",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",10)':{tag:'(0041,"PAPYRUS",10)',vr:"US",name:"FolderType",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",11)':{tag:'(0041,"PAPYRUS",11)',vr:"LT",name:"PatientFolderDataSetID",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",20)':{tag:'(0041,"PAPYRUS",20)',vr:"LT",name:"FolderName",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",30)':{tag:'(0041,"PAPYRUS",30)',vr:"DA",name:"CreationDate",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",32)':{tag:'(0041,"PAPYRUS",32)',vr:"TM",name:"CreationTime",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",34)':{tag:'(0041,"PAPYRUS",34)',vr:"DA",name:"ModifiedDate",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",36)':{tag:'(0041,"PAPYRUS",36)',vr:"TM",name:"ModifiedTime",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",40)':{tag:'(0041,"PAPYRUS",40)',vr:"LT",name:"OwnerName",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",50)':{tag:'(0041,"PAPYRUS",50)',vr:"LT",name:"FolderStatus",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",60)':{tag:'(0041,"PAPYRUS",60)',vr:"UL",name:"NumberOfImages",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",62)':{tag:'(0041,"PAPYRUS",62)',vr:"UL",name:"NumberOfOther",vm:"1",version:"PrivateTag"},'(0041,"PAPYRUS",a0)':{tag:'(0041,"PAPYRUS",a0)',vr:"LT",name:"ExternalFolderElementDSID",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a1)':{tag:'(0041,"PAPYRUS",a1)',vr:"US",name:"ExternalFolderElementDataSetType",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a2)':{tag:'(0041,"PAPYRUS",a2)',vr:"LT",name:"ExternalFolderElementFileLocation",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",a3)':{tag:'(0041,"PAPYRUS",a3)',vr:"UL",name:"ExternalFolderElementLength",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b0)':{tag:'(0041,"PAPYRUS",b0)',vr:"LT",name:"InternalFolderElementDSID",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b1)':{tag:'(0041,"PAPYRUS",b1)',vr:"US",name:"InternalFolderElementDataSetType",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b2)':{tag:'(0041,"PAPYRUS",b2)',vr:"UL",name:"InternalOffsetToDataSet",vm:"1-n",version:"PrivateTag"},'(0041,"PAPYRUS",b3)':{tag:'(0041,"PAPYRUS",b3)',vr:"UL",name:"InternalOffsetToImage",vm:"1-n",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",01)':{tag:'(2001,"Philips Imaging DD 001",01)',vr:"FL",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",02)':{tag:'(2001,"Philips Imaging DD 001",02)',vr:"IS",name:"ChemicalShiftNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",03)':{tag:'(2001,"Philips Imaging DD 001",03)',vr:"FL",name:"DiffusionBFactor",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",04)':{tag:'(2001,"Philips Imaging DD 001",04)',vr:"CS",name:"DiffusionDirection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",06)':{tag:'(2001,"Philips Imaging DD 001",06)',vr:"CS",name:"ImageEnhanced",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",07)':{tag:'(2001,"Philips Imaging DD 001",07)',vr:"CS",name:"ImageTypeEDES",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",08)':{tag:'(2001,"Philips Imaging DD 001",08)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",09)':{tag:'(2001,"Philips Imaging DD 001",09)',vr:"FL",name:"ImagePrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0a)':{tag:'(2001,"Philips Imaging DD 001",0a)',vr:"IS",name:"SliceNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0b)':{tag:'(2001,"Philips Imaging DD 001",0b)',vr:"CS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0c)':{tag:'(2001,"Philips Imaging DD 001",0c)',vr:"CS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0e)':{tag:'(2001,"Philips Imaging DD 001",0e)',vr:"CS",name:"CardiacCycled",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",0f)':{tag:'(2001,"Philips Imaging DD 001",0f)',vr:"SS",name:"CardiacGateWidth",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",10)':{tag:'(2001,"Philips Imaging DD 001",10)',vr:"CS",name:"CardiacSync",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",11)':{tag:'(2001,"Philips Imaging DD 001",11)',vr:"FL",name:"DiffusionEchoTime",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",12)':{tag:'(2001,"Philips Imaging DD 001",12)',vr:"CS",name:"DynamicSeries",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",13)':{tag:'(2001,"Philips Imaging DD 001",13)',vr:"SL",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",14)':{tag:'(2001,"Philips Imaging DD 001",14)',vr:"SL",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",15)':{tag:'(2001,"Philips Imaging DD 001",15)',vr:"SS",name:"NumberOfLocations",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",16)':{tag:'(2001,"Philips Imaging DD 001",16)',vr:"SS",name:"NumberOfPCDirections",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",17)':{tag:'(2001,"Philips Imaging DD 001",17)',vr:"SL",name:"NumberOfPhasesMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",18)':{tag:'(2001,"Philips Imaging DD 001",18)',vr:"SL",name:"NumberOfSlicesMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",19)':{tag:'(2001,"Philips Imaging DD 001",19)',vr:"CS",name:"PartialMatrixScanned",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1a)':{tag:'(2001,"Philips Imaging DD 001",1a)',vr:"FL",name:"PCVelocity",vm:"1-n",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1b)':{tag:'(2001,"Philips Imaging DD 001",1b)',vr:"FL",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1c)':{tag:'(2001,"Philips Imaging DD 001",1c)',vr:"CS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1d)':{tag:'(2001,"Philips Imaging DD 001",1d)',vr:"IS",name:"ReconstructionNumberMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",1f)':{tag:'(2001,"Philips Imaging DD 001",1f)',vr:"CS",name:"RespirationSync",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",20)':{tag:'(2001,"Philips Imaging DD 001",20)',vr:"LO",name:"ScanningTechnique",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",21)':{tag:'(2001,"Philips Imaging DD 001",21)',vr:"CS",name:"SPIR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",22)':{tag:'(2001,"Philips Imaging DD 001",22)',vr:"FL",name:"WaterFatShift",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",23)':{tag:'(2001,"Philips Imaging DD 001",23)',vr:"DS",name:"FlipAnglePhilips",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",24)':{tag:'(2001,"Philips Imaging DD 001",24)',vr:"CS",name:"SeriesIsInteractive",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",25)':{tag:'(2001,"Philips Imaging DD 001",25)',vr:"SH",name:"EchoTimeDisplayMR",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",26)':{tag:'(2001,"Philips Imaging DD 001",26)',vr:"CS",name:"PresentationStateSubtractionActive",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",2d)':{tag:'(2001,"Philips Imaging DD 001",2d)',vr:"SS",name:"StackNumberOfSlices",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",32)':{tag:'(2001,"Philips Imaging DD 001",32)',vr:"FL",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",33)':{tag:'(2001,"Philips Imaging DD 001",33)',vr:"CS",name:"StackRadialAxis",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",35)':{tag:'(2001,"Philips Imaging DD 001",35)',vr:"SS",name:"StackSliceNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",36)':{tag:'(2001,"Philips Imaging DD 001",36)',vr:"CS",name:"StackType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",3f)':{tag:'(2001,"Philips Imaging DD 001",3f)',vr:"CS",name:"ZoomMode",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",58)':{tag:'(2001,"Philips Imaging DD 001",58)',vr:"UL",name:"ContrastTransferTaste",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",5f)':{tag:'(2001,"Philips Imaging DD 001",5f)',vr:"SQ",name:"StackSequence",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",60)':{tag:'(2001,"Philips Imaging DD 001",60)',vr:"SL",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",61)':{tag:'(2001,"Philips Imaging DD 001",61)',vr:"CS",name:"SeriesTransmitted",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",62)':{tag:'(2001,"Philips Imaging DD 001",62)',vr:"CS",name:"SeriesCommitted",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",63)':{tag:'(2001,"Philips Imaging DD 001",63)',vr:"CS",name:"ExaminationSource",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",67)':{tag:'(2001,"Philips Imaging DD 001",67)',vr:"CS",name:"LinearPresentationGLTrafoShapeSub",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",77)':{tag:'(2001,"Philips Imaging DD 001",77)',vr:"CS",name:"GLTrafoType",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",7b)':{tag:'(2001,"Philips Imaging DD 001",7b)',vr:"IS",name:"AcquisitionNumber",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",81)':{tag:'(2001,"Philips Imaging DD 001",81)',vr:"IS",name:"NumberOfDynamicScans",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",9f)':{tag:'(2001,"Philips Imaging DD 001",9f)',vr:"US",name:"PixelProcessingKernelSize",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",a1)':{tag:'(2001,"Philips Imaging DD 001",a1)',vr:"CS",name:"IsRawImage",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",f1)':{tag:'(2001,"Philips Imaging DD 001",f1)',vr:"FL",name:"ProspectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"Philips Imaging DD 001",f2)':{tag:'(2001,"Philips Imaging DD 001",f2)',vr:"FL",name:"RetrospectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",01)':{tag:'(2001,"PHILIPS IMAGING DD 001",01)',vr:"FL",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",02)':{tag:'(2001,"PHILIPS IMAGING DD 001",02)',vr:"IS",name:"ChemicalShiftNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",03)':{tag:'(2001,"PHILIPS IMAGING DD 001",03)',vr:"FL",name:"DiffusionBFactor",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",04)':{tag:'(2001,"PHILIPS IMAGING DD 001",04)',vr:"CS",name:"DiffusionDirection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",06)':{tag:'(2001,"PHILIPS IMAGING DD 001",06)',vr:"CS",name:"ImageEnhanced",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",07)':{tag:'(2001,"PHILIPS IMAGING DD 001",07)',vr:"CS",name:"ImageTypeEDES",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",08)':{tag:'(2001,"PHILIPS IMAGING DD 001",08)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",09)':{tag:'(2001,"PHILIPS IMAGING DD 001",09)',vr:"FL",name:"ImagePrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0a)':{tag:'(2001,"PHILIPS IMAGING DD 001",0a)',vr:"IS",name:"SliceNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0b)':{tag:'(2001,"PHILIPS IMAGING DD 001",0b)',vr:"CS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0c)':{tag:'(2001,"PHILIPS IMAGING DD 001",0c)',vr:"CS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0e)':{tag:'(2001,"PHILIPS IMAGING DD 001",0e)',vr:"CS",name:"CardiacCycled",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",0f)':{tag:'(2001,"PHILIPS IMAGING DD 001",0f)',vr:"SS",name:"CardiacGateWidth",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",10)':{tag:'(2001,"PHILIPS IMAGING DD 001",10)',vr:"CS",name:"CardiacSync",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",11)':{tag:'(2001,"PHILIPS IMAGING DD 001",11)',vr:"FL",name:"DiffusionEchoTime",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",12)':{tag:'(2001,"PHILIPS IMAGING DD 001",12)',vr:"CS",name:"DynamicSeries",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",13)':{tag:'(2001,"PHILIPS IMAGING DD 001",13)',vr:"SL",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",14)':{tag:'(2001,"PHILIPS IMAGING DD 001",14)',vr:"SL",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",15)':{tag:'(2001,"PHILIPS IMAGING DD 001",15)',vr:"SS",name:"NumberOfLocations",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",16)':{tag:'(2001,"PHILIPS IMAGING DD 001",16)',vr:"SS",name:"NumberOfPCDirections",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",17)':{tag:'(2001,"PHILIPS IMAGING DD 001",17)',vr:"SL",name:"NumberOfPhasesMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",18)':{tag:'(2001,"PHILIPS IMAGING DD 001",18)',vr:"SL",name:"NumberOfSlicesMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",19)':{tag:'(2001,"PHILIPS IMAGING DD 001",19)',vr:"CS",name:"PartialMatrixScanned",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1a)':{tag:'(2001,"PHILIPS IMAGING DD 001",1a)',vr:"FL",name:"PCVelocity",vm:"1-n",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1b)':{tag:'(2001,"PHILIPS IMAGING DD 001",1b)',vr:"FL",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1c)':{tag:'(2001,"PHILIPS IMAGING DD 001",1c)',vr:"CS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1d)':{tag:'(2001,"PHILIPS IMAGING DD 001",1d)',vr:"IS",name:"ReconstructionNumberMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",1f)':{tag:'(2001,"PHILIPS IMAGING DD 001",1f)',vr:"CS",name:"RespirationSync",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",20)':{tag:'(2001,"PHILIPS IMAGING DD 001",20)',vr:"LO",name:"ScanningTechnique",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",21)':{tag:'(2001,"PHILIPS IMAGING DD 001",21)',vr:"CS",name:"SPIR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",22)':{tag:'(2001,"PHILIPS IMAGING DD 001",22)',vr:"FL",name:"WaterFatShift",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",23)':{tag:'(2001,"PHILIPS IMAGING DD 001",23)',vr:"DS",name:"FlipAnglePhilips",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",24)':{tag:'(2001,"PHILIPS IMAGING DD 001",24)',vr:"CS",name:"SeriesIsInteractive",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",25)':{tag:'(2001,"PHILIPS IMAGING DD 001",25)',vr:"SH",name:"EchoTimeDisplayMR",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",26)':{tag:'(2001,"PHILIPS IMAGING DD 001",26)',vr:"CS",name:"PresentationStateSubtractionActive",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",2d)':{tag:'(2001,"PHILIPS IMAGING DD 001",2d)',vr:"SS",name:"StackNumberOfSlices",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",32)':{tag:'(2001,"PHILIPS IMAGING DD 001",32)',vr:"FL",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",33)':{tag:'(2001,"PHILIPS IMAGING DD 001",33)',vr:"CS",name:"StackRadialAxis",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",35)':{tag:'(2001,"PHILIPS IMAGING DD 001",35)',vr:"SS",name:"StackSliceNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",36)':{tag:'(2001,"PHILIPS IMAGING DD 001",36)',vr:"CS",name:"StackType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",3f)':{tag:'(2001,"PHILIPS IMAGING DD 001",3f)',vr:"CS",name:"ZoomMode",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",58)':{tag:'(2001,"PHILIPS IMAGING DD 001",58)',vr:"UL",name:"ContrastTransferTaste",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",5f)':{tag:'(2001,"PHILIPS IMAGING DD 001",5f)',vr:"SQ",name:"StackSequence",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",60)':{tag:'(2001,"PHILIPS IMAGING DD 001",60)',vr:"SL",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",61)':{tag:'(2001,"PHILIPS IMAGING DD 001",61)',vr:"CS",name:"SeriesTransmitted",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",62)':{tag:'(2001,"PHILIPS IMAGING DD 001",62)',vr:"CS",name:"SeriesCommitted",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",63)':{tag:'(2001,"PHILIPS IMAGING DD 001",63)',vr:"CS",name:"ExaminationSource",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",67)':{tag:'(2001,"PHILIPS IMAGING DD 001",67)',vr:"CS",name:"LinearPresentationGLTrafoShapeSub",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",77)':{tag:'(2001,"PHILIPS IMAGING DD 001",77)',vr:"CS",name:"GLTrafoType",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",7b)':{tag:'(2001,"PHILIPS IMAGING DD 001",7b)',vr:"IS",name:"AcquisitionNumber",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",81)':{tag:'(2001,"PHILIPS IMAGING DD 001",81)',vr:"IS",name:"NumberOfDynamicScans",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",9f)':{tag:'(2001,"PHILIPS IMAGING DD 001",9f)',vr:"US",name:"PixelProcessingKernelSize",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",a1)':{tag:'(2001,"PHILIPS IMAGING DD 001",a1)',vr:"CS",name:"IsRawImage",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",f1)':{tag:'(2001,"PHILIPS IMAGING DD 001",f1)',vr:"FL",name:"ProspectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2001,"PHILIPS IMAGING DD 001",f2)':{tag:'(2001,"PHILIPS IMAGING DD 001",f2)',vr:"FL",name:"RetrospectiveMotionCorrection",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",05)':{tag:'(2005,"Philips MR Imaging DD 001",05)',vr:"CS",name:"SynergyReconstructionType",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",1e)':{tag:'(2005,"Philips MR Imaging DD 001",1e)',vr:"SH",name:"MIPProtocol",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",1f)':{tag:'(2005,"Philips MR Imaging DD 001",1f)',vr:"SH",name:"MPRProtocol",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",20)':{tag:'(2005,"Philips MR Imaging DD 001",20)',vr:"SL",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",2d)':{tag:'(2005,"Philips MR Imaging DD 001",2d)',vr:"SS",name:"NumberOfStackSlices",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",83)':{tag:'(2005,"Philips MR Imaging DD 001",83)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",a1)':{tag:'(2005,"Philips MR Imaging DD 001",a1)',vr:"CS",name:"SyncraScanType",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b0)':{tag:'(2005,"Philips MR Imaging DD 001",b0)',vr:"FL",name:"DiffusionDirectionRL",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b1)':{tag:'(2005,"Philips MR Imaging DD 001",b1)',vr:"FL",name:"DiffusionDirectionAP",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 001",b2)':{tag:'(2005,"Philips MR Imaging DD 001",b2)',vr:"FL",name:"DiffusionDirectionFH",vm:"1",version:"PrivateTag"},'(2005,"Philips MR Imaging DD 005",02)':{tag:'(2005,"Philips MR Imaging DD 005",02)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",05)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",05)',vr:"CS",name:"SynergyReconstructionType",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",1e)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",1e)',vr:"SH",name:"MIPProtocol",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",1f)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",1f)',vr:"SH",name:"MPRProtocol",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",20)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",20)',vr:"SL",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",2d)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",2d)',vr:"SS",name:"NumberOfStackSlices",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",83)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",83)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",a1)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",a1)',vr:"CS",name:"SyncraScanType",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b0)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b0)',vr:"FL",name:"DiffusionDirectionRL",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b1)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b1)',vr:"FL",name:"DiffusionDirectionAP",vm:"1",version:"PrivateTag"},'(2005,"PHILIPS MR IMAGING DD 001",b2)':{tag:'(2005,"PHILIPS MR IMAGING DD 001",b2)',vr:"FL",name:"DiffusionDirectionFH",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR R5.5/PART",1000)':{tag:'(0019,"PHILIPS MR R5.5/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR R5.6/PART",1000)':{tag:'(0019,"PHILIPS MR R5.6/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",01)':{tag:'(0019,"PHILIPS MR SPECTRO;1",01)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",02)':{tag:'(0019,"PHILIPS MR SPECTRO;1",02)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",03)':{tag:'(0019,"PHILIPS MR SPECTRO;1",03)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",04)':{tag:'(0019,"PHILIPS MR SPECTRO;1",04)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",05)':{tag:'(0019,"PHILIPS MR SPECTRO;1",05)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",06)':{tag:'(0019,"PHILIPS MR SPECTRO;1",06)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",07)':{tag:'(0019,"PHILIPS MR SPECTRO;1",07)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",08)':{tag:'(0019,"PHILIPS MR SPECTRO;1",08)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",09)':{tag:'(0019,"PHILIPS MR SPECTRO;1",09)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",10)':{tag:'(0019,"PHILIPS MR SPECTRO;1",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",12)':{tag:'(0019,"PHILIPS MR SPECTRO;1",12)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",13)':{tag:'(0019,"PHILIPS MR SPECTRO;1",13)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",14)':{tag:'(0019,"PHILIPS MR SPECTRO;1",14)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",15)':{tag:'(0019,"PHILIPS MR SPECTRO;1",15)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",16)':{tag:'(0019,"PHILIPS MR SPECTRO;1",16)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",17)':{tag:'(0019,"PHILIPS MR SPECTRO;1",17)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",18)':{tag:'(0019,"PHILIPS MR SPECTRO;1",18)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",20)':{tag:'(0019,"PHILIPS MR SPECTRO;1",20)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",21)':{tag:'(0019,"PHILIPS MR SPECTRO;1",21)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",22)':{tag:'(0019,"PHILIPS MR SPECTRO;1",22)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",23)':{tag:'(0019,"PHILIPS MR SPECTRO;1",23)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",24)':{tag:'(0019,"PHILIPS MR SPECTRO;1",24)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",25)':{tag:'(0019,"PHILIPS MR SPECTRO;1",25)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",26)':{tag:'(0019,"PHILIPS MR SPECTRO;1",26)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",27)':{tag:'(0019,"PHILIPS MR SPECTRO;1",27)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",28)':{tag:'(0019,"PHILIPS MR SPECTRO;1",28)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",29)':{tag:'(0019,"PHILIPS MR SPECTRO;1",29)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",31)':{tag:'(0019,"PHILIPS MR SPECTRO;1",31)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",32)':{tag:'(0019,"PHILIPS MR SPECTRO;1",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",41)':{tag:'(0019,"PHILIPS MR SPECTRO;1",41)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",42)':{tag:'(0019,"PHILIPS MR SPECTRO;1",42)',vr:"IS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",43)':{tag:'(0019,"PHILIPS MR SPECTRO;1",43)',vr:"IS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",45)':{tag:'(0019,"PHILIPS MR SPECTRO;1",45)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",46)':{tag:'(0019,"PHILIPS MR SPECTRO;1",46)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",47)':{tag:'(0019,"PHILIPS MR SPECTRO;1",47)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",48)':{tag:'(0019,"PHILIPS MR SPECTRO;1",48)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",49)':{tag:'(0019,"PHILIPS MR SPECTRO;1",49)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",50)':{tag:'(0019,"PHILIPS MR SPECTRO;1",50)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",60)':{tag:'(0019,"PHILIPS MR SPECTRO;1",60)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",61)':{tag:'(0019,"PHILIPS MR SPECTRO;1",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",70)':{tag:'(0019,"PHILIPS MR SPECTRO;1",70)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",71)':{tag:'(0019,"PHILIPS MR SPECTRO;1",71)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",72)':{tag:'(0019,"PHILIPS MR SPECTRO;1",72)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",73)':{tag:'(0019,"PHILIPS MR SPECTRO;1",73)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",74)':{tag:'(0019,"PHILIPS MR SPECTRO;1",74)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",76)':{tag:'(0019,"PHILIPS MR SPECTRO;1",76)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",77)':{tag:'(0019,"PHILIPS MR SPECTRO;1",77)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",78)':{tag:'(0019,"PHILIPS MR SPECTRO;1",78)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",79)':{tag:'(0019,"PHILIPS MR SPECTRO;1",79)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR SPECTRO;1",80)':{tag:'(0019,"PHILIPS MR SPECTRO;1",80)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"PHILIPS MR",10)':{tag:'(0009,"PHILIPS MR",10)',vr:"LO",name:"SPIRelease",vm:"1",version:"PrivateTag"},'(0009,"PHILIPS MR",12)':{tag:'(0009,"PHILIPS MR",12)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",09)':{tag:'(0019,"PHILIPS MR/LAST",09)',vr:"DS",name:"MainMagneticField",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",0e)':{tag:'(0019,"PHILIPS MR/LAST",0e)',vr:"IS",name:"FlowCompensation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b1)':{tag:'(0019,"PHILIPS MR/LAST",b1)',vr:"IS",name:"MinimumRRInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b2)':{tag:'(0019,"PHILIPS MR/LAST",b2)',vr:"IS",name:"MaximumRRInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b3)':{tag:'(0019,"PHILIPS MR/LAST",b3)',vr:"IS",name:"NumberOfRejections",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b4)':{tag:'(0019,"PHILIPS MR/LAST",b4)',vr:"IS",name:"NumberOfRRIntervals",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",b5)':{tag:'(0019,"PHILIPS MR/LAST",b5)',vr:"IS",name:"ArrhythmiaRejection",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",c0)':{tag:'(0019,"PHILIPS MR/LAST",c0)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",c6)':{tag:'(0019,"PHILIPS MR/LAST",c6)',vr:"IS",name:"CycledMultipleSlice",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",ce)':{tag:'(0019,"PHILIPS MR/LAST",ce)',vr:"IS",name:"REST",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d5)':{tag:'(0019,"PHILIPS MR/LAST",d5)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d6)':{tag:'(0019,"PHILIPS MR/LAST",d6)',vr:"IS",name:"FourierInterpolation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",d9)':{tag:'(0019,"PHILIPS MR/LAST",d9)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e0)':{tag:'(0019,"PHILIPS MR/LAST",e0)',vr:"IS",name:"Prepulse",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e1)':{tag:'(0019,"PHILIPS MR/LAST",e1)',vr:"DS",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e2)':{tag:'(0019,"PHILIPS MR/LAST",e2)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",e3)':{tag:'(0019,"PHILIPS MR/LAST",e3)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f0)':{tag:'(0019,"PHILIPS MR/LAST",f0)',vr:"LT",name:"WSProtocolString1",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f1)':{tag:'(0019,"PHILIPS MR/LAST",f1)',vr:"LT",name:"WSProtocolString2",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f2)':{tag:'(0019,"PHILIPS MR/LAST",f2)',vr:"LT",name:"WSProtocolString3",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/LAST",f3)':{tag:'(0019,"PHILIPS MR/LAST",f3)',vr:"LT",name:"WSProtocolString4",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",00)':{tag:'(0021,"PHILIPS MR/LAST",00)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",10)':{tag:'(0021,"PHILIPS MR/LAST",10)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",20)':{tag:'(0021,"PHILIPS MR/LAST",20)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",21)':{tag:'(0021,"PHILIPS MR/LAST",21)',vr:"DS",name:"SliceGap",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/LAST",22)':{tag:'(0021,"PHILIPS MR/LAST",22)',vr:"DS",name:"StackRadialAngle",vm:"1",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",00)':{tag:'(0027,"PHILIPS MR/LAST",00)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",11)':{tag:'(0027,"PHILIPS MR/LAST",11)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",12)':{tag:'(0027,"PHILIPS MR/LAST",12)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",13)':{tag:'(0027,"PHILIPS MR/LAST",13)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",14)':{tag:'(0027,"PHILIPS MR/LAST",14)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",15)':{tag:'(0027,"PHILIPS MR/LAST",15)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0027,"PHILIPS MR/LAST",16)':{tag:'(0027,"PHILIPS MR/LAST",16)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",10)':{tag:'(0029,"PHILIPS MR/LAST",10)',vr:"DS",name:"FPMin",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",20)':{tag:'(0029,"PHILIPS MR/LAST",20)',vr:"DS",name:"FPMax",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",30)':{tag:'(0029,"PHILIPS MR/LAST",30)',vr:"DS",name:"ScaledMinimum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",40)':{tag:'(0029,"PHILIPS MR/LAST",40)',vr:"DS",name:"ScaledMaximum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",50)':{tag:'(0029,"PHILIPS MR/LAST",50)',vr:"DS",name:"WindowMinimum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",60)':{tag:'(0029,"PHILIPS MR/LAST",60)',vr:"DS",name:"WindowMaximum",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",61)':{tag:'(0029,"PHILIPS MR/LAST",61)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",70)':{tag:'(0029,"PHILIPS MR/LAST",70)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",71)':{tag:'(0029,"PHILIPS MR/LAST",71)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",72)':{tag:'(0029,"PHILIPS MR/LAST",72)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",80)':{tag:'(0029,"PHILIPS MR/LAST",80)',vr:"IS",name:"ViewCenter",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",81)':{tag:'(0029,"PHILIPS MR/LAST",81)',vr:"IS",name:"ViewSize",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",82)':{tag:'(0029,"PHILIPS MR/LAST",82)',vr:"IS",name:"ViewZoom",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/LAST",83)':{tag:'(0029,"PHILIPS MR/LAST",83)',vr:"IS",name:"ViewTransform",vm:"1",version:"PrivateTag"},'(6001,"PHILIPS MR/LAST",00)':{tag:'(6001,"PHILIPS MR/LAST",00)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1000)':{tag:'(0019,"PHILIPS MR/PART",1000)',vr:"DS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1005)':{tag:'(0019,"PHILIPS MR/PART",1005)',vr:"DS",name:"CCAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1006)':{tag:'(0019,"PHILIPS MR/PART",1006)',vr:"DS",name:"APAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1007)':{tag:'(0019,"PHILIPS MR/PART",1007)',vr:"DS",name:"LRAngulation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1008)':{tag:'(0019,"PHILIPS MR/PART",1008)',vr:"IS",name:"PatientPosition",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1009)':{tag:'(0019,"PHILIPS MR/PART",1009)',vr:"IS",name:"PatientOrientation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100a)':{tag:'(0019,"PHILIPS MR/PART",100a)',vr:"IS",name:"SliceOrientation",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100b)':{tag:'(0019,"PHILIPS MR/PART",100b)',vr:"DS",name:"LROffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100c)':{tag:'(0019,"PHILIPS MR/PART",100c)',vr:"DS",name:"CCOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100d)':{tag:'(0019,"PHILIPS MR/PART",100d)',vr:"DS",name:"APOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100e)':{tag:'(0019,"PHILIPS MR/PART",100e)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",100f)':{tag:'(0019,"PHILIPS MR/PART",100f)',vr:"IS",name:"NumberOfSlices",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1010)':{tag:'(0019,"PHILIPS MR/PART",1010)',vr:"DS",name:"SliceFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1011)':{tag:'(0019,"PHILIPS MR/PART",1011)',vr:"DS",name:"EchoTimes",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1015)':{tag:'(0019,"PHILIPS MR/PART",1015)',vr:"IS",name:"DynamicStudy",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1018)':{tag:'(0019,"PHILIPS MR/PART",1018)',vr:"DS",name:"HeartbeatInterval",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1019)':{tag:'(0019,"PHILIPS MR/PART",1019)',vr:"DS",name:"RepetitionTimeFFE",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",101a)':{tag:'(0019,"PHILIPS MR/PART",101a)',vr:"DS",name:"FFEFlipAngle",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",101b)':{tag:'(0019,"PHILIPS MR/PART",101b)',vr:"IS",name:"NumberOfScans",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1021)':{tag:'(0019,"PHILIPS MR/PART",1021)',vr:"DS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1022)':{tag:'(0019,"PHILIPS MR/PART",1022)',vr:"DS",name:"DynamicScanTimeBegin",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1024)':{tag:'(0019,"PHILIPS MR/PART",1024)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1064)':{tag:'(0019,"PHILIPS MR/PART",1064)',vr:"DS",name:"RepetitionTimeSE",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1065)':{tag:'(0019,"PHILIPS MR/PART",1065)',vr:"DS",name:"RepetitionTimeIR",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1069)':{tag:'(0019,"PHILIPS MR/PART",1069)',vr:"IS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106a)':{tag:'(0019,"PHILIPS MR/PART",106a)',vr:"IS",name:"CardiacFrequency",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106b)':{tag:'(0019,"PHILIPS MR/PART",106b)',vr:"DS",name:"InversionDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106c)':{tag:'(0019,"PHILIPS MR/PART",106c)',vr:"DS",name:"GateDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106d)':{tag:'(0019,"PHILIPS MR/PART",106d)',vr:"DS",name:"GateWidth",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",106e)':{tag:'(0019,"PHILIPS MR/PART",106e)',vr:"DS",name:"TriggerDelayTime",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1080)':{tag:'(0019,"PHILIPS MR/PART",1080)',vr:"IS",name:"NumberOfChemicalShifts",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1081)':{tag:'(0019,"PHILIPS MR/PART",1081)',vr:"DS",name:"ChemicalShift",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1084)':{tag:'(0019,"PHILIPS MR/PART",1084)',vr:"IS",name:"NumberOfRows",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1085)':{tag:'(0019,"PHILIPS MR/PART",1085)',vr:"IS",name:"NumberOfSamples",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1094)':{tag:'(0019,"PHILIPS MR/PART",1094)',vr:"LO",name:"MagnetizationTransferContrast",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1095)':{tag:'(0019,"PHILIPS MR/PART",1095)',vr:"LO",name:"SpectralPresaturationWithInversionRecovery",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1096)':{tag:'(0019,"PHILIPS MR/PART",1096)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1097)':{tag:'(0019,"PHILIPS MR/PART",1097)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a0)':{tag:'(0019,"PHILIPS MR/PART",10a0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a1)':{tag:'(0019,"PHILIPS MR/PART",10a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a3)':{tag:'(0019,"PHILIPS MR/PART",10a3)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10a4)':{tag:'(0019,"PHILIPS MR/PART",10a4)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10c8)':{tag:'(0019,"PHILIPS MR/PART",10c8)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10c9)':{tag:'(0019,"PHILIPS MR/PART",10c9)',vr:"IS",name:"FoldoverDirectionTransverse",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10ca)':{tag:'(0019,"PHILIPS MR/PART",10ca)',vr:"IS",name:"FoldoverDirectionSagittal",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cb)':{tag:'(0019,"PHILIPS MR/PART",10cb)',vr:"IS",name:"FoldoverDirectionCoronal",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cc)':{tag:'(0019,"PHILIPS MR/PART",10cc)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cd)':{tag:'(0019,"PHILIPS MR/PART",10cd)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10ce)':{tag:'(0019,"PHILIPS MR/PART",10ce)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10cf)':{tag:'(0019,"PHILIPS MR/PART",10cf)',vr:"IS",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d0)':{tag:'(0019,"PHILIPS MR/PART",10d0)',vr:"IS",name:"ScanResolution",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d2)':{tag:'(0019,"PHILIPS MR/PART",10d2)',vr:"LO",name:"WaterFatShift",vm:"2",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d4)':{tag:'(0019,"PHILIPS MR/PART",10d4)',vr:"IS",name:"ArtifactReduction",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d5)':{tag:'(0019,"PHILIPS MR/PART",10d5)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d6)':{tag:'(0019,"PHILIPS MR/PART",10d6)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d7)':{tag:'(0019,"PHILIPS MR/PART",10d7)',vr:"DS",name:"ScanPercentage",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d8)':{tag:'(0019,"PHILIPS MR/PART",10d8)',vr:"IS",name:"Halfscan",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10d9)':{tag:'(0019,"PHILIPS MR/PART",10d9)',vr:"IS",name:"EPIFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10da)':{tag:'(0019,"PHILIPS MR/PART",10da)',vr:"IS",name:"TurboFactor",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10db)':{tag:'(0019,"PHILIPS MR/PART",10db)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10e0)':{tag:'(0019,"PHILIPS MR/PART",10e0)',vr:"IS",name:"PercentageOfScanCompleted",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",10e1)':{tag:'(0019,"PHILIPS MR/PART",10e1)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1100)':{tag:'(0019,"PHILIPS MR/PART",1100)',vr:"IS",name:"NumberOfStacks",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1101)':{tag:'(0019,"PHILIPS MR/PART",1101)',vr:"IS",name:"StackType",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1102)':{tag:'(0019,"PHILIPS MR/PART",1102)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110b)':{tag:'(0019,"PHILIPS MR/PART",110b)',vr:"DS",name:"LROffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110c)':{tag:'(0019,"PHILIPS MR/PART",110c)',vr:"DS",name:"CCOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",110d)':{tag:'(0019,"PHILIPS MR/PART",110d)',vr:"DS",name:"APOffcenter",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",1145)':{tag:'(0019,"PHILIPS MR/PART",1145)',vr:"IS",name:"ReconstructionResolution",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",11fc)':{tag:'(0019,"PHILIPS MR/PART",11fc)',vr:"IS",name:"ResonanceFrequency",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12c0)':{tag:'(0019,"PHILIPS MR/PART",12c0)',vr:"DS",name:"TriggerDelayTimes",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e0)':{tag:'(0019,"PHILIPS MR/PART",12e0)',vr:"IS",name:"PrepulseType",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e1)':{tag:'(0019,"PHILIPS MR/PART",12e1)',vr:"DS",name:"PrepulseDelay",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS MR/PART",12e3)':{tag:'(0019,"PHILIPS MR/PART",12e3)',vr:"DS",name:"PhaseContrastVelocity",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1000)':{tag:'(0021,"PHILIPS MR/PART",1000)',vr:"IS",name:"ReconstructionNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1010)':{tag:'(0021,"PHILIPS MR/PART",1010)',vr:"IS",name:"ImageType",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1020)':{tag:'(0021,"PHILIPS MR/PART",1020)',vr:"IS",name:"SliceNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1030)':{tag:'(0021,"PHILIPS MR/PART",1030)',vr:"IS",name:"EchoNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1031)':{tag:'(0021,"PHILIPS MR/PART",1031)',vr:"DS",name:"PatientReferenceID",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1035)':{tag:'(0021,"PHILIPS MR/PART",1035)',vr:"IS",name:"ChemicalShiftNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1040)':{tag:'(0021,"PHILIPS MR/PART",1040)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1050)':{tag:'(0021,"PHILIPS MR/PART",1050)',vr:"IS",name:"DynamicScanNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1060)':{tag:'(0021,"PHILIPS MR/PART",1060)',vr:"IS",name:"NumberOfRowsInObject",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1061)':{tag:'(0021,"PHILIPS MR/PART",1061)',vr:"IS",name:"RowNumber",vm:"1-n",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1062)':{tag:'(0021,"PHILIPS MR/PART",1062)',vr:"IS",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1100)':{tag:'(0021,"PHILIPS MR/PART",1100)',vr:"DA",name:"ScanDate",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1110)':{tag:'(0021,"PHILIPS MR/PART",1110)',vr:"TM",name:"ScanTime",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS MR/PART",1221)':{tag:'(0021,"PHILIPS MR/PART",1221)',vr:"IS",name:"SliceGap",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",00)':{tag:'(0029,"PHILIPS MR/PART",00)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",04)':{tag:'(0029,"PHILIPS MR/PART",04)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",10)':{tag:'(0029,"PHILIPS MR/PART",10)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",11)':{tag:'(0029,"PHILIPS MR/PART",11)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",20)':{tag:'(0029,"PHILIPS MR/PART",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",31)':{tag:'(0029,"PHILIPS MR/PART",31)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",32)':{tag:'(0029,"PHILIPS MR/PART",32)',vr:"DS",name:"Unknown",vm:"2",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",c3)':{tag:'(0029,"PHILIPS MR/PART",c3)',vr:"IS",name:"ScanResolution",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",c4)':{tag:'(0029,"PHILIPS MR/PART",c4)',vr:"IS",name:"FieldOfView",vm:"1",version:"PrivateTag"},'(0029,"PHILIPS MR/PART",d5)':{tag:'(0029,"PHILIPS MR/PART",d5)',vr:"LT",name:"SliceThickness",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS-MR-1",11)':{tag:'(0019,"PHILIPS-MR-1",11)',vr:"IS",name:"ChemicalShiftNumber",vm:"1",version:"PrivateTag"},'(0019,"PHILIPS-MR-1",12)':{tag:'(0019,"PHILIPS-MR-1",12)',vr:"IS",name:"PhaseNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS-MR-1",01)':{tag:'(0021,"PHILIPS-MR-1",01)',vr:"IS",name:"ReconstructionNumber",vm:"1",version:"PrivateTag"},'(0021,"PHILIPS-MR-1",02)':{tag:'(0021,"PHILIPS-MR-1",02)',vr:"IS",name:"SliceNumber",vm:"1",version:"PrivateTag"},'(7001,"Picker NM Private Group",01)':{tag:'(7001,"Picker NM Private Group",01)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(7001,"Picker NM Private Group",02)':{tag:'(7001,"Picker NM Private Group",02)',vr:"OB",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",10)':{tag:'(0019,"SIEMENS CM VA0 ACQU",10)',vr:"LT",name:"ParameterFileName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",11)':{tag:'(0019,"SIEMENS CM VA0 ACQU",11)',vr:"LO",name:"SequenceFileName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",12)':{tag:'(0019,"SIEMENS CM VA0 ACQU",12)',vr:"LT",name:"SequenceFileOwner",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",13)':{tag:'(0019,"SIEMENS CM VA0 ACQU",13)',vr:"LT",name:"SequenceDescription",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 ACQU",14)':{tag:'(0019,"SIEMENS CM VA0 ACQU",14)',vr:"LT",name:"EPIFileName",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",00)':{tag:'(0009,"SIEMENS CM VA0 CMS",00)',vr:"DS",name:"NumberOfMeasurements",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",10)':{tag:'(0009,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"StorageMode",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",12)':{tag:'(0009,"SIEMENS CM VA0 CMS",12)',vr:"UL",name:"EvaluationMaskImage",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",26)':{tag:'(0009,"SIEMENS CM VA0 CMS",26)',vr:"DA",name:"LastMoveDate",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 CMS",27)':{tag:'(0009,"SIEMENS CM VA0 CMS",27)',vr:"TM",name:"LastMoveTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",0a)':{tag:'(0011,"SIEMENS CM VA0 CMS",0a)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",10)':{tag:'(0011,"SIEMENS CM VA0 CMS",10)',vr:"DA",name:"RegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",11)':{tag:'(0011,"SIEMENS CM VA0 CMS",11)',vr:"TM",name:"RegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",22)':{tag:'(0011,"SIEMENS CM VA0 CMS",22)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",23)':{tag:'(0011,"SIEMENS CM VA0 CMS",23)',vr:"DS",name:"UsedPatientWeight",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS CM VA0 CMS",40)':{tag:'(0011,"SIEMENS CM VA0 CMS",40)',vr:"IS",name:"OrganCode",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",00)':{tag:'(0013,"SIEMENS CM VA0 CMS",00)',vr:"LT",name:"ModifyingPhysician",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",10)':{tag:'(0013,"SIEMENS CM VA0 CMS",10)',vr:"DA",name:"ModificationDate",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",12)':{tag:'(0013,"SIEMENS CM VA0 CMS",12)',vr:"TM",name:"ModificationTime",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",20)':{tag:'(0013,"SIEMENS CM VA0 CMS",20)',vr:"LO",name:"PatientName",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",22)':{tag:'(0013,"SIEMENS CM VA0 CMS",22)',vr:"LO",name:"PatientId",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",30)':{tag:'(0013,"SIEMENS CM VA0 CMS",30)',vr:"DA",name:"PatientBirthdate",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",31)':{tag:'(0013,"SIEMENS CM VA0 CMS",31)',vr:"DS",name:"PatientWeight",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",32)':{tag:'(0013,"SIEMENS CM VA0 CMS",32)',vr:"LT",name:"PatientsMaidenName",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",33)':{tag:'(0013,"SIEMENS CM VA0 CMS",33)',vr:"LT",name:"ReferringPhysician",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",34)':{tag:'(0013,"SIEMENS CM VA0 CMS",34)',vr:"LT",name:"AdmittingDiagnosis",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",35)':{tag:'(0013,"SIEMENS CM VA0 CMS",35)',vr:"LO",name:"PatientSex",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",40)':{tag:'(0013,"SIEMENS CM VA0 CMS",40)',vr:"LO",name:"ProcedureDescription",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",42)':{tag:'(0013,"SIEMENS CM VA0 CMS",42)',vr:"LO",name:"RestDirection",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",44)':{tag:'(0013,"SIEMENS CM VA0 CMS",44)',vr:"LO",name:"PatientPosition",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",46)':{tag:'(0013,"SIEMENS CM VA0 CMS",46)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",50)':{tag:'(0013,"SIEMENS CM VA0 CMS",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",51)':{tag:'(0013,"SIEMENS CM VA0 CMS",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",52)':{tag:'(0013,"SIEMENS CM VA0 CMS",52)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",53)':{tag:'(0013,"SIEMENS CM VA0 CMS",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",54)':{tag:'(0013,"SIEMENS CM VA0 CMS",54)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",55)':{tag:'(0013,"SIEMENS CM VA0 CMS",55)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0013,"SIEMENS CM VA0 CMS",56)':{tag:'(0013,"SIEMENS CM VA0 CMS",56)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",10)':{tag:'(0019,"SIEMENS CM VA0 CMS",10)',vr:"DS",name:"NetFrequency",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",20)':{tag:'(0019,"SIEMENS CM VA0 CMS",20)',vr:"LT",name:"MeasurementMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",30)':{tag:'(0019,"SIEMENS CM VA0 CMS",30)',vr:"LT",name:"CalculationMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",50)':{tag:'(0019,"SIEMENS CM VA0 CMS",50)',vr:"IS",name:"NoiseLevel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CM VA0 CMS",60)':{tag:'(0019,"SIEMENS CM VA0 CMS",60)',vr:"IS",name:"NumberOfDataBytes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",20)':{tag:'(0021,"SIEMENS CM VA0 CMS",20)',vr:"DS",name:"FoV",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",22)':{tag:'(0021,"SIEMENS CM VA0 CMS",22)',vr:"DS",name:"ImageMagnificationFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",24)':{tag:'(0021,"SIEMENS CM VA0 CMS",24)',vr:"DS",name:"ImageScrollOffset",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",26)':{tag:'(0021,"SIEMENS CM VA0 CMS",26)',vr:"IS",name:"ImagePixelOffset",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",30)':{tag:'(0021,"SIEMENS CM VA0 CMS",30)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",32)':{tag:'(0021,"SIEMENS CM VA0 CMS",32)',vr:"CS",name:"PatientRestDirection",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",60)':{tag:'(0021,"SIEMENS CM VA0 CMS",60)',vr:"DS",name:"ImagePosition",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",61)':{tag:'(0021,"SIEMENS CM VA0 CMS",61)',vr:"DS",name:"ImageNormal",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",63)':{tag:'(0021,"SIEMENS CM VA0 CMS",63)',vr:"DS",name:"ImageDistance",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",65)':{tag:'(0021,"SIEMENS CM VA0 CMS",65)',vr:"US",name:"ImagePositioningHistoryMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",6a)':{tag:'(0021,"SIEMENS CM VA0 CMS",6a)',vr:"DS",name:"ImageRow",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",6b)':{tag:'(0021,"SIEMENS CM VA0 CMS",6b)',vr:"DS",name:"ImageColumn",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",70)':{tag:'(0021,"SIEMENS CM VA0 CMS",70)',vr:"LT",name:"PatientOrientationSet1",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",71)':{tag:'(0021,"SIEMENS CM VA0 CMS",71)',vr:"LT",name:"PatientOrientationSet2",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",80)':{tag:'(0021,"SIEMENS CM VA0 CMS",80)',vr:"LT",name:"StudyName",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CM VA0 CMS",82)':{tag:'(0021,"SIEMENS CM VA0 CMS",82)',vr:"LT",name:"StudyType",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",10)':{tag:'(0029,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"WindowStyle",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",11)':{tag:'(0029,"SIEMENS CM VA0 CMS",11)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",13)':{tag:'(0029,"SIEMENS CM VA0 CMS",13)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",20)':{tag:'(0029,"SIEMENS CM VA0 CMS",20)',vr:"LT",name:"PixelQualityCode",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",22)':{tag:'(0029,"SIEMENS CM VA0 CMS",22)',vr:"IS",name:"PixelQualityValue",vm:"3",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",50)':{tag:'(0029,"SIEMENS CM VA0 CMS",50)',vr:"LT",name:"ArchiveCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",51)':{tag:'(0029,"SIEMENS CM VA0 CMS",51)',vr:"LT",name:"ExposureCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",52)':{tag:'(0029,"SIEMENS CM VA0 CMS",52)',vr:"LT",name:"SortCode",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",53)':{tag:'(0029,"SIEMENS CM VA0 CMS",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CM VA0 CMS",60)':{tag:'(0029,"SIEMENS CM VA0 CMS",60)',vr:"LT",name:"Splash",vm:"1",version:"PrivateTag"},'(0051,"SIEMENS CM VA0 CMS",10)':{tag:'(0051,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"ImageText",vm:"1-n",version:"PrivateTag"},'(6021,"SIEMENS CM VA0 CMS",00)':{tag:'(6021,"SIEMENS CM VA0 CMS",00)',vr:"LT",name:"ImageGraphicsFormatCode",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CM VA0 CMS",10)':{tag:'(6021,"SIEMENS CM VA0 CMS",10)',vr:"LT",name:"ImageGraphics",vm:"1",version:"PrivateTag"},'(7fe1,"SIEMENS CM VA0 CMS",00)':{tag:'(7fe1,"SIEMENS CM VA0 CMS",00)',vr:"OB",name:"BinaryData",vm:"1-n",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",10)':{tag:'(0009,"SIEMENS CM VA0 LAB",10)',vr:"LT",name:"GeneratorIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",11)':{tag:'(0009,"SIEMENS CM VA0 LAB",11)',vr:"LT",name:"GantryIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",12)':{tag:'(0009,"SIEMENS CM VA0 LAB",12)',vr:"LT",name:"X-RayTubeIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",13)':{tag:'(0009,"SIEMENS CM VA0 LAB",13)',vr:"LT",name:"DetectorIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",14)':{tag:'(0009,"SIEMENS CM VA0 LAB",14)',vr:"LT",name:"DASIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",15)':{tag:'(0009,"SIEMENS CM VA0 LAB",15)',vr:"LT",name:"SMIIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",16)':{tag:'(0009,"SIEMENS CM VA0 LAB",16)',vr:"LT",name:"CPUIdentificationLabel",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CM VA0 LAB",20)':{tag:'(0009,"SIEMENS CM VA0 LAB",20)',vr:"LT",name:"HeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",08)':{tag:'(0029,"SIEMENS CSA HEADER",08)',vr:"CS",name:"CSAImageHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",09)':{tag:'(0029,"SIEMENS CSA HEADER",09)',vr:"LO",name:"CSAImageHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",10)':{tag:'(0029,"SIEMENS CSA HEADER",10)',vr:"OB",name:"CSAImageHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",18)':{tag:'(0029,"SIEMENS CSA HEADER",18)',vr:"CS",name:"CSASeriesHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",19)':{tag:'(0029,"SIEMENS CSA HEADER",19)',vr:"LO",name:"CSASeriesHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA HEADER",20)':{tag:'(0029,"SIEMENS CSA HEADER",20)',vr:"OB",name:"CSASeriesHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",08)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",08)',vr:"CS",name:"CSADataType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",09)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",09)',vr:"LO",name:"CSADataVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS CSA NON-IMAGE",10)':{tag:'(0029,"SIEMENS CSA NON-IMAGE",10)',vr:"OB",name:"CSADataInfo",vm:"1",version:"PrivateTag"},'(7FE1,"SIEMENS CSA NON-IMAGE",10)':{tag:'(7FE1,"SIEMENS CSA NON-IMAGE",10)',vr:"OB",name:"CSAData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",10)':{tag:'(0019,"SIEMENS CT VA0 COAD",10)',vr:"DS",name:"DistanceSourceToSourceSideCollimator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",11)':{tag:'(0019,"SIEMENS CT VA0 COAD",11)',vr:"DS",name:"DistanceSourceToDetectorSideCollimator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",20)':{tag:'(0019,"SIEMENS CT VA0 COAD",20)',vr:"IS",name:"NumberOfPossibleChannels",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",21)':{tag:'(0019,"SIEMENS CT VA0 COAD",21)',vr:"IS",name:"MeanChannelNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",22)':{tag:'(0019,"SIEMENS CT VA0 COAD",22)',vr:"DS",name:"DetectorSpacing",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",23)':{tag:'(0019,"SIEMENS CT VA0 COAD",23)',vr:"DS",name:"DetectorCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",24)':{tag:'(0019,"SIEMENS CT VA0 COAD",24)',vr:"DS",name:"ReadingIntegrationTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",50)':{tag:'(0019,"SIEMENS CT VA0 COAD",50)',vr:"DS",name:"DetectorAlignment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",52)':{tag:'(0019,"SIEMENS CT VA0 COAD",52)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",54)':{tag:'(0019,"SIEMENS CT VA0 COAD",54)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",60)':{tag:'(0019,"SIEMENS CT VA0 COAD",60)',vr:"DS",name:"FocusAlignment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",65)':{tag:'(0019,"SIEMENS CT VA0 COAD",65)',vr:"UL",name:"FocalSpotDeflectionAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",66)':{tag:'(0019,"SIEMENS CT VA0 COAD",66)',vr:"UL",name:"FocalSpotDeflectionPhase",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",67)':{tag:'(0019,"SIEMENS CT VA0 COAD",67)',vr:"UL",name:"FocalSpotDeflectionOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",70)':{tag:'(0019,"SIEMENS CT VA0 COAD",70)',vr:"DS",name:"WaterScalingFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",71)':{tag:'(0019,"SIEMENS CT VA0 COAD",71)',vr:"DS",name:"InterpolationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",80)':{tag:'(0019,"SIEMENS CT VA0 COAD",80)',vr:"LT",name:"PatientRegion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",82)':{tag:'(0019,"SIEMENS CT VA0 COAD",82)',vr:"LT",name:"PatientPhaseOfLife",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",90)':{tag:'(0019,"SIEMENS CT VA0 COAD",90)',vr:"DS",name:"OsteoOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",92)':{tag:'(0019,"SIEMENS CT VA0 COAD",92)',vr:"DS",name:"OsteoRegressionLineSlope",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",93)':{tag:'(0019,"SIEMENS CT VA0 COAD",93)',vr:"DS",name:"OsteoRegressionLineIntercept",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",94)':{tag:'(0019,"SIEMENS CT VA0 COAD",94)',vr:"DS",name:"OsteoStandardizationCode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",96)':{tag:'(0019,"SIEMENS CT VA0 COAD",96)',vr:"IS",name:"OsteoPhantomNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A3)':{tag:'(0019,"SIEMENS CT VA0 COAD",A3)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A4)':{tag:'(0019,"SIEMENS CT VA0 COAD",A4)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A5)':{tag:'(0019,"SIEMENS CT VA0 COAD",A5)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A6)':{tag:'(0019,"SIEMENS CT VA0 COAD",A6)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A7)':{tag:'(0019,"SIEMENS CT VA0 COAD",A7)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A8)':{tag:'(0019,"SIEMENS CT VA0 COAD",A8)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",A9)':{tag:'(0019,"SIEMENS CT VA0 COAD",A9)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AA)':{tag:'(0019,"SIEMENS CT VA0 COAD",AA)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AB)':{tag:'(0019,"SIEMENS CT VA0 COAD",AB)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AC)':{tag:'(0019,"SIEMENS CT VA0 COAD",AC)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AD)':{tag:'(0019,"SIEMENS CT VA0 COAD",AD)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AE)':{tag:'(0019,"SIEMENS CT VA0 COAD",AE)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",AF)':{tag:'(0019,"SIEMENS CT VA0 COAD",AF)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",B0)':{tag:'(0019,"SIEMENS CT VA0 COAD",B0)',vr:"DS",name:"FeedPerRotation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BD)':{tag:'(0019,"SIEMENS CT VA0 COAD",BD)',vr:"IS",name:"PulmoTriggerLevel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BE)':{tag:'(0019,"SIEMENS CT VA0 COAD",BE)',vr:"DS",name:"ExpiratoricReserveVolume",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",BF)':{tag:'(0019,"SIEMENS CT VA0 COAD",BF)',vr:"DS",name:"VitalCapacity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C0)':{tag:'(0019,"SIEMENS CT VA0 COAD",C0)',vr:"DS",name:"PulmoWater",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C1)':{tag:'(0019,"SIEMENS CT VA0 COAD",C1)',vr:"DS",name:"PulmoAir",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C2)':{tag:'(0019,"SIEMENS CT VA0 COAD",C2)',vr:"DA",name:"PulmoDate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 COAD",C3)':{tag:'(0019,"SIEMENS CT VA0 COAD",C3)',vr:"TM",name:"PulmoTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",10)':{tag:'(0019,"SIEMENS CT VA0 GEN",10)',vr:"DS",name:"SourceSideCollimatorAperture",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",11)':{tag:'(0019,"SIEMENS CT VA0 GEN",11)',vr:"DS",name:"DetectorSideCollimatorAperture",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",20)':{tag:'(0019,"SIEMENS CT VA0 GEN",20)',vr:"DS",name:"ExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",21)':{tag:'(0019,"SIEMENS CT VA0 GEN",21)',vr:"DS",name:"ExposureCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",25)':{tag:'(0019,"SIEMENS CT VA0 GEN",25)',vr:"DS",name:"KVPGeneratorPowerCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",26)':{tag:'(0019,"SIEMENS CT VA0 GEN",26)',vr:"DS",name:"GeneratorVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",40)':{tag:'(0019,"SIEMENS CT VA0 GEN",40)',vr:"UL",name:"MasterControlMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",42)':{tag:'(0019,"SIEMENS CT VA0 GEN",42)',vr:"US",name:"ProcessingMask",vm:"5",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",44)':{tag:'(0019,"SIEMENS CT VA0 GEN",44)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",45)':{tag:'(0019,"SIEMENS CT VA0 GEN",45)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",62)':{tag:'(0019,"SIEMENS CT VA0 GEN",62)',vr:"IS",name:"NumberOfVirtuellChannels",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",70)':{tag:'(0019,"SIEMENS CT VA0 GEN",70)',vr:"IS",name:"NumberOfReadings",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",71)':{tag:'(0019,"SIEMENS CT VA0 GEN",71)',vr:"LT",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",74)':{tag:'(0019,"SIEMENS CT VA0 GEN",74)',vr:"IS",name:"NumberOfProjections",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",75)':{tag:'(0019,"SIEMENS CT VA0 GEN",75)',vr:"IS",name:"NumberOfBytes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",80)':{tag:'(0019,"SIEMENS CT VA0 GEN",80)',vr:"LT",name:"ReconstructionAlgorithmSet",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",81)':{tag:'(0019,"SIEMENS CT VA0 GEN",81)',vr:"LT",name:"ReconstructionAlgorithmIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",82)':{tag:'(0019,"SIEMENS CT VA0 GEN",82)',vr:"LT",name:"RegenerationSoftwareVersion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS CT VA0 GEN",88)':{tag:'(0019,"SIEMENS CT VA0 GEN",88)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",10)':{tag:'(0021,"SIEMENS CT VA0 GEN",10)',vr:"IS",name:"RotationAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",11)':{tag:'(0021,"SIEMENS CT VA0 GEN",11)',vr:"IS",name:"StartAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",20)':{tag:'(0021,"SIEMENS CT VA0 GEN",20)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",30)':{tag:'(0021,"SIEMENS CT VA0 GEN",30)',vr:"IS",name:"TopogramTubePosition",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",32)':{tag:'(0021,"SIEMENS CT VA0 GEN",32)',vr:"DS",name:"LengthOfTopogram",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",34)':{tag:'(0021,"SIEMENS CT VA0 GEN",34)',vr:"DS",name:"TopogramCorrectionFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",36)':{tag:'(0021,"SIEMENS CT VA0 GEN",36)',vr:"DS",name:"MaximumTablePosition",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",40)':{tag:'(0021,"SIEMENS CT VA0 GEN",40)',vr:"IS",name:"TableMoveDirectionCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",45)':{tag:'(0021,"SIEMENS CT VA0 GEN",45)',vr:"IS",name:"VOIStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",46)':{tag:'(0021,"SIEMENS CT VA0 GEN",46)',vr:"IS",name:"VOIStopRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",47)':{tag:'(0021,"SIEMENS CT VA0 GEN",47)',vr:"IS",name:"VOIStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",48)':{tag:'(0021,"SIEMENS CT VA0 GEN",48)',vr:"IS",name:"VOIStopColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",49)':{tag:'(0021,"SIEMENS CT VA0 GEN",49)',vr:"IS",name:"VOIStartSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",4a)':{tag:'(0021,"SIEMENS CT VA0 GEN",4a)',vr:"IS",name:"VOIStopSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",50)':{tag:'(0021,"SIEMENS CT VA0 GEN",50)',vr:"IS",name:"VectorStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",51)':{tag:'(0021,"SIEMENS CT VA0 GEN",51)',vr:"IS",name:"VectorRowStep",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",52)':{tag:'(0021,"SIEMENS CT VA0 GEN",52)',vr:"IS",name:"VectorStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",53)':{tag:'(0021,"SIEMENS CT VA0 GEN",53)',vr:"IS",name:"VectorColumnStep",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",60)':{tag:'(0021,"SIEMENS CT VA0 GEN",60)',vr:"IS",name:"RangeTypeCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",62)':{tag:'(0021,"SIEMENS CT VA0 GEN",62)',vr:"IS",name:"ReferenceTypeCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",70)':{tag:'(0021,"SIEMENS CT VA0 GEN",70)',vr:"DS",name:"ObjectOrientation",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",72)':{tag:'(0021,"SIEMENS CT VA0 GEN",72)',vr:"DS",name:"LightOrientation",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",75)':{tag:'(0021,"SIEMENS CT VA0 GEN",75)',vr:"DS",name:"LightBrightness",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",76)':{tag:'(0021,"SIEMENS CT VA0 GEN",76)',vr:"DS",name:"LightContrast",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7a)':{tag:'(0021,"SIEMENS CT VA0 GEN",7a)',vr:"IS",name:"OverlayThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7b)':{tag:'(0021,"SIEMENS CT VA0 GEN",7b)',vr:"IS",name:"SurfaceThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",7c)':{tag:'(0021,"SIEMENS CT VA0 GEN",7c)',vr:"IS",name:"GreyScaleThreshold",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a0)':{tag:'(0021,"SIEMENS CT VA0 GEN",a0)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a2)':{tag:'(0021,"SIEMENS CT VA0 GEN",a2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 GEN",a7)':{tag:'(0021,"SIEMENS CT VA0 GEN",a7)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",10)':{tag:'(0009,"SIEMENS CT VA0 IDE",10)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",30)':{tag:'(0009,"SIEMENS CT VA0 IDE",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",31)':{tag:'(0009,"SIEMENS CT VA0 IDE",31)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",32)':{tag:'(0009,"SIEMENS CT VA0 IDE",32)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",34)':{tag:'(0009,"SIEMENS CT VA0 IDE",34)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",40)':{tag:'(0009,"SIEMENS CT VA0 IDE",40)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",42)':{tag:'(0009,"SIEMENS CT VA0 IDE",42)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",50)':{tag:'(0009,"SIEMENS CT VA0 IDE",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 IDE",51)':{tag:'(0009,"SIEMENS CT VA0 IDE",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 ORI",20)':{tag:'(0009,"SIEMENS CT VA0 ORI",20)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS CT VA0 ORI",30)':{tag:'(0009,"SIEMENS CT VA0 ORI",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CT VA0 OST",00)':{tag:'(6021,"SIEMENS CT VA0 OST",00)',vr:"LT",name:"OsteoContourComment",vm:"1",version:"PrivateTag"},'(6021,"SIEMENS CT VA0 OST",10)':{tag:'(6021,"SIEMENS CT VA0 OST",10)',vr:"US",name:"OsteoContourBuffer",vm:"256",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",10)':{tag:'(0021,"SIEMENS CT VA0 RAW",10)',vr:"UL",name:"CreationMask",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",20)':{tag:'(0021,"SIEMENS CT VA0 RAW",20)',vr:"UL",name:"EvaluationMask",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",30)':{tag:'(0021,"SIEMENS CT VA0 RAW",30)',vr:"US",name:"ExtendedProcessingMask",vm:"7",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",40)':{tag:'(0021,"SIEMENS CT VA0 RAW",40)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",41)':{tag:'(0021,"SIEMENS CT VA0 RAW",41)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",42)':{tag:'(0021,"SIEMENS CT VA0 RAW",42)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",43)':{tag:'(0021,"SIEMENS CT VA0 RAW",43)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",44)':{tag:'(0021,"SIEMENS CT VA0 RAW",44)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS CT VA0 RAW",50)':{tag:'(0021,"SIEMENS CT VA0 RAW",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS DICOM",10)':{tag:'(0009,"SIEMENS DICOM",10)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS DICOM",12)':{tag:'(0009,"SIEMENS DICOM",12)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",10)':{tag:'(0019,"SIEMENS DLR.01",10)',vr:"LT",name:"MeasurementMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",11)':{tag:'(0019,"SIEMENS DLR.01",11)',vr:"LT",name:"ImageType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",15)':{tag:'(0019,"SIEMENS DLR.01",15)',vr:"LT",name:"SoftwareVersion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",20)':{tag:'(0019,"SIEMENS DLR.01",20)',vr:"LT",name:"MPMCode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",21)':{tag:'(0019,"SIEMENS DLR.01",21)',vr:"LT",name:"Latitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",22)':{tag:'(0019,"SIEMENS DLR.01",22)',vr:"LT",name:"Sensitivity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",23)':{tag:'(0019,"SIEMENS DLR.01",23)',vr:"LT",name:"EDR",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",24)':{tag:'(0019,"SIEMENS DLR.01",24)',vr:"LT",name:"LFix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",25)':{tag:'(0019,"SIEMENS DLR.01",25)',vr:"LT",name:"SFix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",26)':{tag:'(0019,"SIEMENS DLR.01",26)',vr:"LT",name:"PresetMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",27)':{tag:'(0019,"SIEMENS DLR.01",27)',vr:"LT",name:"Region",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",28)':{tag:'(0019,"SIEMENS DLR.01",28)',vr:"LT",name:"Subregion",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",30)':{tag:'(0019,"SIEMENS DLR.01",30)',vr:"LT",name:"Orientation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",31)':{tag:'(0019,"SIEMENS DLR.01",31)',vr:"LT",name:"MarkOnFilm",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",32)':{tag:'(0019,"SIEMENS DLR.01",32)',vr:"LT",name:"RotationOnDRC",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",40)':{tag:'(0019,"SIEMENS DLR.01",40)',vr:"LT",name:"ReaderType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",41)':{tag:'(0019,"SIEMENS DLR.01",41)',vr:"LT",name:"SubModality",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",42)':{tag:'(0019,"SIEMENS DLR.01",42)',vr:"LT",name:"ReaderSerialNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",50)':{tag:'(0019,"SIEMENS DLR.01",50)',vr:"LT",name:"CassetteScale",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",51)':{tag:'(0019,"SIEMENS DLR.01",51)',vr:"LT",name:"CassetteMatrix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",52)':{tag:'(0019,"SIEMENS DLR.01",52)',vr:"LT",name:"CassetteSubmatrix",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",53)':{tag:'(0019,"SIEMENS DLR.01",53)',vr:"LT",name:"Barcode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",60)':{tag:'(0019,"SIEMENS DLR.01",60)',vr:"LT",name:"ContrastType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",61)':{tag:'(0019,"SIEMENS DLR.01",61)',vr:"LT",name:"RotationAmount",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",62)':{tag:'(0019,"SIEMENS DLR.01",62)',vr:"LT",name:"RotationCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",63)':{tag:'(0019,"SIEMENS DLR.01",63)',vr:"LT",name:"DensityShift",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",64)':{tag:'(0019,"SIEMENS DLR.01",64)',vr:"US",name:"FrequencyRank",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",65)':{tag:'(0019,"SIEMENS DLR.01",65)',vr:"LT",name:"FrequencyEnhancement",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",66)':{tag:'(0019,"SIEMENS DLR.01",66)',vr:"LT",name:"FrequencyType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",67)':{tag:'(0019,"SIEMENS DLR.01",67)',vr:"LT",name:"KernelLength",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",68)':{tag:'(0019,"SIEMENS DLR.01",68)',vr:"UL",name:"KernelMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",69)':{tag:'(0019,"SIEMENS DLR.01",69)',vr:"UL",name:"ConvolutionMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",70)':{tag:'(0019,"SIEMENS DLR.01",70)',vr:"LT",name:"PLASource",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",71)':{tag:'(0019,"SIEMENS DLR.01",71)',vr:"LT",name:"PLADestination",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",75)':{tag:'(0019,"SIEMENS DLR.01",75)',vr:"LT",name:"UIDOriginalImage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",76)':{tag:'(0019,"SIEMENS DLR.01",76)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",80)':{tag:'(0019,"SIEMENS DLR.01",80)',vr:"LT",name:"ReaderHeader",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",90)':{tag:'(0019,"SIEMENS DLR.01",90)',vr:"LT",name:"PLAOfSecondaryDestination",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",a0)':{tag:'(0019,"SIEMENS DLR.01",a0)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS DLR.01",a1)':{tag:'(0019,"SIEMENS DLR.01",a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",10)':{tag:'(0041,"SIEMENS DLR.01",10)',vr:"US",name:"NumberOfHardcopies",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",20)':{tag:'(0041,"SIEMENS DLR.01",20)',vr:"LT",name:"FilmFormat",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",30)':{tag:'(0041,"SIEMENS DLR.01",30)',vr:"LT",name:"FilmSize",vm:"1",version:"PrivateTag"},'(0041,"SIEMENS DLR.01",31)':{tag:'(0041,"SIEMENS DLR.01",31)',vr:"LT",name:"FullFilmFormat",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",08)':{tag:'(0003,"SIEMENS ISI",08)',vr:"US",name:"ISICommandField",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",11)':{tag:'(0003,"SIEMENS ISI",11)',vr:"US",name:"AttachIDApplicationCode",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",12)':{tag:'(0003,"SIEMENS ISI",12)',vr:"UL",name:"AttachIDMessageCount",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",13)':{tag:'(0003,"SIEMENS ISI",13)',vr:"DA",name:"AttachIDDate",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",14)':{tag:'(0003,"SIEMENS ISI",14)',vr:"TM",name:"AttachIDTime",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",20)':{tag:'(0003,"SIEMENS ISI",20)',vr:"US",name:"MessageType",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",30)':{tag:'(0003,"SIEMENS ISI",30)',vr:"DA",name:"MaxWaitingDate",vm:"1",version:"PrivateTag"},'(0003,"SIEMENS ISI",31)':{tag:'(0003,"SIEMENS ISI",31)',vr:"TM",name:"MaxWaitingTime",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS ISI",01)':{tag:'(0009,"SIEMENS ISI",01)',vr:"UN",name:"RISPatientInfoIMGEF",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",03)':{tag:'(0011,"SIEMENS ISI",03)',vr:"LT",name:"PatientUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",04)':{tag:'(0011,"SIEMENS ISI",04)',vr:"LT",name:"PatientID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",0a)':{tag:'(0011,"SIEMENS ISI",0a)',vr:"LT",name:"CaseID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",22)':{tag:'(0011,"SIEMENS ISI",22)',vr:"LT",name:"RequestID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",23)':{tag:'(0011,"SIEMENS ISI",23)',vr:"LT",name:"ExaminationUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",a1)':{tag:'(0011,"SIEMENS ISI",a1)',vr:"DA",name:"PatientRegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",a2)':{tag:'(0011,"SIEMENS ISI",a2)',vr:"TM",name:"PatientRegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b0)':{tag:'(0011,"SIEMENS ISI",b0)',vr:"LT",name:"PatientLastName",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b2)':{tag:'(0011,"SIEMENS ISI",b2)',vr:"LT",name:"PatientFirstName",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",b4)':{tag:'(0011,"SIEMENS ISI",b4)',vr:"LT",name:"PatientHospitalStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",bc)':{tag:'(0011,"SIEMENS ISI",bc)',vr:"TM",name:"CurrentLocationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",c0)':{tag:'(0011,"SIEMENS ISI",c0)',vr:"LT",name:"PatientInsuranceStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",d0)':{tag:'(0011,"SIEMENS ISI",d0)',vr:"LT",name:"PatientBillingType",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS ISI",d2)':{tag:'(0011,"SIEMENS ISI",d2)',vr:"LT",name:"PatientBillingAddress",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",12)':{tag:'(0031,"SIEMENS ISI",12)',vr:"LT",name:"ExaminationReason",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",30)':{tag:'(0031,"SIEMENS ISI",30)',vr:"DA",name:"RequestedDate",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",32)':{tag:'(0031,"SIEMENS ISI",32)',vr:"TM",name:"WorklistRequestStartTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",33)':{tag:'(0031,"SIEMENS ISI",33)',vr:"TM",name:"WorklistRequestEndTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",4a)':{tag:'(0031,"SIEMENS ISI",4a)',vr:"TM",name:"RequestedTime",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS ISI",80)':{tag:'(0031,"SIEMENS ISI",80)',vr:"LT",name:"RequestedLocation",vm:"1",version:"PrivateTag"},'(0055,"SIEMENS ISI",46)':{tag:'(0055,"SIEMENS ISI",46)',vr:"LT",name:"CurrentWard",vm:"1",version:"PrivateTag"},'(0193,"SIEMENS ISI",02)':{tag:'(0193,"SIEMENS ISI",02)',vr:"DS",name:"RISKey",vm:"1",version:"PrivateTag"},'(0307,"SIEMENS ISI",01)':{tag:'(0307,"SIEMENS ISI",01)',vr:"UN",name:"RISWorklistIMGEF",vm:"1",version:"PrivateTag"},'(0309,"SIEMENS ISI",01)':{tag:'(0309,"SIEMENS ISI",01)',vr:"UN",name:"RISReportIMGEF",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",01)':{tag:'(4009,"SIEMENS ISI",01)',vr:"LT",name:"ReportID",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",20)':{tag:'(4009,"SIEMENS ISI",20)',vr:"LT",name:"ReportStatus",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",30)':{tag:'(4009,"SIEMENS ISI",30)',vr:"DA",name:"ReportCreationDate",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",70)':{tag:'(4009,"SIEMENS ISI",70)',vr:"LT",name:"ReportApprovingPhysician",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e0)':{tag:'(4009,"SIEMENS ISI",e0)',vr:"LT",name:"ReportText",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e1)':{tag:'(4009,"SIEMENS ISI",e1)',vr:"LT",name:"ReportAuthor",vm:"1",version:"PrivateTag"},'(4009,"SIEMENS ISI",e3)':{tag:'(4009,"SIEMENS ISI",e3)',vr:"LT",name:"ReportingRadiologist",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",04)':{tag:'(0029,"SIEMENS MED DISPLAY",04)',vr:"LT",name:"PhotometricInterpretation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",10)':{tag:'(0029,"SIEMENS MED DISPLAY",10)',vr:"US",name:"RowsOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",11)':{tag:'(0029,"SIEMENS MED DISPLAY",11)',vr:"US",name:"ColumnsOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",20)':{tag:'(0029,"SIEMENS MED DISPLAY",20)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",21)':{tag:'(0029,"SIEMENS MED DISPLAY",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",50)':{tag:'(0029,"SIEMENS MED DISPLAY",50)',vr:"US",name:"OriginOfSubmatrix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",99)':{tag:'(0029,"SIEMENS MED DISPLAY",99)',vr:"LT",name:"ShutterType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a0)':{tag:'(0029,"SIEMENS MED DISPLAY",a0)',vr:"US",name:"RowsOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a1)':{tag:'(0029,"SIEMENS MED DISPLAY",a1)',vr:"US",name:"ColumnsOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",a2)':{tag:'(0029,"SIEMENS MED DISPLAY",a2)',vr:"US",name:"OriginOfRectangularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",b0)':{tag:'(0029,"SIEMENS MED DISPLAY",b0)',vr:"US",name:"RadiusOfCircularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",b2)':{tag:'(0029,"SIEMENS MED DISPLAY",b2)',vr:"US",name:"OriginOfCircularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED DISPLAY",c1)':{tag:'(0029,"SIEMENS MED DISPLAY",c1)',vr:"US",name:"ContourOfIrregularShutter",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",10)':{tag:'(0029,"SIEMENS MED HG",10)',vr:"US",name:"ListOfGroupNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",15)':{tag:'(0029,"SIEMENS MED HG",15)',vr:"LT",name:"ListOfShadowOwnerCodes",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",20)':{tag:'(0029,"SIEMENS MED HG",20)',vr:"US",name:"ListOfElementNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",30)':{tag:'(0029,"SIEMENS MED HG",30)',vr:"US",name:"ListOfTotalDisplayLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",40)':{tag:'(0029,"SIEMENS MED HG",40)',vr:"LT",name:"ListOfDisplayPrefix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",50)':{tag:'(0029,"SIEMENS MED HG",50)',vr:"LT",name:"ListOfDisplayPostfix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",60)':{tag:'(0029,"SIEMENS MED HG",60)',vr:"US",name:"ListOfTextPosition",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED HG",70)':{tag:'(0029,"SIEMENS MED HG",70)',vr:"LT",name:"ListOfTextConcatenation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",10)':{tag:'(0029,"SIEMENS MED MG",10)',vr:"US",name:"ListOfGroupNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",15)':{tag:'(0029,"SIEMENS MED MG",15)',vr:"LT",name:"ListOfShadowOwnerCodes",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",20)':{tag:'(0029,"SIEMENS MED MG",20)',vr:"US",name:"ListOfElementNumbers",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",30)':{tag:'(0029,"SIEMENS MED MG",30)',vr:"US",name:"ListOfTotalDisplayLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",40)':{tag:'(0029,"SIEMENS MED MG",40)',vr:"LT",name:"ListOfDisplayPrefix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",50)':{tag:'(0029,"SIEMENS MED MG",50)',vr:"LT",name:"ListOfDisplayPostfix",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",60)':{tag:'(0029,"SIEMENS MED MG",60)',vr:"US",name:"ListOfTextPosition",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MED MG",70)':{tag:'(0029,"SIEMENS MED MG",70)',vr:"LT",name:"ListOfTextConcatenation",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",10)':{tag:'(0009,"SIEMENS MED",10)',vr:"LO",name:"RecognitionCode",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",30)':{tag:'(0009,"SIEMENS MED",30)',vr:"UL",name:"ByteOffsetOfOriginalHeader",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",31)':{tag:'(0009,"SIEMENS MED",31)',vr:"UL",name:"LengthOfOriginalHeader",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",40)':{tag:'(0009,"SIEMENS MED",40)',vr:"UL",name:"ByteOffsetOfPixelmatrix",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",41)':{tag:'(0009,"SIEMENS MED",41)',vr:"UL",name:"LengthOfPixelmatrixInBytes",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",50)':{tag:'(0009,"SIEMENS MED",50)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",51)':{tag:'(0009,"SIEMENS MED",51)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",f5)':{tag:'(0009,"SIEMENS MED",f5)',vr:"LT",name:"PDMEFIDPlaceholder",vm:"1",version:"PrivateTag"},'(0009,"SIEMENS MED",f6)':{tag:'(0009,"SIEMENS MED",f6)',vr:"LT",name:"PDMDataObjectTypeExtension",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",10)':{tag:'(0021,"SIEMENS MED",10)',vr:"DS",name:"Zoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",11)':{tag:'(0021,"SIEMENS MED",11)',vr:"DS",name:"Target",vm:"2",version:"PrivateTag"},'(0021,"SIEMENS MED",12)':{tag:'(0021,"SIEMENS MED",12)',vr:"IS",name:"TubeAngle",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MED",20)':{tag:'(0021,"SIEMENS MED",20)',vr:"US",name:"ROIMask",vm:"1",version:"PrivateTag"},'(7001,"SIEMENS MED",10)':{tag:'(7001,"SIEMENS MED",10)',vr:"LT",name:"Dummy",vm:"1",version:"PrivateTag"},'(7003,"SIEMENS MED",10)':{tag:'(7003,"SIEMENS MED",10)',vr:"LT",name:"Header",vm:"1",version:"PrivateTag"},'(7005,"SIEMENS MED",10)':{tag:'(7005,"SIEMENS MED",10)',vr:"LT",name:"Dummy",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",08)':{tag:'(0029,"SIEMENS MEDCOM HEADER",08)',vr:"CS",name:"MedComHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",09)':{tag:'(0029,"SIEMENS MEDCOM HEADER",09)',vr:"LO",name:"MedComHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",10)':{tag:'(0029,"SIEMENS MEDCOM HEADER",10)',vr:"OB",name:"MedComHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",20)':{tag:'(0029,"SIEMENS MEDCOM HEADER",20)',vr:"OB",name:"MedComHistoryInformation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",31)':{tag:'(0029,"SIEMENS MEDCOM HEADER",31)',vr:"LO",name:"PMTFInformation1",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",32)':{tag:'(0029,"SIEMENS MEDCOM HEADER",32)',vr:"UL",name:"PMTFInformation2",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",33)':{tag:'(0029,"SIEMENS MEDCOM HEADER",33)',vr:"UL",name:"PMTFInformation3",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",34)':{tag:'(0029,"SIEMENS MEDCOM HEADER",34)',vr:"CS",name:"PMTFInformation4",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",35)':{tag:'(0029,"SIEMENS MEDCOM HEADER",35)',vr:"UL",name:"PMTFInformation5",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",40)':{tag:'(0029,"SIEMENS MEDCOM HEADER",40)',vr:"SQ",name:"ApplicationHeaderSequence",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",41)':{tag:'(0029,"SIEMENS MEDCOM HEADER",41)',vr:"CS",name:"ApplicationHeaderType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",42)':{tag:'(0029,"SIEMENS MEDCOM HEADER",42)',vr:"LO",name:"ApplicationHeaderID",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",43)':{tag:'(0029,"SIEMENS MEDCOM HEADER",43)',vr:"LO",name:"ApplicationHeaderVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",44)':{tag:'(0029,"SIEMENS MEDCOM HEADER",44)',vr:"OB",name:"ApplicationHeaderInfo",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",50)':{tag:'(0029,"SIEMENS MEDCOM HEADER",50)',vr:"LO",name:"WorkflowControlFlags",vm:"8",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",51)':{tag:'(0029,"SIEMENS MEDCOM HEADER",51)',vr:"CS",name:"ArchiveManagementFlagKeepOnline",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",52)':{tag:'(0029,"SIEMENS MEDCOM HEADER",52)',vr:"CS",name:"ArchiveManagementFlagDoNotArchive",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",53)':{tag:'(0029,"SIEMENS MEDCOM HEADER",53)',vr:"CS",name:"ImageLocationStatus",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",54)':{tag:'(0029,"SIEMENS MEDCOM HEADER",54)',vr:"DS",name:"EstimatedRetrieveTime",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",55)':{tag:'(0029,"SIEMENS MEDCOM HEADER",55)',vr:"DS",name:"DataSizeOfRetrievedImages",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",70)':{tag:'(0029,"SIEMENS MEDCOM HEADER",70)',vr:"SQ",name:"SiemensLinkSequence",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",71)':{tag:'(0029,"SIEMENS MEDCOM HEADER",71)',vr:"AT",name:"ReferencedTag",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",72)':{tag:'(0029,"SIEMENS MEDCOM HEADER",72)',vr:"CS",name:"ReferencedTagType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",73)':{tag:'(0029,"SIEMENS MEDCOM HEADER",73)',vr:"UL",name:"ReferencedValueLength",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",74)':{tag:'(0029,"SIEMENS MEDCOM HEADER",74)',vr:"CS",name:"ReferencedObjectDeviceType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",75)':{tag:'(0029,"SIEMENS MEDCOM HEADER",75)',vr:"OB",name:"ReferencedObjectDeviceLocation",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER",76)':{tag:'(0029,"SIEMENS MEDCOM HEADER",76)',vr:"OB",name:"ReferencedObjectDeviceID",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM HEADER2",60)':{tag:'(0029,"SIEMENS MEDCOM HEADER2",60)',vr:"LO",name:"SeriesWorkflowStatus",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",08)':{tag:'(0029,"SIEMENS MEDCOM OOG",08)',vr:"CS",name:"MEDCOMOOGType",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",09)':{tag:'(0029,"SIEMENS MEDCOM OOG",09)',vr:"LO",name:"MEDCOMOOGVersion",vm:"1",version:"PrivateTag"},'(0029,"SIEMENS MEDCOM OOG",10)':{tag:'(0029,"SIEMENS MEDCOM OOG",10)',vr:"OB",name:"MEDCOMOOGInfo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",12)':{tag:'(0019,"SIEMENS MR VA0 COAD",12)',vr:"DS",name:"MagneticFieldStrength",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",14)':{tag:'(0019,"SIEMENS MR VA0 COAD",14)',vr:"DS",name:"ADCVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",16)':{tag:'(0019,"SIEMENS MR VA0 COAD",16)',vr:"DS",name:"ADCOffset",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",20)':{tag:'(0019,"SIEMENS MR VA0 COAD",20)',vr:"DS",name:"TransmitterAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",21)':{tag:'(0019,"SIEMENS MR VA0 COAD",21)',vr:"IS",name:"NumberOfTransmitterAmplitudes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",22)':{tag:'(0019,"SIEMENS MR VA0 COAD",22)',vr:"DS",name:"TransmitterAttenuator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",24)':{tag:'(0019,"SIEMENS MR VA0 COAD",24)',vr:"DS",name:"TransmitterCalibration",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",26)':{tag:'(0019,"SIEMENS MR VA0 COAD",26)',vr:"DS",name:"TransmitterReference",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",50)':{tag:'(0019,"SIEMENS MR VA0 COAD",50)',vr:"DS",name:"ReceiverTotalGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",51)':{tag:'(0019,"SIEMENS MR VA0 COAD",51)',vr:"DS",name:"ReceiverAmplifierGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",52)':{tag:'(0019,"SIEMENS MR VA0 COAD",52)',vr:"DS",name:"ReceiverPreamplifierGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",54)':{tag:'(0019,"SIEMENS MR VA0 COAD",54)',vr:"DS",name:"ReceiverCableAttenuation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",55)':{tag:'(0019,"SIEMENS MR VA0 COAD",55)',vr:"DS",name:"ReceiverReferenceGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",56)':{tag:'(0019,"SIEMENS MR VA0 COAD",56)',vr:"DS",name:"ReceiverFilterFrequency",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",60)':{tag:'(0019,"SIEMENS MR VA0 COAD",60)',vr:"DS",name:"ReconstructionScaleFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",62)':{tag:'(0019,"SIEMENS MR VA0 COAD",62)',vr:"DS",name:"ReferenceScaleFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",70)':{tag:'(0019,"SIEMENS MR VA0 COAD",70)',vr:"DS",name:"PhaseGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",71)':{tag:'(0019,"SIEMENS MR VA0 COAD",71)',vr:"DS",name:"ReadoutGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",72)':{tag:'(0019,"SIEMENS MR VA0 COAD",72)',vr:"DS",name:"SelectionGradientAmplitude",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",80)':{tag:'(0019,"SIEMENS MR VA0 COAD",80)',vr:"DS",name:"GradientDelayTime",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",82)':{tag:'(0019,"SIEMENS MR VA0 COAD",82)',vr:"DS",name:"TotalGradientDelayTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",90)':{tag:'(0019,"SIEMENS MR VA0 COAD",90)',vr:"LT",name:"SensitivityCorrectionLabel",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",91)':{tag:'(0019,"SIEMENS MR VA0 COAD",91)',vr:"DS",name:"SaturationPhaseEncodingVectorCoronalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",92)':{tag:'(0019,"SIEMENS MR VA0 COAD",92)',vr:"DS",name:"SaturationReadoutVectorCoronalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a0)':{tag:'(0019,"SIEMENS MR VA0 COAD",a0)',vr:"US",name:"RFWatchdogMask",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a1)':{tag:'(0019,"SIEMENS MR VA0 COAD",a1)',vr:"DS",name:"EPIReconstructionSlope",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a2)':{tag:'(0019,"SIEMENS MR VA0 COAD",a2)',vr:"DS",name:"RFPowerErrorIndicator",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a5)':{tag:'(0019,"SIEMENS MR VA0 COAD",a5)',vr:"DS",name:"SpecificAbsorptionRateWholeBody",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",a6)':{tag:'(0019,"SIEMENS MR VA0 COAD",a6)',vr:"DS",name:"SpecificEnergyDose",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",b0)':{tag:'(0019,"SIEMENS MR VA0 COAD",b0)',vr:"UL",name:"AdjustmentStatusMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c1)':{tag:'(0019,"SIEMENS MR VA0 COAD",c1)',vr:"DS",name:"EPICapacity",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c2)':{tag:'(0019,"SIEMENS MR VA0 COAD",c2)',vr:"DS",name:"EPIInductance",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c3)':{tag:'(0019,"SIEMENS MR VA0 COAD",c3)',vr:"IS",name:"EPISwitchConfigurationCode",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c4)':{tag:'(0019,"SIEMENS MR VA0 COAD",c4)',vr:"IS",name:"EPISwitchHardwareCode",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",c5)':{tag:'(0019,"SIEMENS MR VA0 COAD",c5)',vr:"DS",name:"EPISwitchDelayTime",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d1)':{tag:'(0019,"SIEMENS MR VA0 COAD",d1)',vr:"DS",name:"FlowSensitivity",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d2)':{tag:'(0019,"SIEMENS MR VA0 COAD",d2)',vr:"LT",name:"CalculationSubmode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d3)':{tag:'(0019,"SIEMENS MR VA0 COAD",d3)',vr:"DS",name:"FieldOfViewRatio",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d4)':{tag:'(0019,"SIEMENS MR VA0 COAD",d4)',vr:"IS",name:"BaseRawMatrixSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d5)':{tag:'(0019,"SIEMENS MR VA0 COAD",d5)',vr:"IS",name:"2DOversamplingLines",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d6)':{tag:'(0019,"SIEMENS MR VA0 COAD",d6)',vr:"IS",name:"3DPhaseOversamplingPartitions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d7)':{tag:'(0019,"SIEMENS MR VA0 COAD",d7)',vr:"IS",name:"EchoLinePosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d8)':{tag:'(0019,"SIEMENS MR VA0 COAD",d8)',vr:"IS",name:"EchoColumnPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",d9)':{tag:'(0019,"SIEMENS MR VA0 COAD",d9)',vr:"IS",name:"LinesPerSegment",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 COAD",da)':{tag:'(0019,"SIEMENS MR VA0 COAD",da)',vr:"LT",name:"PhaseCodingDirection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",10)':{tag:'(0019,"SIEMENS MR VA0 GEN",10)',vr:"DS",name:"TotalMeasurementTimeNominal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",11)':{tag:'(0019,"SIEMENS MR VA0 GEN",11)',vr:"DS",name:"TotalMeasurementTimeCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",12)':{tag:'(0019,"SIEMENS MR VA0 GEN",12)',vr:"DS",name:"StartDelayTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",13)':{tag:'(0019,"SIEMENS MR VA0 GEN",13)',vr:"DS",name:"DwellTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",14)':{tag:'(0019,"SIEMENS MR VA0 GEN",14)',vr:"IS",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",16)':{tag:'(0019,"SIEMENS MR VA0 GEN",16)',vr:"UL",name:"SequenceControlMask",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",18)':{tag:'(0019,"SIEMENS MR VA0 GEN",18)',vr:"UL",name:"MeasurementStatusMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",20)':{tag:'(0019,"SIEMENS MR VA0 GEN",20)',vr:"IS",name:"NumberOfFourierLinesNominal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",21)':{tag:'(0019,"SIEMENS MR VA0 GEN",21)',vr:"IS",name:"NumberOfFourierLinesCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",26)':{tag:'(0019,"SIEMENS MR VA0 GEN",26)',vr:"IS",name:"NumberOfFourierLinesAfterZero",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",28)':{tag:'(0019,"SIEMENS MR VA0 GEN",28)',vr:"IS",name:"FirstMeasuredFourierLine",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",30)':{tag:'(0019,"SIEMENS MR VA0 GEN",30)',vr:"IS",name:"AcquisitionColumns",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",31)':{tag:'(0019,"SIEMENS MR VA0 GEN",31)',vr:"IS",name:"ReconstructionColumns",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",40)':{tag:'(0019,"SIEMENS MR VA0 GEN",40)',vr:"IS",name:"ArrayCoilElementNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",41)':{tag:'(0019,"SIEMENS MR VA0 GEN",41)',vr:"UL",name:"ArrayCoilElementSelectMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",42)':{tag:'(0019,"SIEMENS MR VA0 GEN",42)',vr:"UL",name:"ArrayCoilElementDataMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",43)':{tag:'(0019,"SIEMENS MR VA0 GEN",43)',vr:"IS",name:"ArrayCoilElementToADCConnect",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",44)':{tag:'(0019,"SIEMENS MR VA0 GEN",44)',vr:"DS",name:"ArrayCoilElementNoiseLevel",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",45)':{tag:'(0019,"SIEMENS MR VA0 GEN",45)',vr:"IS",name:"ArrayCoilADCPairNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",46)':{tag:'(0019,"SIEMENS MR VA0 GEN",46)',vr:"UL",name:"ArrayCoilCombinationMask",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",50)':{tag:'(0019,"SIEMENS MR VA0 GEN",50)',vr:"IS",name:"NumberOfAverages",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",60)':{tag:'(0019,"SIEMENS MR VA0 GEN",60)',vr:"DS",name:"FlipAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",70)':{tag:'(0019,"SIEMENS MR VA0 GEN",70)',vr:"IS",name:"NumberOfPrescans",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",81)':{tag:'(0019,"SIEMENS MR VA0 GEN",81)',vr:"LT",name:"FilterTypeForRawData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",82)':{tag:'(0019,"SIEMENS MR VA0 GEN",82)',vr:"DS",name:"FilterParameterForRawData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",83)':{tag:'(0019,"SIEMENS MR VA0 GEN",83)',vr:"LT",name:"FilterTypeForImageData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",84)':{tag:'(0019,"SIEMENS MR VA0 GEN",84)',vr:"DS",name:"FilterParameterForImageData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",85)':{tag:'(0019,"SIEMENS MR VA0 GEN",85)',vr:"LT",name:"FilterTypeForPhaseCorrection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",86)':{tag:'(0019,"SIEMENS MR VA0 GEN",86)',vr:"DS",name:"FilterParameterForPhaseCorrection",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",87)':{tag:'(0019,"SIEMENS MR VA0 GEN",87)',vr:"LT",name:"NormalizationFilterTypeForImageData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",88)':{tag:'(0019,"SIEMENS MR VA0 GEN",88)',vr:"DS",name:"NormalizationFilterParameterForImageData",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",90)':{tag:'(0019,"SIEMENS MR VA0 GEN",90)',vr:"IS",name:"NumberOfSaturationRegions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",91)':{tag:'(0019,"SIEMENS MR VA0 GEN",91)',vr:"DS",name:"SaturationPhaseEncodingVectorSagittalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",92)':{tag:'(0019,"SIEMENS MR VA0 GEN",92)',vr:"DS",name:"SaturationReadoutVectorSagittalComponent",vm:"6",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",93)':{tag:'(0019,"SIEMENS MR VA0 GEN",93)',vr:"DS",name:"EPIStimulationMonitorMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",94)':{tag:'(0019,"SIEMENS MR VA0 GEN",94)',vr:"DS",name:"ImageRotationAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",96)':{tag:'(0019,"SIEMENS MR VA0 GEN",96)',vr:"UL",name:"CoilIDMask",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",97)':{tag:'(0019,"SIEMENS MR VA0 GEN",97)',vr:"UL",name:"CoilClassMask",vm:"2",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",98)':{tag:'(0019,"SIEMENS MR VA0 GEN",98)',vr:"DS",name:"CoilPosition",vm:"3",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",a0)':{tag:'(0019,"SIEMENS MR VA0 GEN",a0)',vr:"DS",name:"EPIReconstructionPhase",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS MR VA0 GEN",a1)':{tag:'(0019,"SIEMENS MR VA0 GEN",a1)',vr:"DS",name:"EPIReconstructionSlope",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",20)':{tag:'(0021,"SIEMENS MR VA0 GEN",20)',vr:"IS",name:"PhaseCorrectionRowsSequence",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",21)':{tag:'(0021,"SIEMENS MR VA0 GEN",21)',vr:"IS",name:"PhaseCorrectionColumnsSequence",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",22)':{tag:'(0021,"SIEMENS MR VA0 GEN",22)',vr:"IS",name:"PhaseCorrectionRowsReconstruction",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",24)':{tag:'(0021,"SIEMENS MR VA0 GEN",24)',vr:"IS",name:"PhaseCorrectionColumnsReconstruction",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",30)':{tag:'(0021,"SIEMENS MR VA0 GEN",30)',vr:"IS",name:"NumberOf3DRawPartitionsNominal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",31)':{tag:'(0021,"SIEMENS MR VA0 GEN",31)',vr:"IS",name:"NumberOf3DRawPartitionsCurrent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",34)':{tag:'(0021,"SIEMENS MR VA0 GEN",34)',vr:"IS",name:"NumberOf3DImagePartitions",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",36)':{tag:'(0021,"SIEMENS MR VA0 GEN",36)',vr:"IS",name:"Actual3DImagePartitionNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",39)':{tag:'(0021,"SIEMENS MR VA0 GEN",39)',vr:"DS",name:"SlabThickness",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",40)':{tag:'(0021,"SIEMENS MR VA0 GEN",40)',vr:"IS",name:"NumberOfSlicesNominal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",41)':{tag:'(0021,"SIEMENS MR VA0 GEN",41)',vr:"IS",name:"NumberOfSlicesCurrent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",42)':{tag:'(0021,"SIEMENS MR VA0 GEN",42)',vr:"IS",name:"CurrentSliceNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",43)':{tag:'(0021,"SIEMENS MR VA0 GEN",43)',vr:"IS",name:"CurrentGroupNumber",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",44)':{tag:'(0021,"SIEMENS MR VA0 GEN",44)',vr:"DS",name:"CurrentSliceDistanceFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",45)':{tag:'(0021,"SIEMENS MR VA0 GEN",45)',vr:"IS",name:"MIPStartRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",46)':{tag:'(0021,"SIEMENS MR VA0 GEN",46)',vr:"IS",name:"MIPStopRow",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",47)':{tag:'(0021,"SIEMENS MR VA0 GEN",47)',vr:"IS",name:"MIPStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",48)':{tag:'(0021,"SIEMENS MR VA0 GEN",48)',vr:"IS",name:"MIPStartColumn",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",49)':{tag:'(0021,"SIEMENS MR VA0 GEN",49)',vr:"IS",name:"MIPStartSlice Name=",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",4a)':{tag:'(0021,"SIEMENS MR VA0 GEN",4a)',vr:"IS",name:"MIPStartSlice",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",4f)':{tag:'(0021,"SIEMENS MR VA0 GEN",4f)',vr:"LT",name:"OrderofSlices",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",50)':{tag:'(0021,"SIEMENS MR VA0 GEN",50)',vr:"US",name:"SignalMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",52)':{tag:'(0021,"SIEMENS MR VA0 GEN",52)',vr:"DS",name:"DelayAfterTrigger",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",53)':{tag:'(0021,"SIEMENS MR VA0 GEN",53)',vr:"IS",name:"RRInterval",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",54)':{tag:'(0021,"SIEMENS MR VA0 GEN",54)',vr:"DS",name:"NumberOfTriggerPulses",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",56)':{tag:'(0021,"SIEMENS MR VA0 GEN",56)',vr:"DS",name:"RepetitionTimeEffective",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",57)':{tag:'(0021,"SIEMENS MR VA0 GEN",57)',vr:"LT",name:"GatePhase",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",58)':{tag:'(0021,"SIEMENS MR VA0 GEN",58)',vr:"DS",name:"GateThreshold",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",59)':{tag:'(0021,"SIEMENS MR VA0 GEN",59)',vr:"DS",name:"GatedRatio",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",60)':{tag:'(0021,"SIEMENS MR VA0 GEN",60)',vr:"IS",name:"NumberOfInterpolatedImages",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",70)':{tag:'(0021,"SIEMENS MR VA0 GEN",70)',vr:"IS",name:"NumberOfEchoes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",72)':{tag:'(0021,"SIEMENS MR VA0 GEN",72)',vr:"DS",name:"SecondEchoTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",73)':{tag:'(0021,"SIEMENS MR VA0 GEN",73)',vr:"DS",name:"SecondRepetitionTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",80)':{tag:'(0021,"SIEMENS MR VA0 GEN",80)',vr:"IS",name:"CardiacCode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",91)':{tag:'(0021,"SIEMENS MR VA0 GEN",91)',vr:"DS",name:"SaturationPhaseEncodingVectorTransverseComponent",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",92)':{tag:'(0021,"SIEMENS MR VA0 GEN",92)',vr:"DS",name:"SaturationReadoutVectorTransverseComponent",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",93)':{tag:'(0021,"SIEMENS MR VA0 GEN",93)',vr:"DS",name:"EPIChangeValueOfMagnitude",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",94)':{tag:'(0021,"SIEMENS MR VA0 GEN",94)',vr:"DS",name:"EPIChangeValueOfXComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",95)':{tag:'(0021,"SIEMENS MR VA0 GEN",95)',vr:"DS",name:"EPIChangeValueOfYComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 GEN",96)':{tag:'(0021,"SIEMENS MR VA0 GEN",96)',vr:"DS",name:"EPIChangeValueOfZComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",00)':{tag:'(0021,"SIEMENS MR VA0 RAW",00)',vr:"LT",name:"SequenceType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",01)':{tag:'(0021,"SIEMENS MR VA0 RAW",01)',vr:"IS",name:"VectorSizeOriginal",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",02)':{tag:'(0021,"SIEMENS MR VA0 RAW",02)',vr:"IS",name:"VectorSizeExtended",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",03)':{tag:'(0021,"SIEMENS MR VA0 RAW",03)',vr:"DS",name:"AcquiredSpectralRange",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",04)':{tag:'(0021,"SIEMENS MR VA0 RAW",04)',vr:"DS",name:"VOIPosition",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",05)':{tag:'(0021,"SIEMENS MR VA0 RAW",05)',vr:"DS",name:"VOISize",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",06)':{tag:'(0021,"SIEMENS MR VA0 RAW",06)',vr:"IS",name:"CSIMatrixSizeOriginal",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",07)':{tag:'(0021,"SIEMENS MR VA0 RAW",07)',vr:"IS",name:"CSIMatrixSizeExtended",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",08)':{tag:'(0021,"SIEMENS MR VA0 RAW",08)',vr:"DS",name:"SpatialGridShift",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",09)':{tag:'(0021,"SIEMENS MR VA0 RAW",09)',vr:"DS",name:"SignalLimitsMinimum",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",10)':{tag:'(0021,"SIEMENS MR VA0 RAW",10)',vr:"DS",name:"SignalLimitsMaximum",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",11)':{tag:'(0021,"SIEMENS MR VA0 RAW",11)',vr:"DS",name:"SpecInfoMask",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",12)':{tag:'(0021,"SIEMENS MR VA0 RAW",12)',vr:"DS",name:"EPITimeRateOfChangeOfMagnitude",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",13)':{tag:'(0021,"SIEMENS MR VA0 RAW",13)',vr:"DS",name:"EPITimeRateOfChangeOfXComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",14)':{tag:'(0021,"SIEMENS MR VA0 RAW",14)',vr:"DS",name:"EPITimeRateOfChangeOfYComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",15)':{tag:'(0021,"SIEMENS MR VA0 RAW",15)',vr:"DS",name:"EPITimeRateOfChangeOfZComponent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",16)':{tag:'(0021,"SIEMENS MR VA0 RAW",16)',vr:"DS",name:"EPITimeRateOfChangeLegalLimit1",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",17)':{tag:'(0021,"SIEMENS MR VA0 RAW",17)',vr:"DS",name:"EPIOperationModeFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",18)':{tag:'(0021,"SIEMENS MR VA0 RAW",18)',vr:"DS",name:"EPIFieldCalculationSafetyFactor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",19)':{tag:'(0021,"SIEMENS MR VA0 RAW",19)',vr:"DS",name:"EPILegalLimit1OfChangeValue",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",20)':{tag:'(0021,"SIEMENS MR VA0 RAW",20)',vr:"DS",name:"EPILegalLimit2OfChangeValue",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",21)':{tag:'(0021,"SIEMENS MR VA0 RAW",21)',vr:"DS",name:"EPIRiseTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",30)':{tag:'(0021,"SIEMENS MR VA0 RAW",30)',vr:"DS",name:"ArrayCoilADCOffset",vm:"16",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",31)':{tag:'(0021,"SIEMENS MR VA0 RAW",31)',vr:"DS",name:"ArrayCoilPreamplifierGain",vm:"16",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",50)':{tag:'(0021,"SIEMENS MR VA0 RAW",50)',vr:"LT",name:"SaturationType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",51)':{tag:'(0021,"SIEMENS MR VA0 RAW",51)',vr:"DS",name:"SaturationNormalVector",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",52)':{tag:'(0021,"SIEMENS MR VA0 RAW",52)',vr:"DS",name:"SaturationPositionVector",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",53)':{tag:'(0021,"SIEMENS MR VA0 RAW",53)',vr:"DS",name:"SaturationThickness",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",54)':{tag:'(0021,"SIEMENS MR VA0 RAW",54)',vr:"DS",name:"SaturationWidth",vm:"6",version:"PrivateTag"},'(0021,"SIEMENS MR VA0 RAW",55)':{tag:'(0021,"SIEMENS MR VA0 RAW",55)',vr:"DS",name:"SaturationDistance",vm:"6",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",00)':{tag:'(7fe3,"SIEMENS NUMARIS II",00)',vr:"LT",name:"ImageGraphicsFormatCode",vm:"1",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",10)':{tag:'(7fe3,"SIEMENS NUMARIS II",10)',vr:"OB",name:"ImageGraphics",vm:"1",version:"PrivateTag"},'(7fe3,"SIEMENS NUMARIS II",20)':{tag:'(7fe3,"SIEMENS NUMARIS II",20)',vr:"OB",name:"ImageGraphicsDummy",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",20)':{tag:'(0011,"SIEMENS RA GEN",20)',vr:"SL",name:"FluoroTimer",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",25)':{tag:'(0011,"SIEMENS RA GEN",25)',vr:"SL",name:"PtopDoseAreaProduct",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",26)':{tag:'(0011,"SIEMENS RA GEN",26)',vr:"SL",name:"PtopTotalSkinDose",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",30)':{tag:'(0011,"SIEMENS RA GEN",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",35)':{tag:'(0011,"SIEMENS RA GEN",35)',vr:"LO",name:"PatientInitialPuckCounter",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA GEN",40)':{tag:'(0011,"SIEMENS RA GEN",40)',vr:"SS",name:"SPIDataObjectType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",15)':{tag:'(0019,"SIEMENS RA GEN",15)',vr:"LO",name:"AcquiredPlane",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",1f)':{tag:'(0019,"SIEMENS RA GEN",1f)',vr:"SS",name:"DefaultTableIsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",20)':{tag:'(0019,"SIEMENS RA GEN",20)',vr:"SL",name:"SceneFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",22)':{tag:'(0019,"SIEMENS RA GEN",22)',vr:"SL",name:"RefPhotofileFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",24)':{tag:'(0019,"SIEMENS RA GEN",24)',vr:"LO",name:"SceneName",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",26)':{tag:'(0019,"SIEMENS RA GEN",26)',vr:"SS",name:"AcquisitionIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",28)':{tag:'(0019,"SIEMENS RA GEN",28)',vr:"SS",name:"MixedPulseMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2a)':{tag:'(0019,"SIEMENS RA GEN",2a)',vr:"SS",name:"NoOfPositions",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2c)':{tag:'(0019,"SIEMENS RA GEN",2c)',vr:"SS",name:"NoOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",2e)':{tag:'(0019,"SIEMENS RA GEN",2e)',vr:"SS",name:"FrameRateForPositions",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",30)':{tag:'(0019,"SIEMENS RA GEN",30)',vr:"SS",name:"NoOfFramesForPositions",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",32)':{tag:'(0019,"SIEMENS RA GEN",32)',vr:"SS",name:"SteppingDirection",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",34)':{tag:'(0019,"SIEMENS RA GEN",34)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",36)':{tag:'(0019,"SIEMENS RA GEN",36)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",38)':{tag:'(0019,"SIEMENS RA GEN",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3a)':{tag:'(0019,"SIEMENS RA GEN",3a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3c)':{tag:'(0019,"SIEMENS RA GEN",3c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",3e)':{tag:'(0019,"SIEMENS RA GEN",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",40)':{tag:'(0019,"SIEMENS RA GEN",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",42)':{tag:'(0019,"SIEMENS RA GEN",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",44)':{tag:'(0019,"SIEMENS RA GEN",44)',vr:"SS",name:"ImageTransferDelay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",46)':{tag:'(0019,"SIEMENS RA GEN",46)',vr:"SL",name:"InversFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",48)':{tag:'(0019,"SIEMENS RA GEN",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",4a)':{tag:'(0019,"SIEMENS RA GEN",4a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",4c)':{tag:'(0019,"SIEMENS RA GEN",4c)',vr:"SS",name:"BlankingCircleDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",50)':{tag:'(0019,"SIEMENS RA GEN",50)',vr:"SL",name:"StandDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",52)':{tag:'(0019,"SIEMENS RA GEN",52)',vr:"SS",name:"TableTilt",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",54)':{tag:'(0019,"SIEMENS RA GEN",54)',vr:"SS",name:"TableAxisRotation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",56)':{tag:'(0019,"SIEMENS RA GEN",56)',vr:"SS",name:"TableLongitudalPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",58)':{tag:'(0019,"SIEMENS RA GEN",58)',vr:"SS",name:"TableSideOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5a)':{tag:'(0019,"SIEMENS RA GEN",5a)',vr:"SS",name:"TableIsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5c)':{tag:'(0019,"SIEMENS RA GEN",5c)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",5e)':{tag:'(0019,"SIEMENS RA GEN",5e)',vr:"SL",name:"CollimationDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",60)':{tag:'(0019,"SIEMENS RA GEN",60)',vr:"SL",name:"PeriSequenceNo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",62)':{tag:'(0019,"SIEMENS RA GEN",62)',vr:"SL",name:"PeriTotalScenes",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",64)':{tag:'(0019,"SIEMENS RA GEN",64)',vr:"SL",name:"PeriOverlapTop",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",66)':{tag:'(0019,"SIEMENS RA GEN",66)',vr:"SL",name:"PeriOverlapBottom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",68)':{tag:'(0019,"SIEMENS RA GEN",68)',vr:"SL",name:"RawImageNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",6a)':{tag:'(0019,"SIEMENS RA GEN",6a)',vr:"SL",name:"XRayDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",70)':{tag:'(0019,"SIEMENS RA GEN",70)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",72)':{tag:'(0019,"SIEMENS RA GEN",72)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",74)':{tag:'(0019,"SIEMENS RA GEN",74)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",76)':{tag:'(0019,"SIEMENS RA GEN",76)',vr:"SL",name:"FillingAverageFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",78)':{tag:'(0019,"SIEMENS RA GEN",78)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7a)':{tag:'(0019,"SIEMENS RA GEN",7a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7c)':{tag:'(0019,"SIEMENS RA GEN",7c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",7e)':{tag:'(0019,"SIEMENS RA GEN",7e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",80)':{tag:'(0019,"SIEMENS RA GEN",80)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",82)':{tag:'(0019,"SIEMENS RA GEN",82)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",84)':{tag:'(0019,"SIEMENS RA GEN",84)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",86)':{tag:'(0019,"SIEMENS RA GEN",86)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",88)':{tag:'(0019,"SIEMENS RA GEN",88)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8a)':{tag:'(0019,"SIEMENS RA GEN",8a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8c)':{tag:'(0019,"SIEMENS RA GEN",8c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",8e)':{tag:'(0019,"SIEMENS RA GEN",8e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",92)':{tag:'(0019,"SIEMENS RA GEN",92)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",94)':{tag:'(0019,"SIEMENS RA GEN",94)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",96)':{tag:'(0019,"SIEMENS RA GEN",96)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",98)':{tag:'(0019,"SIEMENS RA GEN",98)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9a)':{tag:'(0019,"SIEMENS RA GEN",9a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9c)':{tag:'(0019,"SIEMENS RA GEN",9c)',vr:"SL",name:"IntensifierLevelCalibrationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",9e)':{tag:'(0019,"SIEMENS RA GEN",9e)',vr:"SL",name:"NativeReviewFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a2)':{tag:'(0019,"SIEMENS RA GEN",a2)',vr:"SL",name:"SceneNumber",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a4)':{tag:'(0019,"SIEMENS RA GEN",a4)',vr:"SS",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a5)':{tag:'(0019,"SIEMENS RA GEN",a5)',vr:"SS",name:"AcquisitonFrameRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a6)':{tag:'(0019,"SIEMENS RA GEN",a6)',vr:"SL",name:"ECGFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a7)':{tag:'(0019,"SIEMENS RA GEN",a7)',vr:"SL",name:"AdditionalSceneData",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a8)':{tag:'(0019,"SIEMENS RA GEN",a8)',vr:"SL",name:"FileCopyFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",a9)':{tag:'(0019,"SIEMENS RA GEN",a9)',vr:"SL",name:"PhlebovisionFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",aa)':{tag:'(0019,"SIEMENS RA GEN",aa)',vr:"SL",name:"Co2Flag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ab)':{tag:'(0019,"SIEMENS RA GEN",ab)',vr:"SS",name:"MaxSpeed",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ac)':{tag:'(0019,"SIEMENS RA GEN",ac)',vr:"SS",name:"StepWidth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ad)':{tag:'(0019,"SIEMENS RA GEN",ad)',vr:"SL",name:"DigitalAcquisitionZoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA GEN",ff)':{tag:'(0019,"SIEMENS RA GEN",ff)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",15)':{tag:'(0021,"SIEMENS RA GEN",15)',vr:"SS",name:"ImagesInStudy",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",20)':{tag:'(0021,"SIEMENS RA GEN",20)',vr:"SS",name:"ScenesInStudy",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",25)':{tag:'(0021,"SIEMENS RA GEN",25)',vr:"SS",name:"ImagesInPhotofile",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",27)':{tag:'(0021,"SIEMENS RA GEN",27)',vr:"SS",name:"PlaneBImagesExist",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",28)':{tag:'(0021,"SIEMENS RA GEN",28)',vr:"SS",name:"NoOf2MBChunks",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",30)':{tag:'(0021,"SIEMENS RA GEN",30)',vr:"SS",name:"ImagesInAllScenes",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS RA GEN",40)':{tag:'(0021,"SIEMENS RA GEN",40)',vr:"SS",name:"ArchiveSWInternalVersion",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",28)':{tag:'(0011,"SIEMENS RA PLANE A",28)',vr:"SL",name:"FluoroTimerA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",29)':{tag:'(0011,"SIEMENS RA PLANE A",29)',vr:"SL",name:"FluoroSkinDoseA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2a)':{tag:'(0011,"SIEMENS RA PLANE A",2a)',vr:"SL",name:"TotalSkinDoseA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2b)':{tag:'(0011,"SIEMENS RA PLANE A",2b)',vr:"SL",name:"FluoroDoseAreaProductA",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE A",2c)':{tag:'(0011,"SIEMENS RA PLANE A",2c)',vr:"SL",name:"TotalDoseAreaProductA",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",15)':{tag:'(0019,"SIEMENS RA PLANE A",15)',vr:"LT",name:"OfflineUID",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",18)':{tag:'(0019,"SIEMENS RA PLANE A",18)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",19)':{tag:'(0019,"SIEMENS RA PLANE A",19)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1a)':{tag:'(0019,"SIEMENS RA PLANE A",1a)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1b)':{tag:'(0019,"SIEMENS RA PLANE A",1b)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1c)':{tag:'(0019,"SIEMENS RA PLANE A",1c)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1d)':{tag:'(0019,"SIEMENS RA PLANE A",1d)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1e)':{tag:'(0019,"SIEMENS RA PLANE A",1e)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",1f)':{tag:'(0019,"SIEMENS RA PLANE A",1f)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",20)':{tag:'(0019,"SIEMENS RA PLANE A",20)',vr:"SS",name:"SystemCalibFactorPlaneA",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",22)':{tag:'(0019,"SIEMENS RA PLANE A",22)',vr:"SS",name:"XRayParameterSetNo",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",24)':{tag:'(0019,"SIEMENS RA PLANE A",24)',vr:"SS",name:"XRaySystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",26)':{tag:'(0019,"SIEMENS RA PLANE A",26)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",28)':{tag:'(0019,"SIEMENS RA PLANE A",28)',vr:"SS",name:"AcquiredDisplayMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2a)':{tag:'(0019,"SIEMENS RA PLANE A",2a)',vr:"SS",name:"AcquisitionDelay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2c)':{tag:'(0019,"SIEMENS RA PLANE A",2c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",2e)':{tag:'(0019,"SIEMENS RA PLANE A",2e)',vr:"SS",name:"MaxFramesLimit",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",30)':{tag:'(0019,"SIEMENS RA PLANE A",30)',vr:"US",name:"MaximumFrameSizeNIU",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",32)':{tag:'(0019,"SIEMENS RA PLANE A",32)',vr:"SS",name:"SubtractedFilterType",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",34)':{tag:'(0019,"SIEMENS RA PLANE A",34)',vr:"SS",name:"FilterFactorNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",36)':{tag:'(0019,"SIEMENS RA PLANE A",36)',vr:"SS",name:"AnatomicBackgroundFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",38)':{tag:'(0019,"SIEMENS RA PLANE A",38)',vr:"SS",name:"WindowUpperLimitNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3a)':{tag:'(0019,"SIEMENS RA PLANE A",3a)',vr:"SS",name:"WindowLowerLimitNative",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3c)':{tag:'(0019,"SIEMENS RA PLANE A",3c)',vr:"SS",name:"WindowBrightnessPhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",3e)':{tag:'(0019,"SIEMENS RA PLANE A",3e)',vr:"SS",name:"WindowBrightnessPhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",40)':{tag:'(0019,"SIEMENS RA PLANE A",40)',vr:"SS",name:"WindowContrastPhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",42)':{tag:'(0019,"SIEMENS RA PLANE A",42)',vr:"SS",name:"WindowContrastPhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",44)':{tag:'(0019,"SIEMENS RA PLANE A",44)',vr:"SS",name:"FilterFactorSub",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",46)':{tag:'(0019,"SIEMENS RA PLANE A",46)',vr:"SS",name:"PeakOpacified",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",48)':{tag:'(0019,"SIEMENS RA PLANE A",48)',vr:"SL",name:"MaskFrame",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4a)':{tag:'(0019,"SIEMENS RA PLANE A",4a)',vr:"SL",name:"BIHFrame",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4c)':{tag:'(0019,"SIEMENS RA PLANE A",4c)',vr:"SS",name:"CentBeamAngulationCaudCran",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",4e)':{tag:'(0019,"SIEMENS RA PLANE A",4e)',vr:"SS",name:"CentBeamAngulationLRAnterior",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",50)':{tag:'(0019,"SIEMENS RA PLANE A",50)',vr:"SS",name:"LongitudinalPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",52)':{tag:'(0019,"SIEMENS RA PLANE A",52)',vr:"SS",name:"SideOffset",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",54)':{tag:'(0019,"SIEMENS RA PLANE A",54)',vr:"SS",name:"IsoCenterHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",56)':{tag:'(0019,"SIEMENS RA PLANE A",56)',vr:"SS",name:"ImageTwist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",58)':{tag:'(0019,"SIEMENS RA PLANE A",58)',vr:"SS",name:"SourceImageDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5a)':{tag:'(0019,"SIEMENS RA PLANE A",5a)',vr:"SS",name:"MechanicalMagnificationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5c)':{tag:'(0019,"SIEMENS RA PLANE A",5c)',vr:"SL",name:"CalibrationFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",5e)':{tag:'(0019,"SIEMENS RA PLANE A",5e)',vr:"SL",name:"CalibrationAngleCranCaud",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",60)':{tag:'(0019,"SIEMENS RA PLANE A",60)',vr:"SL",name:"CalibrationAngleRAOLAO",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",62)':{tag:'(0019,"SIEMENS RA PLANE A",62)',vr:"SL",name:"CalibrationTableToFloorDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",64)':{tag:'(0019,"SIEMENS RA PLANE A",64)',vr:"SL",name:"CalibrationIsocenterToFloorDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",66)':{tag:'(0019,"SIEMENS RA PLANE A",66)',vr:"SL",name:"CalibrationIsocenterToSourceDist",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",68)':{tag:'(0019,"SIEMENS RA PLANE A",68)',vr:"SL",name:"CalibrationSourceToII",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6a)':{tag:'(0019,"SIEMENS RA PLANE A",6a)',vr:"SL",name:"CalibrationIIZoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6c)':{tag:'(0019,"SIEMENS RA PLANE A",6c)',vr:"SL",name:"CalibrationIIField",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",6e)':{tag:'(0019,"SIEMENS RA PLANE A",6e)',vr:"SL",name:"CalibrationFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",70)':{tag:'(0019,"SIEMENS RA PLANE A",70)',vr:"SL",name:"CalibrationObjectToImageDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",72)':{tag:'(0019,"SIEMENS RA PLANE A",72)',vr:"SL",name:"CalibrationSystemFactor",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",74)':{tag:'(0019,"SIEMENS RA PLANE A",74)',vr:"SL",name:"CalibrationSystemCorrection",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",76)':{tag:'(0019,"SIEMENS RA PLANE A",76)',vr:"SL",name:"CalibrationSystemIIFormats",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",78)':{tag:'(0019,"SIEMENS RA PLANE A",78)',vr:"SL",name:"CalibrationGantryDataValid",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7a)':{tag:'(0019,"SIEMENS RA PLANE A",7a)',vr:"SS",name:"CollimatorSquareBreadth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7c)':{tag:'(0019,"SIEMENS RA PLANE A",7c)',vr:"SS",name:"CollimatorSquareHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",7e)':{tag:'(0019,"SIEMENS RA PLANE A",7e)',vr:"SS",name:"CollimatorSquareDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",80)':{tag:'(0019,"SIEMENS RA PLANE A",80)',vr:"SS",name:"CollimaterFingerTurnAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",82)':{tag:'(0019,"SIEMENS RA PLANE A",82)',vr:"SS",name:"CollimaterFingerPosition",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",84)':{tag:'(0019,"SIEMENS RA PLANE A",84)',vr:"SS",name:"CollimaterDiaphragmTurnAngle",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",86)':{tag:'(0019,"SIEMENS RA PLANE A",86)',vr:"SS",name:"CollimaterDiaphragmPosition1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",88)':{tag:'(0019,"SIEMENS RA PLANE A",88)',vr:"SS",name:"CollimaterDiaphragmPosition2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8a)':{tag:'(0019,"SIEMENS RA PLANE A",8a)',vr:"SS",name:"CollimaterDiaphragmMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8c)':{tag:'(0019,"SIEMENS RA PLANE A",8c)',vr:"SS",name:"CollimaterBeamLimitBreadth",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",8e)':{tag:'(0019,"SIEMENS RA PLANE A",8e)',vr:"SS",name:"CollimaterBeamLimitHeight",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",90)':{tag:'(0019,"SIEMENS RA PLANE A",90)',vr:"SS",name:"CollimaterBeamLimitDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",92)':{tag:'(0019,"SIEMENS RA PLANE A",92)',vr:"SS",name:"X-RayControlMOde",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",94)':{tag:'(0019,"SIEMENS RA PLANE A",94)',vr:"SS",name:"X-RaySystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",96)':{tag:'(0019,"SIEMENS RA PLANE A",96)',vr:"SS",name:"FocalSpot",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",98)':{tag:'(0019,"SIEMENS RA PLANE A",98)',vr:"SS",name:"ExposureControl",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9a)':{tag:'(0019,"SIEMENS RA PLANE A",9a)',vr:"SL",name:"XRayVoltage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9c)':{tag:'(0019,"SIEMENS RA PLANE A",9c)',vr:"SL",name:"XRayCurrent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",9e)':{tag:'(0019,"SIEMENS RA PLANE A",9e)',vr:"SL",name:"XRayCurrentTimeProduct",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a0)':{tag:'(0019,"SIEMENS RA PLANE A",a0)',vr:"SL",name:"XRayPulseTime",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a2)':{tag:'(0019,"SIEMENS RA PLANE A",a2)',vr:"SL",name:"XRaySceneTimeFluoroClock",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a4)':{tag:'(0019,"SIEMENS RA PLANE A",a4)',vr:"SS",name:"MaximumPulseRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a6)':{tag:'(0019,"SIEMENS RA PLANE A",a6)',vr:"SS",name:"PulsesPerScene",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",a8)':{tag:'(0019,"SIEMENS RA PLANE A",a8)',vr:"SL",name:"DoseAreaProductOfScene",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",aa)':{tag:'(0019,"SIEMENS RA PLANE A",aa)',vr:"SS",name:"Dose",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ac)':{tag:'(0019,"SIEMENS RA PLANE A",ac)',vr:"SS",name:"DoseRate",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ae)':{tag:'(0019,"SIEMENS RA PLANE A",ae)',vr:"SL",name:"IIToCoverDistance",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b0)':{tag:'(0019,"SIEMENS RA PLANE A",b0)',vr:"SS",name:"LastFramePhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b1)':{tag:'(0019,"SIEMENS RA PLANE A",b1)',vr:"SS",name:"FrameRatePhase1",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b2)':{tag:'(0019,"SIEMENS RA PLANE A",b2)',vr:"SS",name:"LastFramePhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b3)':{tag:'(0019,"SIEMENS RA PLANE A",b3)',vr:"SS",name:"FrameRatePhase2",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b4)':{tag:'(0019,"SIEMENS RA PLANE A",b4)',vr:"SS",name:"LastFramePhase3",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b5)':{tag:'(0019,"SIEMENS RA PLANE A",b5)',vr:"SS",name:"FrameRatePhase3",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b6)':{tag:'(0019,"SIEMENS RA PLANE A",b6)',vr:"SS",name:"LastFramePhase4",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b7)':{tag:'(0019,"SIEMENS RA PLANE A",b7)',vr:"SS",name:"FrameRatePhase4",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b8)':{tag:'(0019,"SIEMENS RA PLANE A",b8)',vr:"SS",name:"GammaOfNativeImage",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",b9)':{tag:'(0019,"SIEMENS RA PLANE A",b9)',vr:"SS",name:"GammaOfTVSystem",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bb)':{tag:'(0019,"SIEMENS RA PLANE A",bb)',vr:"SL",name:"PixelshiftX",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bc)':{tag:'(0019,"SIEMENS RA PLANE A",bc)',vr:"SL",name:"PixelshiftY",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bd)':{tag:'(0019,"SIEMENS RA PLANE A",bd)',vr:"SL",name:"MaskAverageFactor",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",be)':{tag:'(0019,"SIEMENS RA PLANE A",be)',vr:"SL",name:"BlankingCircleFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",bf)':{tag:'(0019,"SIEMENS RA PLANE A",bf)',vr:"SL",name:"CircleRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c0)':{tag:'(0019,"SIEMENS RA PLANE A",c0)',vr:"SL",name:"CircleRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c1)':{tag:'(0019,"SIEMENS RA PLANE A",c1)',vr:"SL",name:"CircleColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c2)':{tag:'(0019,"SIEMENS RA PLANE A",c2)',vr:"SL",name:"CircleColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c3)':{tag:'(0019,"SIEMENS RA PLANE A",c3)',vr:"SL",name:"CircleDiameter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c4)':{tag:'(0019,"SIEMENS RA PLANE A",c4)',vr:"SL",name:"RectangularCollimaterFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c5)':{tag:'(0019,"SIEMENS RA PLANE A",c5)',vr:"SL",name:"RectangleRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c6)':{tag:'(0019,"SIEMENS RA PLANE A",c6)',vr:"SL",name:"RectangleRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c7)':{tag:'(0019,"SIEMENS RA PLANE A",c7)',vr:"SL",name:"RectangleColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c8)':{tag:'(0019,"SIEMENS RA PLANE A",c8)',vr:"SL",name:"RectangleColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",c9)':{tag:'(0019,"SIEMENS RA PLANE A",c9)',vr:"SL",name:"RectangleAngulation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ca)':{tag:'(0019,"SIEMENS RA PLANE A",ca)',vr:"SL",name:"IrisCollimatorFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cb)':{tag:'(0019,"SIEMENS RA PLANE A",cb)',vr:"SL",name:"IrisRowStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cc)':{tag:'(0019,"SIEMENS RA PLANE A",cc)',vr:"SL",name:"IrisRowEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cd)':{tag:'(0019,"SIEMENS RA PLANE A",cd)',vr:"SL",name:"IrisColumnStart",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",ce)':{tag:'(0019,"SIEMENS RA PLANE A",ce)',vr:"SL",name:"IrisColumnEnd",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",cf)':{tag:'(0019,"SIEMENS RA PLANE A",cf)',vr:"SL",name:"IrisAngulation",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d1)':{tag:'(0019,"SIEMENS RA PLANE A",d1)',vr:"SS",name:"NumberOfFramesPlane",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d2)':{tag:'(0019,"SIEMENS RA PLANE A",d2)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d3)':{tag:'(0019,"SIEMENS RA PLANE A",d3)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d4)':{tag:'(0019,"SIEMENS RA PLANE A",d4)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d5)':{tag:'(0019,"SIEMENS RA PLANE A",d5)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d6)':{tag:'(0019,"SIEMENS RA PLANE A",d6)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d7)':{tag:'(0019,"SIEMENS RA PLANE A",d7)',vr:"SS",name:"Internal",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d8)':{tag:'(0019,"SIEMENS RA PLANE A",d8)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",d9)':{tag:'(0019,"SIEMENS RA PLANE A",d9)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",da)':{tag:'(0019,"SIEMENS RA PLANE A",da)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",db)':{tag:'(0019,"SIEMENS RA PLANE A",db)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",dc)':{tag:'(0019,"SIEMENS RA PLANE A",dc)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",dd)':{tag:'(0019,"SIEMENS RA PLANE A",dd)',vr:"SL",name:"AnatomicBackground",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",de)':{tag:'(0019,"SIEMENS RA PLANE A",de)',vr:"SL",name:"AutoWindowBase",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",df)':{tag:'(0019,"SIEMENS RA PLANE A",df)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE A",e0)':{tag:'(0019,"SIEMENS RA PLANE A",e0)',vr:"SL",name:"Internal",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",28)':{tag:'(0011,"SIEMENS RA PLANE B",28)',vr:"SL",name:"FluoroTimerB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",29)':{tag:'(0011,"SIEMENS RA PLANE B",29)',vr:"SL",name:"FluoroSkinDoseB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2a)':{tag:'(0011,"SIEMENS RA PLANE B",2a)',vr:"SL",name:"TotalSkinDoseB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2b)':{tag:'(0011,"SIEMENS RA PLANE B",2b)',vr:"SL",name:"FluoroDoseAreaProductB",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RA PLANE B",2c)':{tag:'(0011,"SIEMENS RA PLANE B",2c)',vr:"SL",name:"TotalDoseAreaProductB",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",18)':{tag:'(0019,"SIEMENS RA PLANE B",18)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",19)':{tag:'(0019,"SIEMENS RA PLANE B",19)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1a)':{tag:'(0019,"SIEMENS RA PLANE B",1a)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1b)':{tag:'(0019,"SIEMENS RA PLANE B",1b)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1c)':{tag:'(0019,"SIEMENS RA PLANE B",1c)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1d)':{tag:'(0019,"SIEMENS RA PLANE B",1d)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1e)':{tag:'(0019,"SIEMENS RA PLANE B",1e)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",1f)':{tag:'(0019,"SIEMENS RA PLANE B",1f)',vr:"SS",name:"Internal",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",20)':{tag:'(0019,"SIEMENS RA PLANE B",20)',vr:"SL",name:"SystemCalibFactorPlaneB",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",22)':{tag:'(0019,"SIEMENS RA PLANE B",22)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",24)':{tag:'(0019,"SIEMENS RA PLANE B",24)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",26)':{tag:'(0019,"SIEMENS RA PLANE B",26)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",28)':{tag:'(0019,"SIEMENS RA PLANE B",28)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2a)':{tag:'(0019,"SIEMENS RA PLANE B",2a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2c)':{tag:'(0019,"SIEMENS RA PLANE B",2c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",2e)':{tag:'(0019,"SIEMENS RA PLANE B",2e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",30)':{tag:'(0019,"SIEMENS RA PLANE B",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",32)':{tag:'(0019,"SIEMENS RA PLANE B",32)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",34)':{tag:'(0019,"SIEMENS RA PLANE B",34)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",36)':{tag:'(0019,"SIEMENS RA PLANE B",36)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",38)':{tag:'(0019,"SIEMENS RA PLANE B",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3a)':{tag:'(0019,"SIEMENS RA PLANE B",3a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3c)':{tag:'(0019,"SIEMENS RA PLANE B",3c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",3e)':{tag:'(0019,"SIEMENS RA PLANE B",3e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",40)':{tag:'(0019,"SIEMENS RA PLANE B",40)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",42)':{tag:'(0019,"SIEMENS RA PLANE B",42)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",44)':{tag:'(0019,"SIEMENS RA PLANE B",44)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",46)':{tag:'(0019,"SIEMENS RA PLANE B",46)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",48)':{tag:'(0019,"SIEMENS RA PLANE B",48)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4a)':{tag:'(0019,"SIEMENS RA PLANE B",4a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4c)':{tag:'(0019,"SIEMENS RA PLANE B",4c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",4e)':{tag:'(0019,"SIEMENS RA PLANE B",4e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",50)':{tag:'(0019,"SIEMENS RA PLANE B",50)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",52)':{tag:'(0019,"SIEMENS RA PLANE B",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",54)':{tag:'(0019,"SIEMENS RA PLANE B",54)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",56)':{tag:'(0019,"SIEMENS RA PLANE B",56)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",58)':{tag:'(0019,"SIEMENS RA PLANE B",58)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5a)':{tag:'(0019,"SIEMENS RA PLANE B",5a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5c)':{tag:'(0019,"SIEMENS RA PLANE B",5c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",5e)':{tag:'(0019,"SIEMENS RA PLANE B",5e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",60)':{tag:'(0019,"SIEMENS RA PLANE B",60)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",62)':{tag:'(0019,"SIEMENS RA PLANE B",62)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",64)':{tag:'(0019,"SIEMENS RA PLANE B",64)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",66)':{tag:'(0019,"SIEMENS RA PLANE B",66)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",68)':{tag:'(0019,"SIEMENS RA PLANE B",68)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6a)':{tag:'(0019,"SIEMENS RA PLANE B",6a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6c)':{tag:'(0019,"SIEMENS RA PLANE B",6c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",6e)':{tag:'(0019,"SIEMENS RA PLANE B",6e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",70)':{tag:'(0019,"SIEMENS RA PLANE B",70)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",72)':{tag:'(0019,"SIEMENS RA PLANE B",72)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",74)':{tag:'(0019,"SIEMENS RA PLANE B",74)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",76)':{tag:'(0019,"SIEMENS RA PLANE B",76)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",78)':{tag:'(0019,"SIEMENS RA PLANE B",78)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7a)':{tag:'(0019,"SIEMENS RA PLANE B",7a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7c)':{tag:'(0019,"SIEMENS RA PLANE B",7c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",7e)':{tag:'(0019,"SIEMENS RA PLANE B",7e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",80)':{tag:'(0019,"SIEMENS RA PLANE B",80)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",82)':{tag:'(0019,"SIEMENS RA PLANE B",82)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",84)':{tag:'(0019,"SIEMENS RA PLANE B",84)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",86)':{tag:'(0019,"SIEMENS RA PLANE B",86)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",88)':{tag:'(0019,"SIEMENS RA PLANE B",88)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8a)':{tag:'(0019,"SIEMENS RA PLANE B",8a)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8c)':{tag:'(0019,"SIEMENS RA PLANE B",8c)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",8e)':{tag:'(0019,"SIEMENS RA PLANE B",8e)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",90)':{tag:'(0019,"SIEMENS RA PLANE B",90)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",92)':{tag:'(0019,"SIEMENS RA PLANE B",92)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",94)':{tag:'(0019,"SIEMENS RA PLANE B",94)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",96)':{tag:'(0019,"SIEMENS RA PLANE B",96)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",98)':{tag:'(0019,"SIEMENS RA PLANE B",98)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9a)':{tag:'(0019,"SIEMENS RA PLANE B",9a)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9c)':{tag:'(0019,"SIEMENS RA PLANE B",9c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",9e)':{tag:'(0019,"SIEMENS RA PLANE B",9e)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a0)':{tag:'(0019,"SIEMENS RA PLANE B",a0)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a2)':{tag:'(0019,"SIEMENS RA PLANE B",a2)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a4)':{tag:'(0019,"SIEMENS RA PLANE B",a4)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a6)':{tag:'(0019,"SIEMENS RA PLANE B",a6)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",a8)':{tag:'(0019,"SIEMENS RA PLANE B",a8)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",aa)':{tag:'(0019,"SIEMENS RA PLANE B",aa)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS RA PLANE B",ac)':{tag:'(0019,"SIEMENS RA PLANE B",ac)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",10)':{tag:'(0011,"SIEMENS RIS",10)',vr:"LT",name:"PatientUID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",11)':{tag:'(0011,"SIEMENS RIS",11)',vr:"LT",name:"PatientID",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",20)':{tag:'(0011,"SIEMENS RIS",20)',vr:"DA",name:"PatientRegistrationDate",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",21)':{tag:'(0011,"SIEMENS RIS",21)',vr:"TM",name:"PatientRegistrationTime",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",30)':{tag:'(0011,"SIEMENS RIS",30)',vr:"LT",name:"PatientnameRIS",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",31)':{tag:'(0011,"SIEMENS RIS",31)',vr:"LT",name:"PatientprenameRIS",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",40)':{tag:'(0011,"SIEMENS RIS",40)',vr:"LT",name:"PatientHospitalStatus",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",41)':{tag:'(0011,"SIEMENS RIS",41)',vr:"LT",name:"MedicalAlerts",vm:"1",version:"PrivateTag"},'(0011,"SIEMENS RIS",42)':{tag:'(0011,"SIEMENS RIS",42)',vr:"LT",name:"ContrastAllergies",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",10)':{tag:'(0031,"SIEMENS RIS",10)',vr:"LT",name:"RequestUID",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",45)':{tag:'(0031,"SIEMENS RIS",45)',vr:"LT",name:"RequestingPhysician",vm:"1",version:"PrivateTag"},'(0031,"SIEMENS RIS",50)':{tag:'(0031,"SIEMENS RIS",50)',vr:"LT",name:"RequestedPhysician",vm:"1",version:"PrivateTag"},'(0033,"SIEMENS RIS",10)':{tag:'(0033,"SIEMENS RIS",10)',vr:"LT",name:"PatientStudyUID",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",00)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",00)',vr:"US",name:"AcquisitionType",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",01)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",01)',vr:"US",name:"AcquisitionMode",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",02)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",02)',vr:"US",name:"FootswitchIndex",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",03)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",03)',vr:"US",name:"AcquisitionRoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",04)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",04)',vr:"SL",name:"CurrentTimeProduct",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",05)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",05)',vr:"SL",name:"Dose",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",06)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",06)',vr:"SL",name:"SkinDosePercent",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",07)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",07)',vr:"SL",name:"SkinDoseAccumulation",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",08)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",08)',vr:"SL",name:"SkinDoseRate",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0A)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0A)',vr:"UL",name:"CopperFilter",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0B)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0B)',vr:"US",name:"MeasuringField",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0C)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0C)',vr:"SS",name:"PostBlankingCircle",vm:"3",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0D)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0D)',vr:"SS",name:"DynaAngles",vm:"2-2n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0E)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0E)',vr:"SS",name:"TotalSteps",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",0F)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",0F)',vr:"SL",name:"DynaXRayInfo",vm:"3-3n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",10)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",10)',vr:"US",name:"ModalityLUTInputGamma",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",11)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",11)',vr:"US",name:"ModalityLUTOutputGamma",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",12)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",12)',vr:"OB",name:"SH_STPAR",vm:"1-n",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",13)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",13)',vr:"US",name:"AcquisitionZoom",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",14)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",14)',vr:"SS",name:"DynaAngulationStepWidth",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",15)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",15)',vr:"US",name:"Harmonization",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",16)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",16)',vr:"US",name:"DRSingleFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",17)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",17)',vr:"SL",name:"SourceToIsocenter",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",18)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",18)',vr:"US",name:"PressureData",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",19)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",19)',vr:"SL",name:"ECGIndexArray",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1A)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1A)',vr:"US",name:"FDFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1B)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1B)',vr:"OB",name:"SH_ZOOM",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1C)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1C)',vr:"OB",name:"SH_COLPAR",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1D)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1D)',vr:"US",name:"K_Factor",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1E)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1E)',vr:"US",name:"EVE",vm:"8",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",1F)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",1F)',vr:"SL",name:"TotalSceneTime",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",20)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",20)',vr:"US",name:"RestoreFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",21)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",21)',vr:"US",name:"StandMovementFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",22)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",22)',vr:"US",name:"FDRows",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",23)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",23)',vr:"US",name:"FDColumns",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",24)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",24)',vr:"US",name:"TableMovementFlag",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",25)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",25)',vr:"LO",name:"OriginalOrganProgramName",vm:"1",version:"PrivateTag"},'(0021,"SIEMENS SMS-AX ACQ 1.0",26)':{tag:'(0021,"SIEMENS SMS-AX ACQ 1.0",26)',vr:"DS",name:"CrispyXPIFilter",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",00)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",00)',vr:"US",name:"ViewNative",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",01)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",01)',vr:"US",name:"OriginalSeriesNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",02)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",02)',vr:"US",name:"OriginalImageNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",03)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",03)',vr:"US",name:"WinCenter",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",04)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",04)',vr:"US",name:"WinWidth",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",05)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",05)',vr:"US",name:"WinBrightness",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",06)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",06)',vr:"US",name:"WinContrast",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",07)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",07)',vr:"US",name:"OriginalFrameNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",08)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",08)',vr:"US",name:"OriginalMaskFrameNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",09)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",09)',vr:"US",name:"Opac",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0A)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0A)',vr:"US",name:"OriginalNumberOfFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0B)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0B)',vr:"DS",name:"OriginalSceneDuration",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0C)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0C)',vr:"LO",name:"IdentifierLOID",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0D)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0D)',vr:"SS",name:"OriginalSceneVFRInfo",vm:"1-n",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0E)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0E)',vr:"SS",name:"OriginalFrameECGPosition",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0F)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",0F)',vr:"SS",name:"OriginalECG1stFrameOffset_retired",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",10)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",10)',vr:"SS",name:"ZoomFlag",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",11)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",11)',vr:"US",name:"Flex",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",12)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",12)',vr:"US",name:"NumberOfMaskFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",13)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",13)',vr:"US",name:"NumberOfFillFrames",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",14)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",14)',vr:"US",name:"SeriesNumber",vm:"1",version:"PrivateTag"},'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",15)':{tag:'(0025,"SIEMENS SMS-AX ORIGINAL IMAGE INFO 1.0",15)',vr:"IS",name:"ImageNumber",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",00)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",00)',vr:"DS",name:"HorizontalCalibrationPixelSize",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",01)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",01)',vr:"DS",name:"VerticalCalibrationPixelSize",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",02)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",02)',vr:"LO",name:"CalibrationObject",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",03)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",03)',vr:"DS",name:"CalibrationObjectSize",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",04)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",04)',vr:"LO",name:"CalibrationMethod",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",05)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",05)',vr:"ST",name:"Filename",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",06)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",06)',vr:"IS",name:"FrameNumber",vm:"1",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",07)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",07)',vr:"IS",name:"CalibrationFactorMultiplicity",vm:"2",version:"PrivateTag"},'(0023,"SIEMENS SMS-AX QUANT 1.0",08)':{tag:'(0023,"SIEMENS SMS-AX QUANT 1.0",08)',vr:"IS",name:"CalibrationTODValue",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",00)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",00)',vr:"US",name:"ReviewMode",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",01)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",01)',vr:"US",name:"AnatomicalBackgroundPercent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",02)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",02)',vr:"US",name:"NumberOfPhases",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",03)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",03)',vr:"US",name:"ApplyAnatomicalBackground",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",04)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",04)',vr:"SS",name:"PixelShiftArray",vm:"4-4n",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",05)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",05)',vr:"US",name:"Brightness",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",06)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",06)',vr:"US",name:"Contrast",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",07)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",07)',vr:"US",name:"Enabled",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",08)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",08)',vr:"US",name:"NativeEdgeEnhancementPercentGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",09)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",09)',vr:"SS",name:"NativeEdgeEnhancementLUTIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0A)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0A)',vr:"SS",name:"NativeEdgeEnhancementKernelSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0B)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0B)',vr:"US",name:"SubtrEdgeEnhancementPercentGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0C)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0C)',vr:"SS",name:"SubtrEdgeEnhancementLUTIndex",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0D)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0D)',vr:"SS",name:"SubtrEdgeEnhancementKernelSize",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0E)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0E)',vr:"US",name:"FadePercent",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",0F)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",0F)',vr:"US",name:"FlippedBeforeLateralityApplied",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",10)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",10)',vr:"US",name:"ApplyFade",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",12)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",12)',vr:"US",name:"Zoom",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",13)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",13)',vr:"SS",name:"PanX",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",14)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",14)',vr:"SS",name:"PanY",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",15)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",15)',vr:"SS",name:"NativeEdgeEnhancementAdvPercGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",16)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",16)',vr:"SS",name:"SubtrEdgeEnhancementAdvPercGain",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",17)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",17)',vr:"US",name:"InvertFlag",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1A)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1A)',vr:"OB",name:"Quant1KOverlay",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1B)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1B)',vr:"US",name:"OriginalResolution",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1C)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1C)',vr:"DS",name:"AutoWindowCenter",vm:"1",version:"PrivateTag"},'(0019,"SIEMENS SMS-AX VIEW 1.0",1D)':{tag:'(0019,"SIEMENS SMS-AX VIEW 1.0",1D)',vr:"DS",name:"AutoWindowWidth",vm:"1",version:"PrivateTag"},'(0009,"SIENET",01)':{tag:'(0009,"SIENET",01)',vr:"US",name:"SIENETCommandField",vm:"1",version:"PrivateTag"},'(0009,"SIENET",14)':{tag:'(0009,"SIENET",14)',vr:"LT",name:"ReceiverPLA",vm:"1",version:"PrivateTag"},'(0009,"SIENET",16)':{tag:'(0009,"SIENET",16)',vr:"US",name:"TransferPriority",vm:"1",version:"PrivateTag"},'(0009,"SIENET",29)':{tag:'(0009,"SIENET",29)',vr:"LT",name:"ActualUser",vm:"1",version:"PrivateTag"},'(0095,"SIENET",01)':{tag:'(0095,"SIENET",01)',vr:"LT",name:"ExaminationFolderID",vm:"1",version:"PrivateTag"},'(0095,"SIENET",04)':{tag:'(0095,"SIENET",04)',vr:"UL",name:"FolderReportedStatus",vm:"1",version:"PrivateTag"},'(0095,"SIENET",05)':{tag:'(0095,"SIENET",05)',vr:"LT",name:"FolderReportingRadiologist",vm:"1",version:"PrivateTag"},'(0095,"SIENET",07)':{tag:'(0095,"SIENET",07)',vr:"LT",name:"SIENETISAPLA",vm:"1",version:"PrivateTag"},'(0099,"SIENET",02)':{tag:'(0099,"SIENET",02)',vr:"UL",name:"DataObjectAttributes",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",10)':{tag:'(0009,"SPI RELEASE 1",10)',vr:"LT",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",15)':{tag:'(0009,"SPI RELEASE 1",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",40)':{tag:'(0009,"SPI RELEASE 1",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI RELEASE 1",41)':{tag:'(0009,"SPI RELEASE 1",41)',vr:"LO",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",10)':{tag:'(0011,"SPI RELEASE 1",10)',vr:"LO",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",15)':{tag:'(0011,"SPI RELEASE 1",15)',vr:"LO",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI RELEASE 1",20)':{tag:'(0011,"SPI RELEASE 1",20)',vr:"LO",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI RELEASE 1",60)':{tag:'(0029,"SPI RELEASE 1",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",10)':{tag:'(0009,"SPI Release 1",10)',vr:"LT",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",15)':{tag:'(0009,"SPI Release 1",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",40)':{tag:'(0009,"SPI Release 1",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI Release 1",41)':{tag:'(0009,"SPI Release 1",41)',vr:"LO",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",10)':{tag:'(0011,"SPI Release 1",10)',vr:"LO",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",15)':{tag:'(0011,"SPI Release 1",15)',vr:"LO",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI Release 1",20)':{tag:'(0011,"SPI Release 1",20)',vr:"LO",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI Release 1",60)':{tag:'(0029,"SPI Release 1",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI",10)':{tag:'(0009,"SPI",10)',vr:"LO",name:"Comments",vm:"1",version:"PrivateTag"},'(0009,"SPI",15)':{tag:'(0009,"SPI",15)',vr:"LO",name:"SPIImageUID",vm:"1",version:"PrivateTag"},'(0009,"SPI",40)':{tag:'(0009,"SPI",40)',vr:"US",name:"DataObjectType",vm:"1",version:"PrivateTag"},'(0009,"SPI",41)':{tag:'(0009,"SPI",41)',vr:"LT",name:"DataObjectSubtype",vm:"1",version:"PrivateTag"},'(0011,"SPI",10)':{tag:'(0011,"SPI",10)',vr:"LT",name:"Organ",vm:"1",version:"PrivateTag"},'(0011,"SPI",15)':{tag:'(0011,"SPI",15)',vr:"LT",name:"AllergyIndication",vm:"1",version:"PrivateTag"},'(0011,"SPI",20)':{tag:'(0011,"SPI",20)',vr:"LT",name:"Pregnancy",vm:"1",version:"PrivateTag"},'(0029,"SPI",60)':{tag:'(0029,"SPI",60)',vr:"LT",name:"CompressionAlgorithm",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",00)':{tag:'(0009,"SPI-P Release 1",00)',vr:"LT",name:"DataObjectRecognitionCode",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",04)':{tag:'(0009,"SPI-P Release 1",04)',vr:"LO",name:"ImageDataConsistence",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",08)':{tag:'(0009,"SPI-P Release 1",08)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",12)':{tag:'(0009,"SPI-P Release 1",12)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",15)':{tag:'(0009,"SPI-P Release 1",15)',vr:"LO",name:"UniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",16)':{tag:'(0009,"SPI-P Release 1",16)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",18)':{tag:'(0009,"SPI-P Release 1",18)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",21)':{tag:'(0009,"SPI-P Release 1",21)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",31)':{tag:'(0009,"SPI-P Release 1",31)',vr:"LT",name:"PACSUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",34)':{tag:'(0009,"SPI-P Release 1",34)',vr:"LT",name:"ClusterUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",38)':{tag:'(0009,"SPI-P Release 1",38)',vr:"LT",name:"SystemUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",39)':{tag:'(0009,"SPI-P Release 1",39)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",51)':{tag:'(0009,"SPI-P Release 1",51)',vr:"LT",name:"StudyUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",61)':{tag:'(0009,"SPI-P Release 1",61)',vr:"LT",name:"SeriesUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",91)':{tag:'(0009,"SPI-P Release 1",91)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f2)':{tag:'(0009,"SPI-P Release 1",f2)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f3)':{tag:'(0009,"SPI-P Release 1",f3)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f4)':{tag:'(0009,"SPI-P Release 1",f4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f5)':{tag:'(0009,"SPI-P Release 1",f5)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1",f7)':{tag:'(0009,"SPI-P Release 1",f7)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",10)':{tag:'(0011,"SPI-P Release 1",10)',vr:"LT",name:"PatientEntryID",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",21)':{tag:'(0011,"SPI-P Release 1",21)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",22)':{tag:'(0011,"SPI-P Release 1",22)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",31)':{tag:'(0011,"SPI-P Release 1",31)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 1",32)':{tag:'(0011,"SPI-P Release 1",32)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",00)':{tag:'(0019,"SPI-P Release 1",00)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",01)':{tag:'(0019,"SPI-P Release 1",01)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",02)':{tag:'(0019,"SPI-P Release 1",02)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",10)':{tag:'(0019,"SPI-P Release 1",10)',vr:"US",name:"MainsFrequency",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",25)':{tag:'(0019,"SPI-P Release 1",25)',vr:"LT",name:"OriginalPixelDataQuality",vm:"1-n",version:"PrivateTag"},'(0019,"SPI-P Release 1",30)':{tag:'(0019,"SPI-P Release 1",30)',vr:"US",name:"ECGTriggering",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",31)':{tag:'(0019,"SPI-P Release 1",31)',vr:"UN",name:"ECG1Offset",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",32)':{tag:'(0019,"SPI-P Release 1",32)',vr:"UN",name:"ECG2Offset1",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",33)':{tag:'(0019,"SPI-P Release 1",33)',vr:"UN",name:"ECG2Offset2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",50)':{tag:'(0019,"SPI-P Release 1",50)',vr:"US",name:"VideoScanMode",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",51)':{tag:'(0019,"SPI-P Release 1",51)',vr:"US",name:"VideoLineRate",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",60)':{tag:'(0019,"SPI-P Release 1",60)',vr:"US",name:"XrayTechnique",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",61)':{tag:'(0019,"SPI-P Release 1",61)',vr:"DS",name:"ImageIdentifierFromat",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",62)':{tag:'(0019,"SPI-P Release 1",62)',vr:"US",name:"IrisDiaphragm",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",63)':{tag:'(0019,"SPI-P Release 1",63)',vr:"CS",name:"Filter",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",64)':{tag:'(0019,"SPI-P Release 1",64)',vr:"CS",name:"CineParallel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",65)':{tag:'(0019,"SPI-P Release 1",65)',vr:"CS",name:"CineMaster",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",70)':{tag:'(0019,"SPI-P Release 1",70)',vr:"US",name:"ExposureChannel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",71)':{tag:'(0019,"SPI-P Release 1",71)',vr:"UN",name:"ExposureChannelFirstImage",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",72)':{tag:'(0019,"SPI-P Release 1",72)',vr:"US",name:"ProcessingChannel",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",80)':{tag:'(0019,"SPI-P Release 1",80)',vr:"DS",name:"AcquisitionDelay",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",81)':{tag:'(0019,"SPI-P Release 1",81)',vr:"UN",name:"RelativeImageTime",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",90)':{tag:'(0019,"SPI-P Release 1",90)',vr:"CS",name:"VideoWhiteCompression",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",a0)':{tag:'(0019,"SPI-P Release 1",a0)',vr:"US",name:"Angulation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1",a1)':{tag:'(0019,"SPI-P Release 1",a1)',vr:"US",name:"Rotation",vm:"1",version:"PrivateTag"},'(0021,"SPI-P Release 1",12)':{tag:'(0021,"SPI-P Release 1",12)',vr:"LT",name:"SeriesUniqueIdentifier",vm:"1",version:"PrivateTag"},'(0021,"SPI-P Release 1",14)':{tag:'(0021,"SPI-P Release 1",14)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",00)':{tag:'(0029,"SPI-P Release 1",00)',vr:"DS",name:"Unknown",vm:"4",version:"PrivateTag"},'(0029,"SPI-P Release 1",20)':{tag:'(0029,"SPI-P Release 1",20)',vr:"DS",name:"PixelAspectRatio",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",25)':{tag:'(0029,"SPI-P Release 1",25)',vr:"LO",name:"ProcessedPixelDataQuality",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1",30)':{tag:'(0029,"SPI-P Release 1",30)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",38)':{tag:'(0029,"SPI-P Release 1",38)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",60)':{tag:'(0029,"SPI-P Release 1",60)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",61)':{tag:'(0029,"SPI-P Release 1",61)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",67)':{tag:'(0029,"SPI-P Release 1",67)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",70)':{tag:'(0029,"SPI-P Release 1",70)',vr:"LT",name:"WindowID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",71)':{tag:'(0029,"SPI-P Release 1",71)',vr:"CS",name:"VideoInvertSubtracted",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",72)':{tag:'(0029,"SPI-P Release 1",72)',vr:"CS",name:"VideoInvertNonsubtracted",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",77)':{tag:'(0029,"SPI-P Release 1",77)',vr:"CS",name:"WindowSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",78)':{tag:'(0029,"SPI-P Release 1",78)',vr:"LT",name:"ECGDisplayPrintingID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",79)':{tag:'(0029,"SPI-P Release 1",79)',vr:"CS",name:"ECGDisplayPrinting",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",7e)':{tag:'(0029,"SPI-P Release 1",7e)',vr:"CS",name:"ECGDisplayPrintingEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",7f)':{tag:'(0029,"SPI-P Release 1",7f)',vr:"CS",name:"ECGDisplayPrintingSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",80)':{tag:'(0029,"SPI-P Release 1",80)',vr:"LT",name:"PhysiologicalDisplayID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",81)':{tag:'(0029,"SPI-P Release 1",81)',vr:"US",name:"PreferredPhysiologicalChannelDisplay",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",8e)':{tag:'(0029,"SPI-P Release 1",8e)',vr:"CS",name:"PhysiologicalDisplayEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",8f)':{tag:'(0029,"SPI-P Release 1",8f)',vr:"CS",name:"PhysiologicalDisplaySelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c0)':{tag:'(0029,"SPI-P Release 1",c0)',vr:"LT",name:"FunctionalShutterID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c1)':{tag:'(0029,"SPI-P Release 1",c1)',vr:"US",name:"FieldOfShutter",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",c5)':{tag:'(0029,"SPI-P Release 1",c5)',vr:"LT",name:"FieldOfShutterRectangle",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",ce)':{tag:'(0029,"SPI-P Release 1",ce)',vr:"CS",name:"ShutterEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1",cf)':{tag:'(0029,"SPI-P Release 1",cf)',vr:"CS",name:"ShutterSelectStatus",vm:"1",version:"PrivateTag"},'(7FE1,"SPI-P Release 1",10)':{tag:'(7FE1,"SPI-P Release 1",10)',vr:"ox",name:"PixelData",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1;1",c0)':{tag:'(0009,"SPI-P Release 1;1",c0)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P Release 1;1",c1)':{tag:'(0009,"SPI-P Release 1;1",c1)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",00)':{tag:'(0019,"SPI-P Release 1;1",00)',vr:"UN",name:"PhysiologicalDataType",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",01)':{tag:'(0019,"SPI-P Release 1;1",01)',vr:"UN",name:"PhysiologicalDataChannelAndKind",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",02)':{tag:'(0019,"SPI-P Release 1;1",02)',vr:"US",name:"SampleBitsAllocated",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",03)':{tag:'(0019,"SPI-P Release 1;1",03)',vr:"US",name:"SampleBitsStored",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",04)':{tag:'(0019,"SPI-P Release 1;1",04)',vr:"US",name:"SampleHighBit",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",05)':{tag:'(0019,"SPI-P Release 1;1",05)',vr:"US",name:"SampleRepresentation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",06)':{tag:'(0019,"SPI-P Release 1;1",06)',vr:"UN",name:"SmallestSampleValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",07)':{tag:'(0019,"SPI-P Release 1;1",07)',vr:"UN",name:"LargestSampleValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",08)':{tag:'(0019,"SPI-P Release 1;1",08)',vr:"UN",name:"NumberOfSamples",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",09)':{tag:'(0019,"SPI-P Release 1;1",09)',vr:"UN",name:"SampleData",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",0a)':{tag:'(0019,"SPI-P Release 1;1",0a)',vr:"UN",name:"SampleRate",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",10)':{tag:'(0019,"SPI-P Release 1;1",10)',vr:"UN",name:"PhysiologicalDataType2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",11)':{tag:'(0019,"SPI-P Release 1;1",11)',vr:"UN",name:"PhysiologicalDataChannelAndKind2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",12)':{tag:'(0019,"SPI-P Release 1;1",12)',vr:"US",name:"SampleBitsAllocated2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",13)':{tag:'(0019,"SPI-P Release 1;1",13)',vr:"US",name:"SampleBitsStored2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",14)':{tag:'(0019,"SPI-P Release 1;1",14)',vr:"US",name:"SampleHighBit2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",15)':{tag:'(0019,"SPI-P Release 1;1",15)',vr:"US",name:"SampleRepresentation2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",16)':{tag:'(0019,"SPI-P Release 1;1",16)',vr:"UN",name:"SmallestSampleValue2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",17)':{tag:'(0019,"SPI-P Release 1;1",17)',vr:"UN",name:"LargestSampleValue2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",18)':{tag:'(0019,"SPI-P Release 1;1",18)',vr:"UN",name:"NumberOfSamples2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",19)':{tag:'(0019,"SPI-P Release 1;1",19)',vr:"UN",name:"SampleData2",vm:"1",version:"PrivateTag"},'(0019,"SPI-P Release 1;1",1a)':{tag:'(0019,"SPI-P Release 1;1",1a)',vr:"UN",name:"SampleRate2",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",00)':{tag:'(0029,"SPI-P Release 1;1",00)',vr:"LT",name:"ZoomID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",01)':{tag:'(0029,"SPI-P Release 1;1",01)',vr:"DS",name:"ZoomRectangle",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",03)':{tag:'(0029,"SPI-P Release 1;1",03)',vr:"DS",name:"ZoomFactor",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",04)':{tag:'(0029,"SPI-P Release 1;1",04)',vr:"US",name:"ZoomFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",0e)':{tag:'(0029,"SPI-P Release 1;1",0e)',vr:"CS",name:"ZoomEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",0f)':{tag:'(0029,"SPI-P Release 1;1",0f)',vr:"CS",name:"ZoomSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",40)':{tag:'(0029,"SPI-P Release 1;1",40)',vr:"LT",name:"MagnifyingGlassID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",41)':{tag:'(0029,"SPI-P Release 1;1",41)',vr:"DS",name:"MagnifyingGlassRectangle",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",43)':{tag:'(0029,"SPI-P Release 1;1",43)',vr:"DS",name:"MagnifyingGlassFactor",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",44)':{tag:'(0029,"SPI-P Release 1;1",44)',vr:"US",name:"MagnifyingGlassFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",4e)':{tag:'(0029,"SPI-P Release 1;1",4e)',vr:"CS",name:"MagnifyingGlassEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;1",4f)':{tag:'(0029,"SPI-P Release 1;1",4f)',vr:"CS",name:"MagnifyingGlassSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",00)':{tag:'(0029,"SPI-P Release 1;2",00)',vr:"LT",name:"SubtractionMaskID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",04)':{tag:'(0029,"SPI-P Release 1;2",04)',vr:"UN",name:"MaskingFunction",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",0c)':{tag:'(0029,"SPI-P Release 1;2",0c)',vr:"UN",name:"ProprietaryMaskingParameters",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",1e)':{tag:'(0029,"SPI-P Release 1;2",1e)',vr:"CS",name:"SubtractionMaskEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;2",1f)':{tag:'(0029,"SPI-P Release 1;2",1f)',vr:"CS",name:"SubtractionMaskSelectStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",00)':{tag:'(0029,"SPI-P Release 1;3",00)',vr:"LT",name:"ImageEnhancementID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",01)':{tag:'(0029,"SPI-P Release 1;3",01)',vr:"LT",name:"ImageEnhancement",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",02)':{tag:'(0029,"SPI-P Release 1;3",02)',vr:"LT",name:"ConvolutionID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",03)':{tag:'(0029,"SPI-P Release 1;3",03)',vr:"LT",name:"ConvolutionType",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",04)':{tag:'(0029,"SPI-P Release 1;3",04)',vr:"LT",name:"ConvolutionKernelSizeID",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",05)':{tag:'(0029,"SPI-P Release 1;3",05)',vr:"US",name:"ConvolutionKernelSize",vm:"2",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",06)':{tag:'(0029,"SPI-P Release 1;3",06)',vr:"US",name:"ConvolutionKernel",vm:"1-n",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",0c)':{tag:'(0029,"SPI-P Release 1;3",0c)',vr:"DS",name:"EnhancementGain",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",1e)':{tag:'(0029,"SPI-P Release 1;3",1e)',vr:"CS",name:"ImageEnhancementEnableStatus",vm:"1",version:"PrivateTag"},'(0029,"SPI-P Release 1;3",1f)':{tag:'(0029,"SPI-P Release 1;3",1f)',vr:"CS",name:"ImageEnhancementSelectStatus",vm:"1",version:"PrivateTag"},'(0011,"SPI-P Release 2;1",18)':{tag:'(0011,"SPI-P Release 2;1",18)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SPI-P Release 2;1",0d)':{tag:'(0023,"SPI-P Release 2;1",0d)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SPI-P Release 2;1",0e)':{tag:'(0023,"SPI-P Release 2;1",0e)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",00)':{tag:'(0009,"SPI-P-GV-CT Release 1",00)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",10)':{tag:'(0009,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",20)':{tag:'(0009,"SPI-P-GV-CT Release 1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",30)':{tag:'(0009,"SPI-P-GV-CT Release 1",30)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",40)':{tag:'(0009,"SPI-P-GV-CT Release 1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",50)':{tag:'(0009,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",60)':{tag:'(0009,"SPI-P-GV-CT Release 1",60)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",70)':{tag:'(0009,"SPI-P-GV-CT Release 1",70)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",75)':{tag:'(0009,"SPI-P-GV-CT Release 1",75)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",80)':{tag:'(0009,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"SPI-P-GV-CT Release 1",90)':{tag:'(0009,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",08)':{tag:'(0019,"SPI-P-GV-CT Release 1",08)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",09)':{tag:'(0019,"SPI-P-GV-CT Release 1",09)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",0a)':{tag:'(0019,"SPI-P-GV-CT Release 1",0a)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",10)':{tag:'(0019,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",20)':{tag:'(0019,"SPI-P-GV-CT Release 1",20)',vr:"TM",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",50)':{tag:'(0019,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",60)':{tag:'(0019,"SPI-P-GV-CT Release 1",60)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",61)':{tag:'(0019,"SPI-P-GV-CT Release 1",61)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",63)':{tag:'(0019,"SPI-P-GV-CT Release 1",63)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",64)':{tag:'(0019,"SPI-P-GV-CT Release 1",64)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",65)':{tag:'(0019,"SPI-P-GV-CT Release 1",65)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",70)':{tag:'(0019,"SPI-P-GV-CT Release 1",70)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",80)':{tag:'(0019,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",81)':{tag:'(0019,"SPI-P-GV-CT Release 1",81)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",90)':{tag:'(0019,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a0)':{tag:'(0019,"SPI-P-GV-CT Release 1",a0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a1)':{tag:'(0019,"SPI-P-GV-CT Release 1",a1)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a2)':{tag:'(0019,"SPI-P-GV-CT Release 1",a2)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",a3)':{tag:'(0019,"SPI-P-GV-CT Release 1",a3)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",b0)':{tag:'(0019,"SPI-P-GV-CT Release 1",b0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-GV-CT Release 1",b1)':{tag:'(0019,"SPI-P-GV-CT Release 1",b1)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",20)':{tag:'(0021,"SPI-P-GV-CT Release 1",20)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",30)':{tag:'(0021,"SPI-P-GV-CT Release 1",30)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",40)':{tag:'(0021,"SPI-P-GV-CT Release 1",40)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",50)':{tag:'(0021,"SPI-P-GV-CT Release 1",50)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",60)':{tag:'(0021,"SPI-P-GV-CT Release 1",60)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",70)':{tag:'(0021,"SPI-P-GV-CT Release 1",70)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",80)':{tag:'(0021,"SPI-P-GV-CT Release 1",80)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",90)':{tag:'(0021,"SPI-P-GV-CT Release 1",90)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a0)':{tag:'(0021,"SPI-P-GV-CT Release 1",a0)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a1)':{tag:'(0021,"SPI-P-GV-CT Release 1",a1)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a2)':{tag:'(0021,"SPI-P-GV-CT Release 1",a2)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a3)':{tag:'(0021,"SPI-P-GV-CT Release 1",a3)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",a4)':{tag:'(0021,"SPI-P-GV-CT Release 1",a4)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",b0)':{tag:'(0021,"SPI-P-GV-CT Release 1",b0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-GV-CT Release 1",c0)':{tag:'(0021,"SPI-P-GV-CT Release 1",c0)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",10)':{tag:'(0029,"SPI-P-GV-CT Release 1",10)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",30)':{tag:'(0029,"SPI-P-GV-CT Release 1",30)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",31)':{tag:'(0029,"SPI-P-GV-CT Release 1",31)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",32)':{tag:'(0029,"SPI-P-GV-CT Release 1",32)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",33)':{tag:'(0029,"SPI-P-GV-CT Release 1",33)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",80)':{tag:'(0029,"SPI-P-GV-CT Release 1",80)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",90)':{tag:'(0029,"SPI-P-GV-CT Release 1",90)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",d0)':{tag:'(0029,"SPI-P-GV-CT Release 1",d0)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-GV-CT Release 1",d1)':{tag:'(0029,"SPI-P-GV-CT Release 1",d1)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-PCR Release 2",30)':{tag:'(0019,"SPI-P-PCR Release 2",30)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",00)':{tag:'(0021,"SPI-P-Private-CWS Release 1",00)',vr:"LT",name:"WindowOfImagesID",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",01)':{tag:'(0021,"SPI-P-Private-CWS Release 1",01)',vr:"CS",name:"WindowOfImagesType",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private-CWS Release 1",02)':{tag:'(0021,"SPI-P-Private-CWS Release 1",02)',vr:"IS",name:"WindowOfImagesScope",vm:"1-n",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",10)':{tag:'(0019,"SPI-P-Private-DCI Release 1",10)',vr:"UN",name:"ECGTimeMapDataBitsAllocated",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",11)':{tag:'(0019,"SPI-P-Private-DCI Release 1",11)',vr:"UN",name:"ECGTimeMapDataBitsStored",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",12)':{tag:'(0019,"SPI-P-Private-DCI Release 1",12)',vr:"UN",name:"ECGTimeMapDataHighBit",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",13)':{tag:'(0019,"SPI-P-Private-DCI Release 1",13)',vr:"UN",name:"ECGTimeMapDataRepresentation",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",14)':{tag:'(0019,"SPI-P-Private-DCI Release 1",14)',vr:"UN",name:"ECGTimeMapDataSmallestDataValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",15)':{tag:'(0019,"SPI-P-Private-DCI Release 1",15)',vr:"UN",name:"ECGTimeMapDataLargestDataValue",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",16)':{tag:'(0019,"SPI-P-Private-DCI Release 1",16)',vr:"UN",name:"ECGTimeMapDataNumberOfDataValues",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private-DCI Release 1",17)':{tag:'(0019,"SPI-P-Private-DCI Release 1",17)',vr:"UN",name:"ECGTimeMapData",vm:"1",version:"PrivateTag"},'(0021,"SPI-P-Private_CDS Release 1",40)':{tag:'(0021,"SPI-P-Private_CDS Release 1",40)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_CDS Release 1",00)':{tag:'(0029,"SPI-P-Private_CDS Release 1",00)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private_ICS Release 1",30)':{tag:'(0019,"SPI-P-Private_ICS Release 1",30)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-Private_ICS Release 1",31)':{tag:'(0019,"SPI-P-Private_ICS Release 1",31)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",08)':{tag:'(0029,"SPI-P-Private_ICS Release 1",08)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",0f)':{tag:'(0029,"SPI-P-Private_ICS Release 1",0f)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",10)':{tag:'(0029,"SPI-P-Private_ICS Release 1",10)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",1b)':{tag:'(0029,"SPI-P-Private_ICS Release 1",1b)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",1c)':{tag:'(0029,"SPI-P-Private_ICS Release 1",1c)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",21)':{tag:'(0029,"SPI-P-Private_ICS Release 1",21)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",43)':{tag:'(0029,"SPI-P-Private_ICS Release 1",43)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",44)':{tag:'(0029,"SPI-P-Private_ICS Release 1",44)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",4C)':{tag:'(0029,"SPI-P-Private_ICS Release 1",4C)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",67)':{tag:'(0029,"SPI-P-Private_ICS Release 1",67)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",68)':{tag:'(0029,"SPI-P-Private_ICS Release 1",68)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",6A)':{tag:'(0029,"SPI-P-Private_ICS Release 1",6A)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1",6B)':{tag:'(0029,"SPI-P-Private_ICS Release 1",6B)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",00)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",00)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",05)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",05)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",06)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",06)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",20)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",20)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",21)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",21)',vr:"FL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;1",CD)':{tag:'(0029,"SPI-P-Private_ICS Release 1;1",CD)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",00)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",00)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",01)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",01)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",02)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",02)',vr:"FD",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",03)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",03)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",04)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",04)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;2",05)':{tag:'(0029,"SPI-P-Private_ICS Release 1;2",05)',vr:"SL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C0)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C0)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C1)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C1)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C2)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C2)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C3)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C3)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C4)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C4)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;3",C5)':{tag:'(0029,"SPI-P-Private_ICS Release 1;3",C5)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",02)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",02)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",9A)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",9A)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;4",E0)':{tag:'(0029,"SPI-P-Private_ICS Release 1;4",E0)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;5",50)':{tag:'(0029,"SPI-P-Private_ICS Release 1;5",50)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"SPI-P-Private_ICS Release 1;5",55)':{tag:'(0029,"SPI-P-Private_ICS Release 1;5",55)',vr:"CS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",10)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",10)',vr:"LT",name:"VideoBeamBoost",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",11)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",11)',vr:"US",name:"ChannelGeneratingVideoSync",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",12)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",12)',vr:"US",name:"VideoGain",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",13)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",13)',vr:"US",name:"VideoOffset",vm:"1",version:"PrivateTag"},'(0019,"SPI-P-XSB-DCI Release 1",20)':{tag:'(0019,"SPI-P-XSB-DCI Release 1",20)',vr:"DS",name:"RTDDataCompressionFactor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",11)':{tag:'(0029,"Silhouette Annot V1.0",11)',vr:"IS",name:"AnnotationName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",12)':{tag:'(0029,"Silhouette Annot V1.0",12)',vr:"LT",name:"AnnotationFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",13)':{tag:'(0029,"Silhouette Annot V1.0",13)',vr:"LT",name:"AnnotationTextForegroundColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",14)':{tag:'(0029,"Silhouette Annot V1.0",14)',vr:"LT",name:"AnnotationTextBackgroundColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",15)':{tag:'(0029,"Silhouette Annot V1.0",15)',vr:"UL",name:"AnnotationTextBackingMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",16)':{tag:'(0029,"Silhouette Annot V1.0",16)',vr:"UL",name:"AnnotationTextJustification",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",17)':{tag:'(0029,"Silhouette Annot V1.0",17)',vr:"UL",name:"AnnotationTextLocation",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",18)':{tag:'(0029,"Silhouette Annot V1.0",18)',vr:"LT",name:"AnnotationTextString",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",19)':{tag:'(0029,"Silhouette Annot V1.0",19)',vr:"UL",name:"AnnotationTextAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",20)':{tag:'(0029,"Silhouette Annot V1.0",20)',vr:"UL",name:"AnnotationTextCursorMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",21)':{tag:'(0029,"Silhouette Annot V1.0",21)',vr:"UL",name:"AnnotationTextShadowOffsetX",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",22)':{tag:'(0029,"Silhouette Annot V1.0",22)',vr:"UL",name:"AnnotationTextShadowOffsetY",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",23)':{tag:'(0029,"Silhouette Annot V1.0",23)',vr:"LT",name:"AnnotationLineColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",24)':{tag:'(0029,"Silhouette Annot V1.0",24)',vr:"UL",name:"AnnotationLineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",25)':{tag:'(0029,"Silhouette Annot V1.0",25)',vr:"UL",name:"AnnotationLineType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",26)':{tag:'(0029,"Silhouette Annot V1.0",26)',vr:"UL",name:"AnnotationLineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",27)':{tag:'(0029,"Silhouette Annot V1.0",27)',vr:"UL",name:"AnnotationLineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",28)':{tag:'(0029,"Silhouette Annot V1.0",28)',vr:"UL",name:"AnnotationLineAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",29)':{tag:'(0029,"Silhouette Annot V1.0",29)',vr:"UL",name:"AnnotationLinePointCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",30)':{tag:'(0029,"Silhouette Annot V1.0",30)',vr:"FD",name:"AnnotationLinePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",31)':{tag:'(0029,"Silhouette Annot V1.0",31)',vr:"UL",name:"AnnotationLineControlSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",32)':{tag:'(0029,"Silhouette Annot V1.0",32)',vr:"LT",name:"AnnotationMarkerColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",33)':{tag:'(0029,"Silhouette Annot V1.0",33)',vr:"UL",name:"AnnotationMarkerType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",34)':{tag:'(0029,"Silhouette Annot V1.0",34)',vr:"UL",name:"AnnotationMarkerSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",35)':{tag:'(0029,"Silhouette Annot V1.0",35)',vr:"FD",name:"AnnotationMarkerLocation",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",36)':{tag:'(0029,"Silhouette Annot V1.0",36)',vr:"UL",name:"AnnotationMarkerAttachMode",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",37)':{tag:'(0029,"Silhouette Annot V1.0",37)',vr:"LT",name:"AnnotationGeomColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",38)':{tag:'(0029,"Silhouette Annot V1.0",38)',vr:"UL",name:"AnnotationGeomThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",39)':{tag:'(0029,"Silhouette Annot V1.0",39)',vr:"UL",name:"AnnotationGeomLineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",40)':{tag:'(0029,"Silhouette Annot V1.0",40)',vr:"UL",name:"AnnotationGeomDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",41)':{tag:'(0029,"Silhouette Annot V1.0",41)',vr:"UL",name:"AnnotationGeomFillPattern",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",42)':{tag:'(0029,"Silhouette Annot V1.0",42)',vr:"UL",name:"AnnotationInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",43)':{tag:'(0029,"Silhouette Annot V1.0",43)',vr:"FD",name:"AnnotationArrowLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",44)':{tag:'(0029,"Silhouette Annot V1.0",44)',vr:"FD",name:"AnnotationArrowAngle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Annot V1.0",45)':{tag:'(0029,"Silhouette Annot V1.0",45)',vr:"UL",name:"AnnotationDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Graphics Export V1.0",00)':{tag:'(0029,"Silhouette Graphics Export V1.0",00)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",11)':{tag:'(0029,"Silhouette Line V1.0",11)',vr:"IS",name:"LineName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",12)':{tag:'(0029,"Silhouette Line V1.0",12)',vr:"LT",name:"LineNameFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",13)':{tag:'(0029,"Silhouette Line V1.0",13)',vr:"UL",name:"LineNameDisplay",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",14)':{tag:'(0029,"Silhouette Line V1.0",14)',vr:"LT",name:"LineNormalColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",15)':{tag:'(0029,"Silhouette Line V1.0",15)',vr:"UL",name:"LineType",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",16)':{tag:'(0029,"Silhouette Line V1.0",16)',vr:"UL",name:"LineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",17)':{tag:'(0029,"Silhouette Line V1.0",17)',vr:"UL",name:"LineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",18)':{tag:'(0029,"Silhouette Line V1.0",18)',vr:"UL",name:"LineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",19)':{tag:'(0029,"Silhouette Line V1.0",19)',vr:"UL",name:"LineInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",20)':{tag:'(0029,"Silhouette Line V1.0",20)',vr:"LT",name:"LineMeasurementColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",21)':{tag:'(0029,"Silhouette Line V1.0",21)',vr:"LT",name:"LineMeasurementFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",22)':{tag:'(0029,"Silhouette Line V1.0",22)',vr:"UL",name:"LineMeasurementDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",23)':{tag:'(0029,"Silhouette Line V1.0",23)',vr:"UL",name:"LinePointSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",24)':{tag:'(0029,"Silhouette Line V1.0",24)',vr:"FD",name:"LinePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",25)':{tag:'(0029,"Silhouette Line V1.0",25)',vr:"UL",name:"LineControlPointSize",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",26)':{tag:'(0029,"Silhouette Line V1.0",26)',vr:"UL",name:"LineControlPointSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",27)':{tag:'(0029,"Silhouette Line V1.0",27)',vr:"FD",name:"LineControlPoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",28)':{tag:'(0029,"Silhouette Line V1.0",28)',vr:"LT",name:"LineLabel",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Line V1.0",29)':{tag:'(0029,"Silhouette Line V1.0",29)',vr:"UL",name:"LineDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",11)':{tag:'(0029,"Silhouette ROI V1.0",11)',vr:"IS",name:"ROIName",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",12)':{tag:'(0029,"Silhouette ROI V1.0",12)',vr:"LT",name:"ROINameFont",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",13)':{tag:'(0029,"Silhouette ROI V1.0",13)',vr:"LT",name:"ROINormalColor",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",14)':{tag:'(0029,"Silhouette ROI V1.0",14)',vr:"UL",name:"ROIFillPattern",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",15)':{tag:'(0029,"Silhouette ROI V1.0",15)',vr:"UL",name:"ROIBpSeg",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",16)':{tag:'(0029,"Silhouette ROI V1.0",16)',vr:"UN",name:"ROIBpSegPairs",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",17)':{tag:'(0029,"Silhouette ROI V1.0",17)',vr:"UL",name:"ROISeedSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",18)':{tag:'(0029,"Silhouette ROI V1.0",18)',vr:"UN",name:"ROISeeds",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",19)':{tag:'(0029,"Silhouette ROI V1.0",19)',vr:"UL",name:"ROILineThickness",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",20)':{tag:'(0029,"Silhouette ROI V1.0",20)',vr:"UL",name:"ROILineStyle",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",21)':{tag:'(0029,"Silhouette ROI V1.0",21)',vr:"UL",name:"ROILineDashLength",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",22)':{tag:'(0029,"Silhouette ROI V1.0",22)',vr:"UL",name:"ROIInteractivity",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",23)':{tag:'(0029,"Silhouette ROI V1.0",23)',vr:"UL",name:"ROINamePosition",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",24)':{tag:'(0029,"Silhouette ROI V1.0",24)',vr:"UL",name:"ROINameDisplay",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",25)':{tag:'(0029,"Silhouette ROI V1.0",25)',vr:"LT",name:"ROILabel",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",26)':{tag:'(0029,"Silhouette ROI V1.0",26)',vr:"UL",name:"ROIShape",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",27)':{tag:'(0029,"Silhouette ROI V1.0",27)',vr:"FD",name:"ROIShapeTilt",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",28)':{tag:'(0029,"Silhouette ROI V1.0",28)',vr:"UL",name:"ROIShapePointsCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",29)':{tag:'(0029,"Silhouette ROI V1.0",29)',vr:"UL",name:"ROIShapePointsSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",30)':{tag:'(0029,"Silhouette ROI V1.0",30)',vr:"FD",name:"ROIShapePoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",31)':{tag:'(0029,"Silhouette ROI V1.0",31)',vr:"UL",name:"ROIShapeControlPointsCount",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",32)':{tag:'(0029,"Silhouette ROI V1.0",32)',vr:"UL",name:"ROIShapeControlPointsSpace",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",33)':{tag:'(0029,"Silhouette ROI V1.0",33)',vr:"FD",name:"ROIShapeControlPoints",vm:"1",version:"PrivateTag"},'(0029,"Silhouette ROI V1.0",34)':{tag:'(0029,"Silhouette ROI V1.0",34)',vr:"UL",name:"ROIDontSave",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",41)':{tag:'(0029,"Silhouette Sequence Ids V1.0",41)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",42)':{tag:'(0029,"Silhouette Sequence Ids V1.0",42)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette Sequence Ids V1.0",43)':{tag:'(0029,"Silhouette Sequence Ids V1.0",43)',vr:"SQ",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",13)':{tag:'(0029,"Silhouette V1.0",13)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",14)':{tag:'(0029,"Silhouette V1.0",14)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",17)':{tag:'(0029,"Silhouette V1.0",17)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",18)':{tag:'(0029,"Silhouette V1.0",18)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",19)':{tag:'(0029,"Silhouette V1.0",19)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1a)':{tag:'(0029,"Silhouette V1.0",1a)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1b)':{tag:'(0029,"Silhouette V1.0",1b)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1c)':{tag:'(0029,"Silhouette V1.0",1c)',vr:"UL",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1d)':{tag:'(0029,"Silhouette V1.0",1d)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",1e)':{tag:'(0029,"Silhouette V1.0",1e)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",21)':{tag:'(0029,"Silhouette V1.0",21)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",22)':{tag:'(0029,"Silhouette V1.0",22)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",23)':{tag:'(0029,"Silhouette V1.0",23)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",24)':{tag:'(0029,"Silhouette V1.0",24)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",25)':{tag:'(0029,"Silhouette V1.0",25)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",27)':{tag:'(0029,"Silhouette V1.0",27)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",28)':{tag:'(0029,"Silhouette V1.0",28)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",29)':{tag:'(0029,"Silhouette V1.0",29)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",30)':{tag:'(0029,"Silhouette V1.0",30)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",52)':{tag:'(0029,"Silhouette V1.0",52)',vr:"US",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",53)':{tag:'(0029,"Silhouette V1.0",53)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",54)':{tag:'(0029,"Silhouette V1.0",54)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",55)':{tag:'(0029,"Silhouette V1.0",55)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",56)':{tag:'(0029,"Silhouette V1.0",56)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0029,"Silhouette V1.0",57)':{tag:'(0029,"Silhouette V1.0",57)',vr:"UN",name:"Unknown",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",10)':{tag:'(0135,"SONOWAND AS",10)',vr:"LO",name:"UltrasoundScannerName",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",11)':{tag:'(0135,"SONOWAND AS",11)',vr:"LO",name:"TransducerSerial",vm:"1",version:"PrivateTag"},'(0135,"SONOWAND AS",12)':{tag:'(0135,"SONOWAND AS",12)',vr:"LO",name:"ProbeApplication",vm:"1",version:"PrivateTag"},'(0017,"SVISION",00)':{tag:'(0017,"SVISION",00)',vr:"LO",name:"ExtendedBodyPart",vm:"1",version:"PrivateTag"},'(0017,"SVISION",10)':{tag:'(0017,"SVISION",10)',vr:"LO",name:"ExtendedViewPosition",vm:"1",version:"PrivateTag"},'(0017,"SVISION",F0)':{tag:'(0017,"SVISION",F0)',vr:"IS",name:"ImagesSOPClass",vm:"1",version:"PrivateTag"},'(0019,"SVISION",00)':{tag:'(0019,"SVISION",00)',vr:"IS",name:"AECField",vm:"1",version:"PrivateTag"},'(0019,"SVISION",01)':{tag:'(0019,"SVISION",01)',vr:"IS",name:"AECFilmScreen",vm:"1",version:"PrivateTag"},'(0019,"SVISION",02)':{tag:'(0019,"SVISION",02)',vr:"IS",name:"AECDensity",vm:"1",version:"PrivateTag"},'(0019,"SVISION",10)':{tag:'(0019,"SVISION",10)',vr:"IS",name:"PatientThickness",vm:"1",version:"PrivateTag"},'(0019,"SVISION",18)':{tag:'(0019,"SVISION",18)',vr:"IS",name:"BeamDistance",vm:"1",version:"PrivateTag"},'(0019,"SVISION",20)':{tag:'(0019,"SVISION",20)',vr:"IS",name:"WorkstationNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",28)':{tag:'(0019,"SVISION",28)',vr:"IS",name:"TubeNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",30)':{tag:'(0019,"SVISION",30)',vr:"IS",name:"BuckyGrid",vm:"1",version:"PrivateTag"},'(0019,"SVISION",34)':{tag:'(0019,"SVISION",34)',vr:"IS",name:"Focus",vm:"1",version:"PrivateTag"},'(0019,"SVISION",38)':{tag:'(0019,"SVISION",38)',vr:"IS",name:"Child",vm:"1",version:"PrivateTag"},'(0019,"SVISION",40)':{tag:'(0019,"SVISION",40)',vr:"IS",name:"CollimatorDistanceX",vm:"1",version:"PrivateTag"},'(0019,"SVISION",41)':{tag:'(0019,"SVISION",41)',vr:"IS",name:"CollimatorDistanceY",vm:"1",version:"PrivateTag"},'(0019,"SVISION",50)':{tag:'(0019,"SVISION",50)',vr:"IS",name:"CentralBeamHeight",vm:"1",version:"PrivateTag"},'(0019,"SVISION",60)':{tag:'(0019,"SVISION",60)',vr:"IS",name:"BuckyAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",68)':{tag:'(0019,"SVISION",68)',vr:"IS",name:"CArmAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",69)':{tag:'(0019,"SVISION",69)',vr:"IS",name:"CollimatorAngle",vm:"1",version:"PrivateTag"},'(0019,"SVISION",70)':{tag:'(0019,"SVISION",70)',vr:"IS",name:"FilterNumber",vm:"1",version:"PrivateTag"},'(0019,"SVISION",74)':{tag:'(0019,"SVISION",74)',vr:"LO",name:"FilterMaterial1",vm:"1",version:"PrivateTag"},'(0019,"SVISION",75)':{tag:'(0019,"SVISION",75)',vr:"LO",name:"FilterMaterial2",vm:"1",version:"PrivateTag"},'(0019,"SVISION",78)':{tag:'(0019,"SVISION",78)',vr:"DS",name:"FilterThickness1",vm:"1",version:"PrivateTag"},'(0019,"SVISION",79)':{tag:'(0019,"SVISION",79)',vr:"DS",name:"FilterThickness2",vm:"1",version:"PrivateTag"},'(0019,"SVISION",80)':{tag:'(0019,"SVISION",80)',vr:"IS",name:"BuckyFormat",vm:"1",version:"PrivateTag"},'(0019,"SVISION",81)':{tag:'(0019,"SVISION",81)',vr:"IS",name:"ObjectPosition",vm:"1",version:"PrivateTag"},'(0019,"SVISION",90)':{tag:'(0019,"SVISION",90)',vr:"LO",name:"DeskCommand",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A0)':{tag:'(0019,"SVISION",A0)',vr:"DS",name:"ExtendedExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A1)':{tag:'(0019,"SVISION",A1)',vr:"DS",name:"ActualExposureTime",vm:"1",version:"PrivateTag"},'(0019,"SVISION",A8)':{tag:'(0019,"SVISION",A8)',vr:"DS",name:"ExtendedXRayTubeCurrent",vm:"1",version:"PrivateTag"},'(0021,"SVISION",00)':{tag:'(0021,"SVISION",00)',vr:"DS",name:"NoiseReduction",vm:"1",version:"PrivateTag"},'(0021,"SVISION",01)':{tag:'(0021,"SVISION",01)',vr:"DS",name:"ContrastAmplification",vm:"1",version:"PrivateTag"},'(0021,"SVISION",02)':{tag:'(0021,"SVISION",02)',vr:"DS",name:"EdgeContrastBoosting",vm:"1",version:"PrivateTag"},'(0021,"SVISION",03)':{tag:'(0021,"SVISION",03)',vr:"DS",name:"LatitudeReduction",vm:"1",version:"PrivateTag"},'(0021,"SVISION",10)':{tag:'(0021,"SVISION",10)',vr:"LO",name:"FindRangeAlgorithm",vm:"1",version:"PrivateTag"},'(0021,"SVISION",11)':{tag:'(0021,"SVISION",11)',vr:"DS",name:"ThresholdCAlgorithm",vm:"1",version:"PrivateTag"},'(0021,"SVISION",20)':{tag:'(0021,"SVISION",20)',vr:"LO",name:"SensometricCurve",vm:"1",version:"PrivateTag"},'(0021,"SVISION",30)':{tag:'(0021,"SVISION",30)',vr:"DS",name:"LowerWindowOffset",vm:"1",version:"PrivateTag"},'(0021,"SVISION",31)':{tag:'(0021,"SVISION",31)',vr:"DS",name:"UpperWindowOffset",vm:"1",version:"PrivateTag"},'(0021,"SVISION",40)':{tag:'(0021,"SVISION",40)',vr:"DS",name:"MinPrintableDensity",vm:"1",version:"PrivateTag"},'(0021,"SVISION",41)':{tag:'(0021,"SVISION",41)',vr:"DS",name:"MaxPrintableDensity",vm:"1",version:"PrivateTag"},'(0021,"SVISION",90)':{tag:'(0021,"SVISION",90)',vr:"DS",name:"Brightness",vm:"1",version:"PrivateTag"},'(0021,"SVISION",91)':{tag:'(0021,"SVISION",91)',vr:"DS",name:"Contrast",vm:"1",version:"PrivateTag"},'(0021,"SVISION",92)':{tag:'(0021,"SVISION",92)',vr:"DS",name:"ShapeFactor",vm:"1",version:"PrivateTag"},'(0023,"SVISION",00)':{tag:'(0023,"SVISION",00)',vr:"LO",name:"ImageLaterality",vm:"1",version:"PrivateTag"},'(0023,"SVISION",01)':{tag:'(0023,"SVISION",01)',vr:"IS",name:"LetterPosition",vm:"1",version:"PrivateTag"},'(0023,"SVISION",02)':{tag:'(0023,"SVISION",02)',vr:"IS",name:"BurnedInAnnotation",vm:"1",version:"PrivateTag"},'(0023,"SVISION",03)':{tag:'(0023,"SVISION",03)',vr:"LO",name:"Unknown",vm:"1",version:"PrivateTag"},'(0023,"SVISION",F0)':{tag:'(0023,"SVISION",F0)',vr:"IS",name:"ImageSOPClass",vm:"1",version:"PrivateTag"},'(0025,"SVISION",00)':{tag:'(0025,"SVISION",00)',vr:"IS",name:"OriginalImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",01)':{tag:'(0025,"SVISION",01)',vr:"IS",name:"NotProcessedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",02)':{tag:'(0025,"SVISION",02)',vr:"IS",name:"CutOutImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",03)':{tag:'(0025,"SVISION",03)',vr:"IS",name:"DuplicatedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",04)':{tag:'(0025,"SVISION",04)',vr:"IS",name:"StoredImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",05)':{tag:'(0025,"SVISION",05)',vr:"IS",name:"RetrievedImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",06)':{tag:'(0025,"SVISION",06)',vr:"IS",name:"RemoteImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",07)':{tag:'(0025,"SVISION",07)',vr:"IS",name:"MediaStoredImage",vm:"1",version:"PrivateTag"},'(0025,"SVISION",08)':{tag:'(0025,"SVISION",08)',vr:"IS",name:"ImageState",vm:"1",version:"PrivateTag"},'(0025,"SVISION",20)':{tag:'(0025,"SVISION",20)',vr:"LO",name:"SourceImageFile",vm:"1",version:"PrivateTag"},'(0025,"SVISION",21)':{tag:'(0025,"SVISION",21)',vr:"UI",name:"Unknown",vm:"1",version:"PrivateTag"},'(0027,"SVISION",00)':{tag:'(0027,"SVISION",00)',vr:"IS",name:"NumberOfSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",01)':{tag:'(0027,"SVISION",01)',vr:"IS",name:"NumberOfStudies",vm:"1",version:"PrivateTag"},'(0027,"SVISION",10)':{tag:'(0027,"SVISION",10)',vr:"DT",name:"OldestSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",11)':{tag:'(0027,"SVISION",11)',vr:"DT",name:"NewestSeries",vm:"1",version:"PrivateTag"},'(0027,"SVISION",12)':{tag:'(0027,"SVISION",12)',vr:"DT",name:"OldestStudy",vm:"1",version:"PrivateTag"},'(0027,"SVISION",13)':{tag:'(0027,"SVISION",13)',vr:"DT",name:"NewestStudy",vm:"1",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",01)':{tag:'(0009,"TOSHIBA_MEC_1.0",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",02)':{tag:'(0009,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",03)':{tag:'(0009,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0009,"TOSHIBA_MEC_1.0",04)':{tag:'(0009,"TOSHIBA_MEC_1.0",04)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0011,"TOSHIBA_MEC_1.0",01)':{tag:'(0011,"TOSHIBA_MEC_1.0",01)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0011,"TOSHIBA_MEC_1.0",02)':{tag:'(0011,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_1.0",01)':{tag:'(0019,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_1.0",02)':{tag:'(0019,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",01)':{tag:'(0021,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",02)':{tag:'(0021,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0021,"TOSHIBA_MEC_1.0",03)':{tag:'(0021,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",01)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",02)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",03)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_1.0",10)':{tag:'(7ff1,"TOSHIBA_MEC_1.0",10)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",01)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",01)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",02)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",02)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",03)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",03)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",04)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",04)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",05)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",05)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",06)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",06)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",07)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",07)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",08)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",08)',vr:"LT",name:"OrientationHeadFeet",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",09)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",09)',vr:"LT",name:"ViewDirection",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0a)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0a)',vr:"LT",name:"OrientationSupineProne",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0b)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0b)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0c)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0d)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0d)',vr:"TM",name:"Time",vm:"1",version:"PrivateTag"},'(0019,"TOSHIBA_MEC_CT_1.0",0e)':{tag:'(0019,"TOSHIBA_MEC_CT_1.0",0e)',vr:"DS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",01)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",01)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",02)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",02)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",03)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",03)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",04)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",04)',vr:"IS",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",05)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",05)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",07)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",07)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",08)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",08)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",09)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",09)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0a)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0a)',vr:"LT",name:"Unknown",vm:"1",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0b)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0b)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0c)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0c)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"},'(7ff1,"TOSHIBA_MEC_CT_1.0",0d)':{tag:'(7ff1,"TOSHIBA_MEC_CT_1.0",0d)',vr:"US",name:"Unknown",vm:"1-n",version:"PrivateTag"}};
+
+ var handler = {
+ /**
+ * Get a proxied value from the array or property value
+ * Note that the property value get works even if you update the underlying object.
+ * Also, return true of proxy.__isProxy in order to distinguish proxies and not double proxy them.
+ */
+ get: function get(target, prop) {
+ if (prop == "__isProxy") return true;
+ if (prop in target) return target[prop];
+ return target[0][prop];
+ },
+ set: function set(obj, prop, value) {
+ if (typeof prop === "number") {
+ obj[prop] = value;
+ } else if (prop in obj) {
+ obj[prop] = value;
+ } else {
+ obj[0][prop] = value;
+ }
+
+ return true;
+ }
+ };
+ /**
+ * Add a proxy object for sqZero or the src[0] element if sqZero is unspecified, AND
+ * src is an array of length 1.
+ *
+ * If sqZero isn't passed in, then assume this is a create call on the destination object
+ * itself, by:
+ * 1. If not an object, return dest
+ * 2. If an array of length != 1, return dest
+ * 3. If an array, use dest[0] as sqZero
+ * 4. Use dest as sqZero
+ *
+ * @example
+ * src = [{a:5,b:'string', c:null}]
+ * addAccessors(src)
+ * src.c = 'outerChange'
+ * src[0].b='innerChange'
+ *
+ * assert src.a===5
+ * assert src[0].c === 'outerChange'
+ * assert src.b === 'innerChange'
+ */
+
+ var addAccessors = function addAccessors(dest, sqZero) {
+ if (dest.__isProxy) return dest;
+ var itemZero = sqZero;
+
+ if (itemZero === undefined) {
+ if (_typeof(dest) !== "object") return dest;
+ if (Array.isArray(dest) && dest.length !== 1) return dest;
+ itemZero = Array.isArray(dest) ? dest[0] : dest;
+ }
+
+ var ret = [itemZero];
+ return new Proxy(ret, handler);
+ };
+
+ function paddingLeft(paddingValue, string) {
+ return String(paddingValue + string).slice(-paddingValue.length);
+ }
+
+ var Tag = /*#__PURE__*/function () {
+ function Tag(value) {
+ _classCallCheck(this, Tag);
+
+ this.value = value;
+ }
+
+ _createClass(Tag, [{
+ key: "toString",
+ value: function toString() {
+ return "(" + paddingLeft("0000", this.group().toString(16).toUpperCase()) + "," + paddingLeft("0000", this.element().toString(16).toUpperCase()) + ")";
+ }
+ }, {
+ key: "toCleanString",
+ value: function toCleanString() {
+ return paddingLeft("0000", this.group().toString(16).toUpperCase()) + paddingLeft("0000", this.element().toString(16).toUpperCase());
+ }
+ }, {
+ key: "is",
+ value: function is(t) {
+ return this.value == t;
+ }
+ }, {
+ key: "group",
+ value: function group() {
+ return this.value >>> 16;
+ }
+ }, {
+ key: "element",
+ value: function element() {
+ return this.value & 0xffff;
+ }
+ }, {
+ key: "isPixelDataTag",
+ value: function isPixelDataTag() {
+ return this.is(0x7fe00010);
+ }
+ }, {
+ key: "isPrivateCreator",
+ value: function isPrivateCreator() {
+ var group = this.group();
+ var element = this.element();
+ return group % 2 === 1 && element < 0x100 && element > 0x00;
+ }
+ }, {
+ key: "write",
+ value: function write(stream, vrType, values, syntax, writeOptions) {
+ var vr = ValueRepresentation.createByTypeString(vrType),
+ useSyntax = DicomMessage._normalizeSyntax(syntax);
+
+ var implicit = useSyntax == IMPLICIT_LITTLE_ENDIAN ? true : false,
+ isLittleEndian = useSyntax == IMPLICIT_LITTLE_ENDIAN || useSyntax == EXPLICIT_LITTLE_ENDIAN$1 ? true : false,
+ isEncapsulated = this.isPixelDataTag() && DicomMessage.isEncapsulated(syntax);
+ var oldEndian = stream.isLittleEndian;
+ stream.setEndian(isLittleEndian);
+ stream.writeUint16(this.group());
+ stream.writeUint16(this.element());
+ var tagStream = new WriteBufferStream(256),
+ valueLength;
+ tagStream.setEndian(isLittleEndian);
+
+ if (vrType == "OW" || vrType == "OB" || vrType == "UN") {
+ valueLength = vr.writeBytes(tagStream, values, useSyntax, isEncapsulated, writeOptions);
+ } else if (vrType == "SQ") {
+ valueLength = vr.writeBytes(tagStream, values, useSyntax, writeOptions);
+ } else {
+ valueLength = vr.writeBytes(tagStream, values, writeOptions);
+ }
+
+ if (vrType == "SQ") {
+ valueLength = 0xffffffff;
+ }
+
+ var written = tagStream.size + 4;
+
+ if (implicit) {
+ stream.writeUint32(valueLength);
+ written += 4;
+ } else {
+ if (vr.isExplicit()) {
+ stream.writeAsciiString(vr.type);
+ stream.writeUint16(0);
+ stream.writeUint32(valueLength);
+ written += 8;
+ } else {
+ stream.writeAsciiString(vr.type);
+ stream.writeUint16(valueLength);
+ written += 4;
+ }
+ }
+
+ stream.concat(tagStream);
+ stream.setEndian(oldEndian);
+ return written;
+ }
+ }], [{
+ key: "fromString",
+ value: function fromString(str) {
+ var group = parseInt(str.substring(0, 4), 16),
+ element = parseInt(str.substring(4), 16);
+ return Tag.fromNumbers(group, element);
+ }
+ }, {
+ key: "fromPString",
+ value: function fromPString(str) {
+ var group = parseInt(str.substring(1, 5), 16),
+ element = parseInt(str.substring(6, 10), 16);
+ return Tag.fromNumbers(group, element);
+ }
+ }, {
+ key: "fromNumbers",
+ value: function fromNumbers(group, element) {
+ return new Tag((group << 16 | element) >>> 0);
+ }
+ }, {
+ key: "readTag",
+ value: function readTag(stream) {
+ var group = stream.readUint16(),
+ element = stream.readUint16();
+ return Tag.fromNumbers(group, element);
+ }
+ }]);
+
+ return Tag;
+ }();
+
+ function rtrim(str) {
+ return str.replace(/\s*$/g, "");
+ }
+
+ function toWindows(inputArray, size) {
+ return Array.from({
+ length: inputArray.length - (size - 1)
+ }, //get the appropriate length
+ function (_, index) {
+ return inputArray.slice(index, index + size);
+ } //create the windows
+ );
+ }
+
+ var binaryVRs = ["FL", "FD", "SL", "SS", "UL", "US", "AT"],
+ explicitVRs = ["OB", "OW", "OF", "SQ", "UC", "UR", "UT", "UN"],
+ singleVRs$1 = ["SQ", "OF", "OW", "OB", "UN"];
+
+ var ValueRepresentation = /*#__PURE__*/function () {
+ function ValueRepresentation(type) {
+ _classCallCheck(this, ValueRepresentation);
+
+ this.type = type;
+ this.multi = false;
+ this._isBinary = binaryVRs.indexOf(this.type) != -1;
+ this._allowMultiple = !this._isBinary && singleVRs$1.indexOf(this.type) == -1;
+ this._isExplicit = explicitVRs.indexOf(this.type) != -1;
+ }
+
+ _createClass(ValueRepresentation, [{
+ key: "isBinary",
+ value: function isBinary() {
+ return this._isBinary;
+ }
+ }, {
+ key: "allowMultiple",
+ value: function allowMultiple() {
+ return this._allowMultiple;
+ }
+ }, {
+ key: "isExplicit",
+ value: function isExplicit() {
+ return this._isExplicit;
+ }
+ }, {
+ key: "read",
+ value: function read(stream, length, syntax) {
+ if (this.fixed && this.maxLength) {
+ if (!length) return this.defaultValue;
+ if (this.maxLength != length) log.error("Invalid length for fixed length tag, vr " + this.type + ", length " + this.maxLength + " != " + length);
+ }
+
+ return this.readBytes(stream, length, syntax);
+ }
+ }, {
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return stream.readAsciiString(length);
+ }
+ }, {
+ key: "readNullPaddedString",
+ value: function readNullPaddedString(stream, length) {
+ if (!length) return "";
+
+ if (stream.peekUint8(length - 1) !== 0) {
+ return stream.readAsciiString(length);
+ } else {
+ var val = stream.readAsciiString(length - 1);
+ stream.increment(1);
+ return val;
+ }
+ }
+ }, {
+ key: "write",
+ value: function write(stream, type) {
+ var args = Array.from(arguments);
+
+ if (args[2] === null || args[2] === "" || args[2] === undefined) {
+ return [stream.writeAsciiString("")];
+ } else {
+ var written = [],
+ valueArgs = args.slice(2),
+ func = stream["write" + type];
+
+ if (Array.isArray(valueArgs[0])) {
+ if (valueArgs[0].length < 1) {
+ written.push(0);
+ } else {
+ var self = this;
+ valueArgs[0].forEach(function (v, k) {
+ if (self.allowMultiple() && k > 0) {
+ stream.writeUint8(0x5c);
+ }
+
+ var singularArgs = [v].concat(valueArgs.slice(1));
+ var byteCount = func.apply(stream, singularArgs);
+ written.push(byteCount);
+ });
+ }
+ } else {
+ written.push(func.apply(stream, valueArgs));
+ }
+
+ return written;
+ }
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, lengths) {
+ var writeOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {
+ allowInvalidVRLength: false
+ };
+ var allowInvalidVRLength = writeOptions.allowInvalidVRLength;
+ var valid = true,
+ valarr = Array.isArray(value) ? value : [value],
+ total = 0;
+
+ for (var i = 0; i < valarr.length; i++) {
+ var checkValue = valarr[i],
+ checklen = lengths[i],
+ isString = false,
+ displaylen = checklen;
+
+ if (checkValue === null || allowInvalidVRLength) {
+ valid = true;
+ } else if (this.checkLength) {
+ valid = this.checkLength(checkValue);
+ } else if (this.maxCharLength) {
+ var check = this.maxCharLength; //, checklen = checkValue.length;
+
+ valid = checkValue.length <= check;
+ displaylen = checkValue.length;
+ isString = true;
+ } else if (this.maxLength) {
+ valid = checklen <= this.maxLength;
+ }
+
+ if (!valid) {
+ var errmsg = "Value exceeds max length, vr: " + this.type + ", value: " + checkValue + ", length: " + displaylen;
+ if (isString) log.log(errmsg);else throw new Error(errmsg);
+ }
+
+ total += checklen;
+ }
+
+ if (this.allowMultiple()) {
+ total += valarr.length ? valarr.length - 1 : 0;
+ } //check for odd
+
+
+ var written = total;
+
+ if (total & 1) {
+ stream.writeUint8(this.padByte);
+ written++;
+ }
+
+ return written;
+ }
+ }], [{
+ key: "createByTypeString",
+ value: function createByTypeString(type) {
+ var vr = VRinstances[type];
+
+ if (vr === undefined) {
+ if (type == "ox") {
+ // TODO: determine VR based on context (could be 1 byte pixel data)
+ // https://github.com/dgobbi/vtk-dicom/issues/38
+ validationLog.error("Invalid vr type", type, "- using OW");
+ vr = VRinstances["OW"];
+ } else if (type == "xs") {
+ validationLog.error("Invalid vr type", type, "- using US");
+ vr = VRinstances["US"];
+ } else {
+ validationLog.error("Invalid vr type", type, "- using UN");
+ vr = VRinstances["UN"];
+ }
+ }
+
+ return vr;
+ }
+ }]);
+
+ return ValueRepresentation;
+ }();
+
+ var AsciiStringRepresentation = /*#__PURE__*/function (_ValueRepresentation) {
+ _inherits(AsciiStringRepresentation, _ValueRepresentation);
+
+ var _super = _createSuper(AsciiStringRepresentation);
+
+ function AsciiStringRepresentation(type) {
+ _classCallCheck(this, AsciiStringRepresentation);
+
+ return _super.call(this, type);
+ }
+
+ _createClass(AsciiStringRepresentation, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return stream.readAsciiString(length);
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ var written = _get(_getPrototypeOf(AsciiStringRepresentation.prototype), "write", this).call(this, stream, "AsciiString", value);
+
+ return _get(_getPrototypeOf(AsciiStringRepresentation.prototype), "writeBytes", this).call(this, stream, value, written, writeOptions);
+ }
+ }]);
+
+ return AsciiStringRepresentation;
+ }(ValueRepresentation);
+
+ var EncodedStringRepresentation = /*#__PURE__*/function (_ValueRepresentation2) {
+ _inherits(EncodedStringRepresentation, _ValueRepresentation2);
+
+ var _super2 = _createSuper(EncodedStringRepresentation);
+
+ function EncodedStringRepresentation(type) {
+ _classCallCheck(this, EncodedStringRepresentation);
+
+ return _super2.call(this, type);
+ }
+
+ _createClass(EncodedStringRepresentation, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return stream.readEncodedString(length);
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ var written = _get(_getPrototypeOf(EncodedStringRepresentation.prototype), "write", this).call(this, stream, "UTF8String", value);
+
+ return _get(_getPrototypeOf(EncodedStringRepresentation.prototype), "writeBytes", this).call(this, stream, value, written, writeOptions);
+ }
+ }]);
+
+ return EncodedStringRepresentation;
+ }(ValueRepresentation);
+
+ var BinaryRepresentation = /*#__PURE__*/function (_ValueRepresentation3) {
+ _inherits(BinaryRepresentation, _ValueRepresentation3);
+
+ var _super3 = _createSuper(BinaryRepresentation);
+
+ function BinaryRepresentation(type) {
+ _classCallCheck(this, BinaryRepresentation);
+
+ return _super3.call(this, type);
+ }
+
+ _createClass(BinaryRepresentation, [{
+ key: "writeBytes",
+ value: function writeBytes(stream, value, syntax, isEncapsulated) {
+ var writeOptions = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
+ var i;
+ var binaryStream;
+ var _writeOptions$fragmen = writeOptions.fragmentMultiframe,
+ fragmentMultiframe = _writeOptions$fragmen === void 0 ? true : _writeOptions$fragmen;
+ value = value === null || value === undefined ? [] : value;
+
+ if (isEncapsulated) {
+ var fragmentSize = 1024 * 20,
+ frames = value.length,
+ startOffset = []; // Calculate a total length for storing binary stream
+
+ var bufferLength = 0;
+
+ for (i = 0; i < frames; i++) {
+ var needsPadding = Boolean(value[i].byteLength & 1);
+ bufferLength += value[i].byteLength + (needsPadding ? 1 : 0);
+ var _fragmentsLength = 1;
+
+ if (fragmentMultiframe) {
+ _fragmentsLength = Math.ceil(value[i].byteLength / fragmentSize);
+ } // 8 bytes per fragment are needed to store 0xffff (2 bytes), 0xe000 (2 bytes), and frageStream size (4 bytes)
+
+
+ bufferLength += _fragmentsLength * 8;
+ }
+
+ binaryStream = new WriteBufferStream(bufferLength, stream.isLittleEndian);
+
+ for (i = 0; i < frames; i++) {
+ var _needsPadding = Boolean(value[i].byteLength & 1);
+
+ startOffset.push(binaryStream.size);
+ var frameBuffer = value[i],
+ frameStream = new ReadBufferStream(frameBuffer);
+ var fragmentsLength = 1;
+
+ if (fragmentMultiframe) {
+ fragmentsLength = Math.ceil(frameStream.size / fragmentSize);
+ }
+
+ for (var j = 0, fragmentStart = 0; j < fragmentsLength; j++) {
+ var isFinalFragment = j === fragmentsLength - 1;
+ var fragmentEnd = fragmentStart + frameStream.size;
+
+ if (fragmentMultiframe) {
+ fragmentEnd = fragmentStart + fragmentSize;
+ }
+
+ if (isFinalFragment) {
+ fragmentEnd = frameStream.size;
+ }
+
+ var fragStream = new ReadBufferStream(frameStream.getBuffer(fragmentStart, fragmentEnd));
+ fragmentStart = fragmentEnd;
+ binaryStream.writeUint16(0xfffe);
+ binaryStream.writeUint16(0xe000);
+ var addPaddingByte = isFinalFragment && _needsPadding;
+ binaryStream.writeUint32(fragStream.size + (addPaddingByte ? 1 : 0));
+ binaryStream.concat(fragStream);
+
+ if (addPaddingByte) {
+ binaryStream.writeInt8(this.padByte);
+ }
+ }
+ }
+
+ stream.writeUint16(0xfffe);
+ stream.writeUint16(0xe000);
+ stream.writeUint32(startOffset.length * 4);
+
+ for (i = 0; i < startOffset.length; i++) {
+ stream.writeUint32(startOffset[i]);
+ }
+
+ stream.concat(binaryStream);
+ stream.writeUint16(0xfffe);
+ stream.writeUint16(0xe0dd);
+ stream.writeUint32(0x0);
+ return 0xffffffff;
+ } else {
+ var binaryData = value[0];
+ binaryStream = new ReadBufferStream(binaryData);
+ stream.concat(binaryStream);
+ return _get(_getPrototypeOf(BinaryRepresentation.prototype), "writeBytes", this).call(this, stream, binaryData, [binaryStream.size], writeOptions);
+ }
+ }
+ }, {
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ if (length == 0xffffffff) {
+ var itemTagValue = Tag.readTag(stream),
+ frames = [];
+
+ if (itemTagValue.is(0xfffee000)) {
+ var itemLength = stream.readUint32(),
+ numOfFrames = 1,
+ offsets = [];
+
+ if (itemLength > 0x0) {
+ //has frames
+ numOfFrames = itemLength / 4;
+ var i = 0;
+
+ while (i++ < numOfFrames) {
+ offsets.push(stream.readUint32());
+ }
+ } else {
+ offsets = [];
+ }
+
+ var SequenceItemTag = 0xfffee000;
+ var SequenceDelimiterTag = 0xfffee0dd;
+
+ var getNextSequenceItemData = function getNextSequenceItemData(stream) {
+ var nextTag = Tag.readTag(stream);
+
+ if (nextTag.is(SequenceItemTag)) {
+ var _itemLength = stream.readUint32();
+
+ var buffer = stream.getBuffer(stream.offset, stream.offset + _itemLength);
+ stream.increment(_itemLength);
+ return buffer;
+ } else if (nextTag.is(SequenceDelimiterTag)) {
+ // Read SequenceDelimiterItem value for the SequenceDelimiterTag
+ if (stream.readUint32() !== 0) {
+ throw Error("SequenceDelimiterItem tag value was not zero");
+ }
+
+ return null;
+ }
+
+ throw Error("Invalid tag in sequence");
+ }; // If there is an offset table, use that to loop through pixel data sequence
+
+
+ if (offsets.length > 0) {
+ // make offsets relative to the stream, not tag
+ offsets = offsets.map(function (e) {
+ return e + stream.offset;
+ });
+ offsets.push(stream.size); // window offsets to an array of [start,stop] locations
+
+ frames = toWindows(offsets, 2).map(function (range) {
+ var fragments = [];
+
+ var _range = _slicedToArray(range, 2),
+ start = _range[0],
+ stop = _range[1]; // create a new readable stream based on the range
+
+
+ var rangeStream = new ReadBufferStream(stream.buffer, stream.isLittleEndian, {
+ start: start,
+ stop: stop,
+ noCopy: stream.noCopy
+ });
+ var frameSize = 0;
+
+ while (!rangeStream.end()) {
+ var buf = getNextSequenceItemData(rangeStream);
+
+ if (buf === null) {
+ break;
+ }
+
+ fragments.push(buf);
+ frameSize += buf.byteLength;
+ } // Ensure the parent stream's offset is kept up to date
+
+
+ stream.offset = rangeStream.offset; // If there's only one buffer thne just return it directly
+
+ if (fragments.length === 1) {
+ return fragments[0];
+ }
+
+ if (rangeStream.noCopy) {
+ // return the fragments for downstream application to process
+ return fragments;
+ } else {
+ // Allocate a final ArrayBuffer and concat all buffers into it
+ var mergedFrame = new ArrayBuffer(frameSize);
+ var u8Data = new Uint8Array(mergedFrame);
+ fragments.reduce(function (offset, buffer) {
+ u8Data.set(new Uint8Array(buffer), offset);
+ return offset + buffer.byteLength;
+ }, 0);
+ return mergedFrame;
+ }
+ });
+ } // If no offset table, loop through remainder of stream looking for termination tag
+ else {
+ while (!stream.end()) {
+ var buffer = getNextSequenceItemData(stream);
+
+ if (buffer === null) {
+ break;
+ }
+
+ frames.push(buffer);
+ }
+ }
+ } else {
+ throw new Error("Item tag not found after undefined binary length");
+ }
+
+ return frames;
+ } else {
+ var bytes;
+ /*if (this.type == 'OW') {
+ bytes = stream.readUint16Array(length);
+ } else if (this.type == 'OB') {
+ bytes = stream.readUint8Array(length);
+ }*/
+
+ bytes = stream.getBuffer(stream.offset, stream.offset + length);
+ stream.increment(length);
+ return [bytes];
+ }
+ }
+ }]);
+
+ return BinaryRepresentation;
+ }(ValueRepresentation);
+
+ var ApplicationEntity = /*#__PURE__*/function (_AsciiStringRepresent) {
+ _inherits(ApplicationEntity, _AsciiStringRepresent);
+
+ var _super4 = _createSuper(ApplicationEntity);
+
+ function ApplicationEntity() {
+ var _this;
+
+ _classCallCheck(this, ApplicationEntity);
+
+ _this = _super4.call(this, "AE");
+ _this.maxLength = 16;
+ _this.padByte = 0x20;
+ return _this;
+ }
+
+ _createClass(ApplicationEntity, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return stream.readAsciiString(length).trim();
+ }
+ }]);
+
+ return ApplicationEntity;
+ }(AsciiStringRepresentation);
+
+ var CodeString = /*#__PURE__*/function (_AsciiStringRepresent2) {
+ _inherits(CodeString, _AsciiStringRepresent2);
+
+ var _super5 = _createSuper(CodeString);
+
+ function CodeString() {
+ var _this2;
+
+ _classCallCheck(this, CodeString);
+
+ _this2 = _super5.call(this, "CS");
+ _this2.maxLength = 16;
+ _this2.padByte = 0x20;
+ return _this2;
+ }
+
+ _createClass(CodeString, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return stream.readAsciiString(length).trim();
+ }
+ }]);
+
+ return CodeString;
+ }(AsciiStringRepresentation);
+
+ var AgeString = /*#__PURE__*/function (_AsciiStringRepresent3) {
+ _inherits(AgeString, _AsciiStringRepresent3);
+
+ var _super6 = _createSuper(AgeString);
+
+ function AgeString() {
+ var _this3;
+
+ _classCallCheck(this, AgeString);
+
+ _this3 = _super6.call(this, "AS");
+ _this3.maxLength = 4;
+ _this3.padByte = 0x20;
+ _this3.fixed = true;
+ _this3.defaultValue = "";
+ return _this3;
+ }
+
+ return _createClass(AgeString);
+ }(AsciiStringRepresentation);
+
+ var AttributeTag = /*#__PURE__*/function (_ValueRepresentation4) {
+ _inherits(AttributeTag, _ValueRepresentation4);
+
+ var _super7 = _createSuper(AttributeTag);
+
+ function AttributeTag() {
+ var _this4;
+
+ _classCallCheck(this, AttributeTag);
+
+ _this4 = _super7.call(this, "AT");
+ _this4.maxLength = 4;
+ _this4.valueLength = 4;
+ _this4.padByte = 0;
+ _this4.fixed = true;
+ return _this4;
+ }
+
+ _createClass(AttributeTag, [{
+ key: "readBytes",
+ value: function readBytes(stream) {
+ return Tag.readTag(stream).value;
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ return _get(_getPrototypeOf(AttributeTag.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(AttributeTag.prototype), "write", this).call(this, stream, "TwoUint16s", value), writeOptions);
+ }
+ }]);
+
+ return AttributeTag;
+ }(ValueRepresentation);
+
+ var DateValue = /*#__PURE__*/function (_AsciiStringRepresent4) {
+ _inherits(DateValue, _AsciiStringRepresent4);
+
+ var _super8 = _createSuper(DateValue);
+
+ function DateValue(value) {
+ var _this5;
+
+ _classCallCheck(this, DateValue);
+
+ _this5 = _super8.call(this, "DA", value);
+ _this5.maxLength = 18;
+ _this5.padByte = 0x20; //this.fixed = true;
+
+ _this5.defaultValue = "";
+ return _this5;
+ }
+
+ return _createClass(DateValue);
+ }(AsciiStringRepresentation);
+
+ var DecimalString = /*#__PURE__*/function (_AsciiStringRepresent5) {
+ _inherits(DecimalString, _AsciiStringRepresent5);
+
+ var _super9 = _createSuper(DecimalString);
+
+ function DecimalString() {
+ var _this6;
+
+ _classCallCheck(this, DecimalString);
+
+ _this6 = _super9.call(this, "DS");
+ _this6.maxLength = 16;
+ _this6.padByte = 0x20;
+ return _this6;
+ }
+
+ _createClass(DecimalString, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ var BACKSLASH = String.fromCharCode(0x5c);
+ var ds = stream.readAsciiString(length);
+ ds = ds.replace(/[^0-9.\\\-+e]/gi, "");
+
+ if (ds.indexOf(BACKSLASH) !== -1) {
+ // handle decimal string with multiplicity
+ var dsArray = ds.split(BACKSLASH);
+ ds = dsArray.map(function (ds) {
+ return ds === "" ? null : Number(ds);
+ });
+ } else {
+ ds = [ds === "" ? null : Number(ds)];
+ }
+
+ return ds;
+ }
+ }, {
+ key: "formatValue",
+ value: function formatValue(value) {
+ if (value === null) {
+ return "";
+ }
+
+ var str = String(value);
+
+ if (str.length > this.maxLength) {
+ return value.toExponential();
+ }
+
+ return str;
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ var _this7 = this;
+
+ var val = Array.isArray(value) ? value.map(function (ds) {
+ return _this7.formatValue(ds);
+ }) : [this.formatValue(value)];
+ return _get(_getPrototypeOf(DecimalString.prototype), "writeBytes", this).call(this, stream, val, writeOptions);
+ }
+ }]);
+
+ return DecimalString;
+ }(AsciiStringRepresentation);
+
+ var DateTime = /*#__PURE__*/function (_AsciiStringRepresent6) {
+ _inherits(DateTime, _AsciiStringRepresent6);
+
+ var _super10 = _createSuper(DateTime);
+
+ function DateTime() {
+ var _this8;
+
+ _classCallCheck(this, DateTime);
+
+ _this8 = _super10.call(this, "DT");
+ _this8.maxLength = 26;
+ _this8.padByte = 0x20;
+ return _this8;
+ }
+
+ return _createClass(DateTime);
+ }(AsciiStringRepresentation);
+
+ var FloatingPointSingle = /*#__PURE__*/function (_ValueRepresentation5) {
+ _inherits(FloatingPointSingle, _ValueRepresentation5);
+
+ var _super11 = _createSuper(FloatingPointSingle);
+
+ function FloatingPointSingle() {
+ var _this9;
+
+ _classCallCheck(this, FloatingPointSingle);
+
+ _this9 = _super11.call(this, "FL");
+ _this9.maxLength = 4;
+ _this9.padByte = 0;
+ _this9.fixed = true;
+ _this9.defaultValue = 0.0;
+ return _this9;
+ }
+
+ _createClass(FloatingPointSingle, [{
+ key: "readBytes",
+ value: function readBytes(stream) {
+ return Number(stream.readFloat());
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ return _get(_getPrototypeOf(FloatingPointSingle.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(FloatingPointSingle.prototype), "write", this).call(this, stream, "Float", value), writeOptions);
+ }
+ }]);
+
+ return FloatingPointSingle;
+ }(ValueRepresentation);
+
+ var FloatingPointDouble = /*#__PURE__*/function (_ValueRepresentation6) {
+ _inherits(FloatingPointDouble, _ValueRepresentation6);
+
+ var _super12 = _createSuper(FloatingPointDouble);
+
+ function FloatingPointDouble() {
+ var _this10;
+
+ _classCallCheck(this, FloatingPointDouble);
+
+ _this10 = _super12.call(this, "FD");
+ _this10.maxLength = 8;
+ _this10.padByte = 0;
+ _this10.fixed = true;
+ _this10.defaultValue = 0.0;
+ return _this10;
+ }
+
+ _createClass(FloatingPointDouble, [{
+ key: "readBytes",
+ value: function readBytes(stream) {
+ return Number(stream.readDouble());
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ return _get(_getPrototypeOf(FloatingPointDouble.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(FloatingPointDouble.prototype), "write", this).call(this, stream, "Double", value), writeOptions);
+ }
+ }]);
+
+ return FloatingPointDouble;
+ }(ValueRepresentation);
+
+ var IntegerString = /*#__PURE__*/function (_AsciiStringRepresent7) {
+ _inherits(IntegerString, _AsciiStringRepresent7);
+
+ var _super13 = _createSuper(IntegerString);
+
+ function IntegerString() {
+ var _this11;
+
+ _classCallCheck(this, IntegerString);
+
+ _this11 = _super13.call(this, "IS");
+ _this11.maxLength = 12;
+ _this11.padByte = 0x20;
+ return _this11;
+ }
+
+ _createClass(IntegerString, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ var BACKSLASH = String.fromCharCode(0x5c);
+ var is = stream.readAsciiString(length).trim();
+ is = is.replace(/[^0-9.\\\-+e]/gi, "");
+
+ if (is.indexOf(BACKSLASH) !== -1) {
+ // handle integer string with multiplicity
+ var integerStringArray = is.split(BACKSLASH);
+ is = integerStringArray.map(function (is) {
+ return is === "" ? null : Number(is);
+ });
+ } else {
+ is = [is === "" ? null : Number(is)];
+ }
+
+ return is;
+ }
+ }, {
+ key: "formatValue",
+ value: function formatValue(value) {
+ return value === null ? "" : String(value);
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ var _this12 = this;
+
+ var val = Array.isArray(value) ? value.map(function (is) {
+ return _this12.formatValue(is);
+ }) : [this.formatValue(value)];
+ return _get(_getPrototypeOf(IntegerString.prototype), "writeBytes", this).call(this, stream, val, writeOptions);
+ }
+ }]);
+
+ return IntegerString;
+ }(AsciiStringRepresentation);
+
+ var LongString = /*#__PURE__*/function (_EncodedStringReprese) {
+ _inherits(LongString, _EncodedStringReprese);
+
+ var _super14 = _createSuper(LongString);
+
+ function LongString() {
+ var _this13;
+
+ _classCallCheck(this, LongString);
+
+ _this13 = _super14.call(this, "LO");
+ _this13.maxCharLength = 64;
+ _this13.padByte = 0x20;
+ return _this13;
+ }
+
+ _createClass(LongString, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return stream.readEncodedString(length).trim();
+ }
+ }]);
+
+ return LongString;
+ }(EncodedStringRepresentation);
+
+ var LongText = /*#__PURE__*/function (_EncodedStringReprese2) {
+ _inherits(LongText, _EncodedStringReprese2);
+
+ var _super15 = _createSuper(LongText);
+
+ function LongText() {
+ var _this14;
+
+ _classCallCheck(this, LongText);
+
+ _this14 = _super15.call(this, "LT");
+ _this14.maxCharLength = 10240;
+ _this14.padByte = 0x20;
+ return _this14;
+ }
+
+ _createClass(LongText, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return rtrim(stream.readEncodedString(length));
+ }
+ }]);
+
+ return LongText;
+ }(EncodedStringRepresentation);
+
+ var PersonName = /*#__PURE__*/function (_EncodedStringReprese3) {
+ _inherits(PersonName, _EncodedStringReprese3);
+
+ var _super16 = _createSuper(PersonName);
+
+ function PersonName() {
+ var _this15;
+
+ _classCallCheck(this, PersonName);
+
+ _this15 = _super16.call(this, "PN");
+ _this15.maxLength = null;
+ _this15.padByte = 0x20;
+ return _this15;
+ }
+
+ _createClass(PersonName, [{
+ key: "checkLength",
+ value: function checkLength(value) {
+ var components = [];
+
+ if (_typeof(value) === "object" && value !== null) {
+ // In DICOM JSON, components are encoded as a mapping (object),
+ // where the keys are one or more of the following: "Alphabetic",
+ // "Ideographic", "Phonetic".
+ // http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_F.2.2.html
+ components = Object.keys(value).forEach(function (key) {
+ return value[key];
+ });
+ } else if (typeof value === "string" || value instanceof String) {
+ // In DICOM Part10, components are encoded as a string,
+ // where components ("Alphabetic", "Ideographic", "Phonetic")
+ // are separated by the "=" delimeter.
+ // http://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html
+ components = value.split(/\=/);
+ }
+
+ for (var i in components) {
+ var cmp = components[i];
+ if (cmp.length > 64) return false;
+ }
+
+ return true;
+ }
+ }, {
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return rtrim(stream.readEncodedString(length));
+ }
+ }]);
+
+ return PersonName;
+ }(EncodedStringRepresentation);
+
+ var ShortString = /*#__PURE__*/function (_EncodedStringReprese4) {
+ _inherits(ShortString, _EncodedStringReprese4);
+
+ var _super17 = _createSuper(ShortString);
+
+ function ShortString() {
+ var _this16;
+
+ _classCallCheck(this, ShortString);
+
+ _this16 = _super17.call(this, "SH");
+ _this16.maxCharLength = 16;
+ _this16.padByte = 0x20;
+ return _this16;
+ }
+
+ _createClass(ShortString, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return stream.readEncodedString(length).trim();
+ }
+ }]);
+
+ return ShortString;
+ }(EncodedStringRepresentation);
+
+ var SignedLong = /*#__PURE__*/function (_ValueRepresentation7) {
+ _inherits(SignedLong, _ValueRepresentation7);
+
+ var _super18 = _createSuper(SignedLong);
+
+ function SignedLong() {
+ var _this17;
+
+ _classCallCheck(this, SignedLong);
+
+ _this17 = _super18.call(this, "SL");
+ _this17.maxLength = 4;
+ _this17.padByte = 0;
+ _this17.fixed = true;
+ _this17.defaultValue = 0;
+ return _this17;
+ }
+
+ _createClass(SignedLong, [{
+ key: "readBytes",
+ value: function readBytes(stream) {
+ return stream.readInt32();
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ return _get(_getPrototypeOf(SignedLong.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(SignedLong.prototype), "write", this).call(this, stream, "Int32", value), writeOptions);
+ }
+ }]);
+
+ return SignedLong;
+ }(ValueRepresentation);
+
+ var SequenceOfItems = /*#__PURE__*/function (_ValueRepresentation8) {
+ _inherits(SequenceOfItems, _ValueRepresentation8);
+
+ var _super19 = _createSuper(SequenceOfItems);
+
+ function SequenceOfItems() {
+ var _this18;
+
+ _classCallCheck(this, SequenceOfItems);
+
+ _this18 = _super19.call(this, "SQ");
+ _this18.maxLength = null;
+ _this18.padByte = 0;
+ _this18.noMultiple = true;
+ return _this18;
+ }
+
+ _createClass(SequenceOfItems, [{
+ key: "readBytes",
+ value: function readBytes(stream, sqlength, syntax) {
+ if (sqlength == 0x0) {
+ return []; //contains no dataset
+ } else {
+ var undefLength = sqlength == 0xffffffff,
+ elements = [],
+ read = 0;
+ /* eslint-disable-next-line no-constant-condition */
+
+ while (true) {
+ var tag = Tag.readTag(stream),
+ length = null;
+ read += 4;
+
+ if (tag.is(0xfffee0dd)) {
+ stream.readUint32();
+ break;
+ } else if (!undefLength && read == sqlength) {
+ break;
+ } else if (tag.is(0xfffee000)) {
+ length = stream.readUint32();
+ read += 4;
+ var itemStream = null,
+ toRead = 0,
+ undef = length == 0xffffffff;
+
+ if (undef) {
+ var stack = 0;
+ /* eslint-disable-next-line no-constant-condition */
+
+ while (1) {
+ var g = stream.readUint16();
+
+ if (g == 0xfffe) {
+ // some control tag is about to be read
+ var ge = stream.readUint16();
+ var itemLength = stream.readUint32();
+ stream.increment(-4);
+
+ if (ge == 0xe00d) {
+ if (itemLength === 0) {
+ // item delimitation tag (0xfffee00d) + item length (0x00000000) has been read
+ stack--;
+
+ if (stack < 0) {
+ // if we are outside every stack, then we are finished reading the sequence of items
+ stream.increment(4);
+ read += 8;
+ break;
+ } else {
+ // otherwise, we were in a nested sequence of items
+ toRead += 4;
+ }
+ } else {
+ // anything else has been read
+ toRead += 2;
+ }
+ } else if (ge == 0xe000) {
+ // a new item has been found
+ toRead += 4;
+
+ if (itemLength == 0xffffffff) {
+ // a new item with undefined length has been found
+ stack++;
+ }
+ } else {
+ // some control tag that does not concern sequence of items has been read
+ toRead += 2;
+ stream.increment(-2);
+ }
+ } else {
+ // anything else has been read
+ toRead += 2;
+ }
+ }
+ } else {
+ toRead = length;
+ }
+
+ if (toRead) {
+ stream.increment(undef ? -toRead - 8 : 0);
+ itemStream = stream.more(toRead); //parseElements
+
+ read += toRead;
+ if (undef) stream.increment(8);
+
+ var items = DicomMessage._read(itemStream, syntax);
+
+ elements.push(items);
+ }
+
+ if (!undefLength && read == sqlength) {
+ break;
+ }
+ }
+ }
+
+ return elements;
+ }
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, syntax, writeOptions) {
+ var written = 0;
+
+ if (value) {
+ for (var i = 0; i < value.length; i++) {
+ var item = value[i];
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xfffe);
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xe000);
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint32", 0xffffffff);
+
+ written += DicomMessage.write(item, stream, syntax, writeOptions);
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xfffe);
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xe00d);
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint32", 0x00000000);
+
+ written += 16;
+ }
+ }
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xfffe);
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint16", 0xe0dd);
+
+ _get(_getPrototypeOf(SequenceOfItems.prototype), "write", this).call(this, stream, "Uint32", 0x00000000);
+
+ written += 8;
+ return _get(_getPrototypeOf(SequenceOfItems.prototype), "writeBytes", this).call(this, stream, value, [written], writeOptions);
+ }
+ }]);
+
+ return SequenceOfItems;
+ }(ValueRepresentation);
+
+ var SignedShort = /*#__PURE__*/function (_ValueRepresentation9) {
+ _inherits(SignedShort, _ValueRepresentation9);
+
+ var _super20 = _createSuper(SignedShort);
+
+ function SignedShort() {
+ var _this19;
+
+ _classCallCheck(this, SignedShort);
+
+ _this19 = _super20.call(this, "SS");
+ _this19.maxLength = 2;
+ _this19.valueLength = 2;
+ _this19.padByte = 0;
+ _this19.fixed = true;
+ _this19.defaultValue = 0;
+ return _this19;
+ }
+
+ _createClass(SignedShort, [{
+ key: "readBytes",
+ value: function readBytes(stream) {
+ return stream.readInt16();
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ return _get(_getPrototypeOf(SignedShort.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(SignedShort.prototype), "write", this).call(this, stream, "Int16", value), writeOptions);
+ }
+ }]);
+
+ return SignedShort;
+ }(ValueRepresentation);
+
+ var ShortText = /*#__PURE__*/function (_EncodedStringReprese5) {
+ _inherits(ShortText, _EncodedStringReprese5);
+
+ var _super21 = _createSuper(ShortText);
+
+ function ShortText() {
+ var _this20;
+
+ _classCallCheck(this, ShortText);
+
+ _this20 = _super21.call(this, "ST");
+ _this20.maxCharLength = 1024;
+ _this20.padByte = 0x20;
+ return _this20;
+ }
+
+ _createClass(ShortText, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return rtrim(stream.readEncodedString(length));
+ }
+ }]);
+
+ return ShortText;
+ }(EncodedStringRepresentation);
+
+ var TimeValue = /*#__PURE__*/function (_AsciiStringRepresent8) {
+ _inherits(TimeValue, _AsciiStringRepresent8);
+
+ var _super22 = _createSuper(TimeValue);
+
+ function TimeValue() {
+ var _this21;
+
+ _classCallCheck(this, TimeValue);
+
+ _this21 = _super22.call(this, "TM");
+ _this21.maxLength = 14;
+ _this21.padByte = 0x20;
+ return _this21;
+ }
+
+ _createClass(TimeValue, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return rtrim(stream.readAsciiString(length));
+ }
+ }]);
+
+ return TimeValue;
+ }(AsciiStringRepresentation);
+
+ var UnlimitedCharacters = /*#__PURE__*/function (_EncodedStringReprese6) {
+ _inherits(UnlimitedCharacters, _EncodedStringReprese6);
+
+ var _super23 = _createSuper(UnlimitedCharacters);
+
+ function UnlimitedCharacters() {
+ var _this22;
+
+ _classCallCheck(this, UnlimitedCharacters);
+
+ _this22 = _super23.call(this, "UC");
+ _this22.maxLength = null;
+ _this22.multi = true;
+ _this22.padByte = 0x20;
+ return _this22;
+ }
+
+ _createClass(UnlimitedCharacters, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return rtrim(stream.readEncodedString(length));
+ }
+ }]);
+
+ return UnlimitedCharacters;
+ }(EncodedStringRepresentation);
+
+ var UnlimitedText = /*#__PURE__*/function (_EncodedStringReprese7) {
+ _inherits(UnlimitedText, _EncodedStringReprese7);
+
+ var _super24 = _createSuper(UnlimitedText);
+
+ function UnlimitedText() {
+ var _this23;
+
+ _classCallCheck(this, UnlimitedText);
+
+ _this23 = _super24.call(this, "UT");
+ _this23.maxLength = null;
+ _this23.padByte = 0x20;
+ return _this23;
+ }
+
+ _createClass(UnlimitedText, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return rtrim(stream.readEncodedString(length));
+ }
+ }]);
+
+ return UnlimitedText;
+ }(EncodedStringRepresentation);
+
+ var UnsignedShort = /*#__PURE__*/function (_ValueRepresentation10) {
+ _inherits(UnsignedShort, _ValueRepresentation10);
+
+ var _super25 = _createSuper(UnsignedShort);
+
+ function UnsignedShort() {
+ var _this24;
+
+ _classCallCheck(this, UnsignedShort);
+
+ _this24 = _super25.call(this, "US");
+ _this24.maxLength = 2;
+ _this24.padByte = 0;
+ _this24.fixed = true;
+ _this24.defaultValue = 0;
+ return _this24;
+ }
+
+ _createClass(UnsignedShort, [{
+ key: "readBytes",
+ value: function readBytes(stream) {
+ return stream.readUint16();
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ return _get(_getPrototypeOf(UnsignedShort.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(UnsignedShort.prototype), "write", this).call(this, stream, "Uint16", value), writeOptions);
+ }
+ }]);
+
+ return UnsignedShort;
+ }(ValueRepresentation);
+
+ var UnsignedLong = /*#__PURE__*/function (_ValueRepresentation11) {
+ _inherits(UnsignedLong, _ValueRepresentation11);
+
+ var _super26 = _createSuper(UnsignedLong);
+
+ function UnsignedLong() {
+ var _this25;
+
+ _classCallCheck(this, UnsignedLong);
+
+ _this25 = _super26.call(this, "UL");
+ _this25.maxLength = 4;
+ _this25.padByte = 0;
+ _this25.fixed = true;
+ _this25.defaultValue = 0;
+ return _this25;
+ }
+
+ _createClass(UnsignedLong, [{
+ key: "readBytes",
+ value: function readBytes(stream) {
+ return stream.readUint32();
+ }
+ }, {
+ key: "writeBytes",
+ value: function writeBytes(stream, value, writeOptions) {
+ return _get(_getPrototypeOf(UnsignedLong.prototype), "writeBytes", this).call(this, stream, value, _get(_getPrototypeOf(UnsignedLong.prototype), "write", this).call(this, stream, "Uint32", value), writeOptions);
+ }
+ }]);
+
+ return UnsignedLong;
+ }(ValueRepresentation);
+
+ var UniqueIdentifier = /*#__PURE__*/function (_AsciiStringRepresent9) {
+ _inherits(UniqueIdentifier, _AsciiStringRepresent9);
+
+ var _super27 = _createSuper(UniqueIdentifier);
+
+ function UniqueIdentifier() {
+ var _this26;
+
+ _classCallCheck(this, UniqueIdentifier);
+
+ _this26 = _super27.call(this, "UI");
+ _this26.maxLength = 64;
+ _this26.padByte = 0;
+ return _this26;
+ }
+
+ _createClass(UniqueIdentifier, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ var result = this.readNullPaddedString(stream, length);
+ var BACKSLASH = String.fromCharCode(0x5c);
+ var uidRegExp = /[^0-9.]/g; // Treat backslashes as a delimiter for multiple UIDs, in which case an
+ // array of UIDs is returned. This is used by DICOM Q&R to support
+ // querying and matching multiple items on a UID field in a single
+ // query. For more details see:
+ //
+ // https://dicom.nema.org/medical/dicom/current/output/chtml/part04/sect_C.2.2.2.2.html
+ // https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.4.html
+
+ if (result.indexOf(BACKSLASH) === -1) {
+ return result.replace(uidRegExp, "");
+ } else {
+ return result.split(BACKSLASH).map(function (uid) {
+ return uid.replace(uidRegExp, "");
+ });
+ }
+ }
+ }]);
+
+ return UniqueIdentifier;
+ }(AsciiStringRepresentation);
+
+ var UniversalResource = /*#__PURE__*/function (_AsciiStringRepresent10) {
+ _inherits(UniversalResource, _AsciiStringRepresent10);
+
+ var _super28 = _createSuper(UniversalResource);
+
+ function UniversalResource() {
+ var _this27;
+
+ _classCallCheck(this, UniversalResource);
+
+ _this27 = _super28.call(this, "UR");
+ _this27.maxLength = null;
+ _this27.padByte = 0x20;
+ return _this27;
+ }
+
+ _createClass(UniversalResource, [{
+ key: "readBytes",
+ value: function readBytes(stream, length) {
+ return stream.readAsciiString(length);
+ }
+ }]);
+
+ return UniversalResource;
+ }(AsciiStringRepresentation);
+
+ var UnknownValue = /*#__PURE__*/function (_BinaryRepresentation) {
+ _inherits(UnknownValue, _BinaryRepresentation);
+
+ var _super29 = _createSuper(UnknownValue);
+
+ function UnknownValue() {
+ var _this28;
+
+ _classCallCheck(this, UnknownValue);
+
+ _this28 = _super29.call(this, "UN");
+ _this28.maxLength = null;
+ _this28.padByte = 0;
+ _this28.noMultiple = true;
+ return _this28;
+ }
+
+ return _createClass(UnknownValue);
+ }(BinaryRepresentation);
+
+ var OtherWordString = /*#__PURE__*/function (_BinaryRepresentation2) {
+ _inherits(OtherWordString, _BinaryRepresentation2);
+
+ var _super30 = _createSuper(OtherWordString);
+
+ function OtherWordString() {
+ var _this29;
+
+ _classCallCheck(this, OtherWordString);
+
+ _this29 = _super30.call(this, "OW");
+ _this29.maxLength = null;
+ _this29.padByte = 0;
+ _this29.noMultiple = true;
+ return _this29;
+ }
+
+ return _createClass(OtherWordString);
+ }(BinaryRepresentation);
+
+ var OtherByteString = /*#__PURE__*/function (_BinaryRepresentation3) {
+ _inherits(OtherByteString, _BinaryRepresentation3);
+
+ var _super31 = _createSuper(OtherByteString);
+
+ function OtherByteString() {
+ var _this30;
+
+ _classCallCheck(this, OtherByteString);
+
+ _this30 = _super31.call(this, "OB");
+ _this30.maxLength = null;
+ _this30.padByte = 0;
+ _this30.noMultiple = true;
+ return _this30;
+ }
+
+ return _createClass(OtherByteString);
+ }(BinaryRepresentation);
+
+ var OtherDoubleString = /*#__PURE__*/function (_BinaryRepresentation4) {
+ _inherits(OtherDoubleString, _BinaryRepresentation4);
+
+ var _super32 = _createSuper(OtherDoubleString);
+
+ function OtherDoubleString() {
+ var _this31;
+
+ _classCallCheck(this, OtherDoubleString);
+
+ _this31 = _super32.call(this, "OD");
+ _this31.maxLength = null;
+ _this31.padByte = 0;
+ _this31.noMultiple = true;
+ return _this31;
+ }
+
+ return _createClass(OtherDoubleString);
+ }(BinaryRepresentation);
+
+ var OtherFloatString = /*#__PURE__*/function (_BinaryRepresentation5) {
+ _inherits(OtherFloatString, _BinaryRepresentation5);
+
+ var _super33 = _createSuper(OtherFloatString);
+
+ function OtherFloatString() {
+ var _this32;
+
+ _classCallCheck(this, OtherFloatString);
+
+ _this32 = _super33.call(this, "OF");
+ _this32.maxLength = null;
+ _this32.padByte = 0;
+ _this32.noMultiple = true;
+ return _this32;
+ }
+
+ return _createClass(OtherFloatString);
+ }(BinaryRepresentation); // these VR instances are precreate and are reused for each requested vr/tag
+
+
+ var VRinstances = {
+ AE: new ApplicationEntity(),
+ AS: new AgeString(),
+ AT: new AttributeTag(),
+ CS: new CodeString(),
+ DA: new DateValue(),
+ DS: new DecimalString(),
+ DT: new DateTime(),
+ FL: new FloatingPointSingle(),
+ FD: new FloatingPointDouble(),
+ IS: new IntegerString(),
+ LO: new LongString(),
+ LT: new LongText(),
+ OB: new OtherByteString(),
+ OD: new OtherDoubleString(),
+ OF: new OtherFloatString(),
+ OW: new OtherWordString(),
+ PN: new PersonName(),
+ SH: new ShortString(),
+ SL: new SignedLong(),
+ SQ: new SequenceOfItems(),
+ SS: new SignedShort(),
+ ST: new ShortText(),
+ TM: new TimeValue(),
+ UC: new UnlimitedCharacters(),
+ UI: new UniqueIdentifier(),
+ UL: new UnsignedLong(),
+ UN: new UnknownValue(),
+ UR: new UniversalResource(),
+ US: new UnsignedShort(),
+ UT: new UnlimitedText()
+ };
+
+ var DicomMetaDictionary = /*#__PURE__*/function () {
+ // intakes a custom dictionary that will be used to parse/denaturalize the dataset
+ function DicomMetaDictionary(customDictionary) {
+ _classCallCheck(this, DicomMetaDictionary);
+
+ this.customDictionary = customDictionary;
+ this.customNameMap = DicomMetaDictionary._generateCustomNameMap(customDictionary);
+ }
+
+ _createClass(DicomMetaDictionary, [{
+ key: "denaturalizeDataset",
+ value: // denaturalizes dataset using custom dictionary and nameMap
+ function denaturalizeDataset(dataset) {
+ return DicomMetaDictionary.denaturalizeDataset(dataset, this.customNameMap);
+ }
+ }], [{
+ key: "punctuateTag",
+ value: function punctuateTag(rawTag) {
+ if (rawTag.indexOf(",") !== -1) {
+ return rawTag;
+ }
+
+ if (rawTag.length === 8 && rawTag === rawTag.match(/[0-9a-fA-F]*/)[0]) {
+ var tag = rawTag.toUpperCase();
+ return "(" + tag.substring(0, 4) + "," + tag.substring(4, 8) + ")";
+ }
+ }
+ }, {
+ key: "unpunctuateTag",
+ value: function unpunctuateTag(tag) {
+ if (tag.indexOf(",") === -1) {
+ return tag;
+ }
+
+ return tag.substring(1, 10).replace(",", "");
+ }
+ }, {
+ key: "parseIntFromTag",
+ value: function parseIntFromTag(tag) {
+ var integerValue = parseInt("0x" + DicomMetaDictionary.unpunctuateTag(tag));
+ return integerValue;
+ }
+ }, {
+ key: "tagAsIntegerFromName",
+ value: function tagAsIntegerFromName(name) {
+ var item = DicomMetaDictionary.nameMap[name];
+
+ if (item != undefined) {
+ return this.parseIntFromTag(item.tag);
+ } else {
+ return undefined;
+ }
+ } // fixes some common errors in VRs
+ // TODO: if this gets longer it could go in ValueRepresentation.js
+ // or in a dedicated class
+
+ }, {
+ key: "cleanDataset",
+ value: function cleanDataset(dataset) {
+ var cleanedDataset = {};
+ Object.keys(dataset).forEach(function (tag) {
+ var data = Object.assign({}, dataset[tag]);
+
+ if (data.vr == "SQ") {
+ var cleanedValues = [];
+ Object.keys(data.Value).forEach(function (index) {
+ cleanedValues.push(DicomMetaDictionary.cleanDataset(data.Value[index]));
+ });
+ data.Value = cleanedValues;
+ } else {
+ // remove null characters from strings
+ data.Value = Object.keys(data.Value).map(function (index) {
+ var item = data.Value[index];
+
+ if (item.constructor.name == "String") {
+ return item.replace(/\0/, "");
+ }
+
+ return item;
+ });
+ }
+
+ cleanedDataset[tag] = data;
+ });
+ return cleanedDataset;
+ } // unlike naturalizeDataset, this only
+ // changes the names of the member variables
+ // but leaves the values intact
+
+ }, {
+ key: "namifyDataset",
+ value: function namifyDataset(dataset) {
+ var namedDataset = {};
+ Object.keys(dataset).forEach(function (tag) {
+ var data = Object.assign({}, dataset[tag]);
+
+ if (data.vr == "SQ") {
+ var namedValues = [];
+ Object.keys(data.Value).forEach(function (index) {
+ namedValues.push(DicomMetaDictionary.namifyDataset(data.Value[index]));
+ });
+ data.Value = namedValues;
+ }
+
+ var punctuatedTag = DicomMetaDictionary.punctuateTag(tag);
+ var entry = DicomMetaDictionary.dictionary[punctuatedTag];
+ var name = tag;
+
+ if (entry) {
+ name = entry.name;
+ }
+
+ namedDataset[name] = data;
+ });
+ return namedDataset;
+ }
+ /** converts from DICOM JSON Model dataset to a natural dataset
+ * - sequences become lists
+ * - single element lists are replaced by their first element,
+ * with single element lists remaining lists, but being a
+ * proxy for the child values, see addAccessors for examples
+ * - object member names are dictionary, not group/element tag
+ */
+
+ }, {
+ key: "naturalizeDataset",
+ value: function naturalizeDataset(dataset) {
+ var naturalDataset = {
+ _vrMap: {}
+ };
+ Object.keys(dataset).forEach(function (tag) {
+ var data = dataset[tag];
+ var punctuatedTag = DicomMetaDictionary.punctuateTag(tag);
+ var entry = DicomMetaDictionary.dictionary[punctuatedTag];
+ var naturalName = tag;
+
+ if (entry) {
+ naturalName = entry.name;
+
+ if (entry.vr == "ox") {
+ // when the vr is data-dependent, keep track of the original type
+ naturalDataset._vrMap[naturalName] = data.vr;
+ }
+ }
+
+ if (data.Value === undefined) {
+ // In the case of type 2, add this tag but explictly set it null to indicate its empty.
+ naturalDataset[naturalName] = null;
+
+ if (data.InlineBinary) {
+ naturalDataset[naturalName] = {
+ InlineBinary: data.InlineBinary
+ };
+ } else if (data.BulkDataURI) {
+ naturalDataset[naturalName] = {
+ BulkDataURI: data.BulkDataURI
+ };
+ }
+ } else {
+ if (data.vr === "SQ") {
+ // convert sequence to list of values
+ var naturalValues = [];
+ Object.keys(data.Value).forEach(function (index) {
+ naturalValues.push(DicomMetaDictionary.naturalizeDataset(data.Value[index]));
+ });
+ naturalDataset[naturalName] = naturalValues;
+ } else {
+ naturalDataset[naturalName] = data.Value;
+ }
+
+ if (naturalDataset[naturalName].length === 1) {
+ var sqZero = naturalDataset[naturalName][0];
+
+ if (sqZero && _typeof(sqZero) === "object" && !sqZero.length) {
+ naturalDataset[naturalName] = addAccessors(naturalDataset[naturalName], sqZero);
+ } else {
+ naturalDataset[naturalName] = sqZero;
+ }
+ }
+ }
+ });
+ return naturalDataset;
+ }
+ }, {
+ key: "denaturalizeValue",
+ value: function denaturalizeValue(naturalValue) {
+ var value = naturalValue;
+
+ if (!Array.isArray(value)) {
+ value = [value];
+ } else {
+ var thereIsUndefinedValues = naturalValue.some(function (item) {
+ return item === undefined;
+ });
+
+ if (thereIsUndefinedValues) {
+ throw new Error("There are undefined values at the array naturalValue in DicomMetaDictionary.denaturalizeValue");
+ }
+ }
+
+ value = value.map(function (entry) {
+ return entry.constructor.name == "Number" ? String(entry) : entry;
+ });
+ return value;
+ } // keep the static function to support previous calls to the class
+
+ }, {
+ key: "denaturalizeDataset",
+ value: function denaturalizeDataset(dataset) {
+ var nameMap = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DicomMetaDictionary.nameMap;
+ var unnaturalDataset = {};
+ Object.keys(dataset).forEach(function (naturalName) {
+ // check if it's a sequence
+ var name = naturalName;
+ var entry = nameMap[name];
+
+ if (entry) {
+ var dataValue = dataset[naturalName];
+
+ if (dataValue === undefined) {
+ // handle the case where it was deleted from the object but is in keys
+ return;
+ } // process this one entry
+
+
+ var dataItem = {
+ vr: entry.vr,
+ Value: dataset[naturalName]
+ };
+
+ if (dataValue !== null) {
+ if (entry.vr == "ox") {
+ if (dataset._vrMap && dataset._vrMap[naturalName]) {
+ dataItem.vr = dataset._vrMap[naturalName];
+ } else {
+ log.error("No value representation given for", naturalName);
+ }
+ }
+
+ dataItem.Value = DicomMetaDictionary.denaturalizeValue(dataItem.Value);
+
+ if (entry.vr == "SQ") {
+ var unnaturalValues = [];
+
+ for (var datasetIndex = 0; datasetIndex < dataItem.Value.length; datasetIndex++) {
+ var nestedDataset = dataItem.Value[datasetIndex];
+ unnaturalValues.push(DicomMetaDictionary.denaturalizeDataset(nestedDataset, nameMap));
+ }
+
+ dataItem.Value = unnaturalValues;
+ }
+
+ var vr = ValueRepresentation.createByTypeString(dataItem.vr);
+
+ if (!vr.isBinary() && vr.maxLength) {
+ dataItem.Value = dataItem.Value.map(function (value) {
+ if (value.length > vr.maxLength) {
+ log.warn("Truncating value ".concat(value, " of ").concat(naturalName, " because it is longer than ").concat(vr.maxLength));
+ return value.slice(0, vr.maxLength);
+ } else {
+ return value;
+ }
+ });
+ }
+ }
+
+ var tag = DicomMetaDictionary.unpunctuateTag(entry.tag);
+ unnaturalDataset[tag] = dataItem;
+ } else {
+ var validMetaNames = ["_vrMap", "_meta"];
+
+ if (validMetaNames.indexOf(name) == -1) {
+ log.warn("Unknown name in dataset", name, ":", dataset[name]);
+ }
+ }
+ });
+ return unnaturalDataset;
+ }
+ }, {
+ key: "uid",
+ value: function uid() {
+ var uid = "2.25." + Math.floor(1 + Math.random() * 9);
+
+ for (var index = 0; index < 38; index++) {
+ uid = uid + Math.floor(Math.random() * 10);
+ }
+
+ return uid;
+ } // date and time in UTC
+
+ }, {
+ key: "date",
+ value: function date() {
+ var now = new Date();
+ return now.toISOString().replace(/-/g, "").slice(0, 8);
+ }
+ }, {
+ key: "time",
+ value: function time() {
+ var now = new Date();
+ return now.toISOString().replace(/:/g, "").slice(11, 17);
+ }
+ }, {
+ key: "dateTime",
+ value: function dateTime() {
+ // "2017-07-07T16:09:18.079Z" -> "20170707160918.079"
+ var now = new Date();
+ return now.toISOString().replace(/[:\-TZ]/g, "");
+ }
+ }, {
+ key: "_generateNameMap",
+ value: function _generateNameMap() {
+ DicomMetaDictionary.nameMap = {};
+ Object.keys(DicomMetaDictionary.dictionary).forEach(function (tag) {
+ var dict = DicomMetaDictionary.dictionary[tag];
+
+ if (dict.version != "PrivateTag") {
+ DicomMetaDictionary.nameMap[dict.name] = dict;
+ }
+ });
+ }
+ }, {
+ key: "_generateCustomNameMap",
+ value: function _generateCustomNameMap(dictionary) {
+ var nameMap = {};
+ Object.keys(dictionary).forEach(function (tag) {
+ var dict = dictionary[tag];
+
+ if (dict.version != "PrivateTag") {
+ nameMap[dict.name] = dict;
+ }
+ });
+ return nameMap;
+ }
+ }, {
+ key: "_generateUIDMap",
+ value: function _generateUIDMap() {
+ DicomMetaDictionary.sopClassUIDsByName = {};
+ Object.keys(DicomMetaDictionary.sopClassNamesByUID).forEach(function (uid) {
+ var name = DicomMetaDictionary.sopClassNamesByUID[uid];
+ DicomMetaDictionary.sopClassUIDsByName[name] = uid;
+ });
+ }
+ }]);
+
+ return DicomMetaDictionary;
+ }(); // Subset of those listed at:
+ // http://dicom.nema.org/medical/dicom/current/output/html/part04.html#sect_B.5
+
+
+ DicomMetaDictionary.sopClassNamesByUID = {
+ "1.2.840.10008.5.1.4.1.1.2": "CTImage",
+ "1.2.840.10008.5.1.4.1.1.2.1": "EnhancedCTImage",
+ "1.2.840.10008.5.1.4.1.1.2.2": "LegacyConvertedEnhancedCTImage",
+ "1.2.840.10008.5.1.4.1.1.3.1": "USMultiframeImage",
+ "1.2.840.10008.5.1.4.1.1.4": "MRImage",
+ "1.2.840.10008.5.1.4.1.1.4.1": "EnhancedMRImage",
+ "1.2.840.10008.5.1.4.1.1.4.2": "MRSpectroscopy",
+ "1.2.840.10008.5.1.4.1.1.4.3": "EnhancedMRColorImage",
+ "1.2.840.10008.5.1.4.1.1.4.4": "LegacyConvertedEnhancedMRImage",
+ "1.2.840.10008.5.1.4.1.1.6.1": "USImage",
+ "1.2.840.10008.5.1.4.1.1.6.2": "EnhancedUSVolume",
+ "1.2.840.10008.5.1.4.1.1.7": "SecondaryCaptureImage",
+ "1.2.840.10008.5.1.4.1.1.30": "ParametricMapStorage",
+ "1.2.840.10008.5.1.4.1.1.66": "RawData",
+ "1.2.840.10008.5.1.4.1.1.66.1": "SpatialRegistration",
+ "1.2.840.10008.5.1.4.1.1.66.2": "SpatialFiducials",
+ "1.2.840.10008.5.1.4.1.1.66.3": "DeformableSpatialRegistration",
+ "1.2.840.10008.5.1.4.1.1.66.4": "Segmentation",
+ "1.2.840.10008.5.1.4.1.1.67": "RealWorldValueMapping",
+ "1.2.840.10008.5.1.4.1.1.88.11": "BasicTextSR",
+ "1.2.840.10008.5.1.4.1.1.88.22": "EnhancedSR",
+ "1.2.840.10008.5.1.4.1.1.88.33": "ComprehensiveSR",
+ "1.2.840.10008.5.1.4.1.1.128": "PETImage",
+ "1.2.840.10008.5.1.4.1.1.130": "EnhancedPETImage",
+ "1.2.840.10008.5.1.4.1.1.128.1": "LegacyConvertedEnhancedPETImage"
+ };
+ DicomMetaDictionary.dictionary = dictionary;
+
+ DicomMetaDictionary._generateNameMap();
+
+ DicomMetaDictionary._generateUIDMap();
+
+ var singleVRs = ["SQ", "OF", "OW", "OB", "UN", "LT"];
+ var encodingMapping = {
+ "": "iso-8859-1",
+ "iso-ir-6": "iso-8859-1",
+ "iso-ir-13": "shift-jis",
+ "iso-ir-100": "latin1",
+ "iso-ir-101": "iso-8859-2",
+ "iso-ir-109": "iso-8859-3",
+ "iso-ir-110": "iso-8859-4",
+ "iso-ir-126": "iso-ir-126",
+ "iso-ir-127": "iso-ir-127",
+ "iso-ir-138": "iso-ir-138",
+ "iso-ir-144": "iso-ir-144",
+ "iso-ir-148": "iso-ir-148",
+ "iso-ir-166": "tis-620",
+ "iso-2022-ir-6": "iso-8859-1",
+ "iso-2022-ir-13": "shift-jis",
+ "iso-2022-ir-87": "iso-2022-jp",
+ "iso-2022-ir-100": "latin1",
+ "iso-2022-ir-101": "iso-8859-2",
+ "iso-2022-ir-109": "iso-8859-3",
+ "iso-2022-ir-110": "iso-8859-4",
+ "iso-2022-ir-126": "iso-ir-126",
+ "iso-2022-ir-127": "iso-ir-127",
+ "iso-2022-ir-138": "iso-ir-138",
+ "iso-2022-ir-144": "iso-ir-144",
+ "iso-2022-ir-148": "iso-ir-148",
+ "iso-2022-ir-149": "euc-kr",
+ "iso-2022-ir-159": "iso-2022-jp",
+ "iso-2022-ir-166": "tis-620",
+ "iso-2022-ir-58": "iso-ir-58",
+ "iso-ir-192": "utf-8",
+ gb18030: "gb18030",
+ "iso-2022-gbk": "gbk",
+ "iso-2022-58": "gb2312",
+ gbk: "gbk"
+ };
+ var encapsulatedSyntaxes = ["1.2.840.10008.1.2.4.50", "1.2.840.10008.1.2.4.51", "1.2.840.10008.1.2.4.57", "1.2.840.10008.1.2.4.70", "1.2.840.10008.1.2.4.80", "1.2.840.10008.1.2.4.81", "1.2.840.10008.1.2.4.90", "1.2.840.10008.1.2.4.91", "1.2.840.10008.1.2.4.92", "1.2.840.10008.1.2.4.93", "1.2.840.10008.1.2.4.94", "1.2.840.10008.1.2.4.95", "1.2.840.10008.1.2.5", "1.2.840.10008.1.2.6.1", "1.2.840.10008.1.2.4.100", "1.2.840.10008.1.2.4.102", "1.2.840.10008.1.2.4.103"];
+
+ var DicomMessage = /*#__PURE__*/function () {
+ function DicomMessage() {
+ _classCallCheck(this, DicomMessage);
+ }
+
+ _createClass(DicomMessage, null, [{
+ key: "read",
+ value: function read(bufferStream, syntax, ignoreErrors) {
+ var untilTag = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
+ var includeUntilTagValue = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
+ log.warn("DicomMessage.read to be deprecated after dcmjs 0.24.x");
+ return this._read(bufferStream, syntax, {
+ ignoreErrors: ignoreErrors,
+ untilTag: untilTag,
+ includeUntilTagValue: includeUntilTagValue
+ });
+ }
+ }, {
+ key: "readTag",
+ value: function readTag(bufferStream, syntax) {
+ var untilTag = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
+ var includeUntilTagValue = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+ log.warn("DicomMessage.readTag to be deprecated after dcmjs 0.24.x");
+ return this._readTag(bufferStream, syntax, {
+ untilTag: untilTag,
+ includeUntilTagValue: includeUntilTagValue
+ });
+ }
+ }, {
+ key: "_read",
+ value: function _read(bufferStream, syntax) {
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
+ ignoreErrors: false,
+ untilTag: null,
+ includeUntilTagValue: false
+ };
+ var ignoreErrors = options.ignoreErrors,
+ untilTag = options.untilTag;
+ var dict = {};
+
+ try {
+ while (!bufferStream.end()) {
+ var readInfo = DicomMessage._readTag(bufferStream, syntax, options);
+
+ var cleanTagString = readInfo.tag.toCleanString();
+
+ if (cleanTagString === "00080005") {
+ if (readInfo.values.length > 0) {
+ var coding = readInfo.values[0];
+ coding = coding.replace(/[_ ]/g, "-").toLowerCase();
+
+ if (coding in encodingMapping) {
+ coding = encodingMapping[coding];
+ bufferStream.setDecoder(new TextDecoder(coding));
+ } else if (ignoreErrors) {
+ log.warn("Unsupported character set: ".concat(coding, ", using default character set"));
+ } else {
+ throw Error("Unsupported character set: ".concat(coding));
+ }
+ }
+
+ // if (readInfo.values.length > 1) {
+ // if (ignoreErrors) {
+ // log.warn("Using multiple character sets is not supported, proceeding with just the first character set", readInfo.values);
+ // } else {
+ // throw Error("Using multiple character sets is not supported: ".concat(readInfo.values));
+ // }
+ // }
+
+ readInfo.values = ["ISO_IR 192"]; // change SpecificCharacterSet to UTF-8
+ }
+
+ dict[cleanTagString] = {
+ vr: readInfo.vr.type,
+ Value: readInfo.values
+ };
+
+ if (untilTag && untilTag === cleanTagString) {
+ break;
+ }
+ }
+
+ return dict;
+ } catch (err) {
+ if (ignoreErrors) {
+ log.warn("WARN:", err);
+ return dict;
+ }
+
+ throw err;
+ }
+ }
+ }, {
+ key: "_normalizeSyntax",
+ value: function _normalizeSyntax(syntax) {
+ if (syntax == IMPLICIT_LITTLE_ENDIAN || syntax == EXPLICIT_LITTLE_ENDIAN$1 || syntax == EXPLICIT_BIG_ENDIAN) {
+ return syntax;
+ } else {
+ return EXPLICIT_LITTLE_ENDIAN$1;
+ }
+ }
+ }, {
+ key: "isEncapsulated",
+ value: function isEncapsulated(syntax) {
+ return encapsulatedSyntaxes.indexOf(syntax) != -1;
+ }
+ }, {
+ key: "readFile",
+ value: function readFile(buffer) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
+ ignoreErrors: false,
+ untilTag: null,
+ includeUntilTagValue: false,
+ noCopy: false
+ };
+ var stream = new ReadBufferStream(buffer, null, {
+ noCopy: options.noCopy
+ }),
+ useSyntax = EXPLICIT_LITTLE_ENDIAN$1;
+ stream.reset();
+ stream.increment(128);
+
+ if (stream.readAsciiString(4) !== "DICM") {
+ throw new Error("Invalid DICOM file, expected header is missing");
+ }
+
+ var el = DicomMessage._readTag(stream, useSyntax);
+
+ if (el.tag.toCleanString() !== "00020000") {
+ throw new Error("Invalid DICOM file, meta length tag is malformed or not present.");
+ }
+
+ var metaLength = el.values[0]; //read header buffer
+
+ var metaStream = stream.more(metaLength);
+
+ var metaHeader = DicomMessage._read(metaStream, useSyntax, options); //get the syntax
+
+
+ var mainSyntax = metaHeader["00020010"].Value[0]; //in case of deflated dataset, decompress and continue
+
+ if (mainSyntax === DEFLATED_EXPLICIT_LITTLE_ENDIAN) {
+ stream = new DeflatedReadBufferStream(stream, {
+ noCopy: options.noCopy
+ });
+ }
+
+ mainSyntax = DicomMessage._normalizeSyntax(mainSyntax);
+
+ var objects = DicomMessage._read(stream, mainSyntax, options);
+
+ var dicomDict = new DicomDict(metaHeader);
+ dicomDict.dict = objects;
+ return dicomDict;
+ }
+ }, {
+ key: "writeTagObject",
+ value: function writeTagObject(stream, tagString, vr, values, syntax, writeOptions) {
+ var tag = Tag.fromString(tagString);
+ tag.write(stream, vr, values, syntax, writeOptions);
+ }
+ }, {
+ key: "write",
+ value: function write(jsonObjects, useStream, syntax, writeOptions) {
+ var written = 0;
+ var sortedTags = Object.keys(jsonObjects).sort();
+ sortedTags.forEach(function (tagString) {
+ var tag = Tag.fromString(tagString),
+ tagObject = jsonObjects[tagString],
+ vrType = tagObject.vr,
+ values = tagObject.Value;
+ written += tag.write(useStream, vrType, values, syntax, writeOptions);
+ });
+ return written;
+ }
+ }, {
+ key: "_readTag",
+ value: function _readTag(stream, syntax) {
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
+ untilTag: null,
+ includeUntilTagValue: false
+ };
+ var untilTag = options.untilTag,
+ includeUntilTagValue = options.includeUntilTagValue;
+ var implicit = syntax == IMPLICIT_LITTLE_ENDIAN ? true : false,
+ isLittleEndian = syntax == IMPLICIT_LITTLE_ENDIAN || syntax == EXPLICIT_LITTLE_ENDIAN$1 ? true : false;
+ var oldEndian = stream.isLittleEndian;
+ stream.setEndian(isLittleEndian);
+ var tag = Tag.readTag(stream);
+
+ if (untilTag === tag.toCleanString() && untilTag !== null) {
+ if (!includeUntilTagValue) {
+ return {
+ tag: tag,
+ vr: 0,
+ values: 0
+ };
+ }
+ }
+
+ var length = null,
+ vr = null,
+ vrType;
+
+ if (implicit) {
+ length = stream.readUint32();
+ var elementData = DicomMessage.lookupTag(tag);
+
+ if (elementData) {
+ vrType = elementData.vr;
+ } else {
+ //unknown tag
+ if (length == 0xffffffff) {
+ vrType = "SQ";
+ } else if (tag.isPixelDataTag()) {
+ vrType = "OW";
+ } else if (vrType == "xs") {
+ vrType = "US";
+ } else if (tag.isPrivateCreator()) {
+ vrType = "LO";
+ } else {
+ vrType = "UN";
+ }
+ }
+
+ vr = ValueRepresentation.createByTypeString(vrType);
+ } else {
+ vrType = stream.readVR();
+ vr = ValueRepresentation.createByTypeString(vrType);
+
+ if (vr.isExplicit()) {
+ stream.increment(2);
+ length = stream.readUint32();
+ } else {
+ length = stream.readUint16();
+ }
+ }
+
+ var values = [];
+
+ if (vr.isBinary() && length > vr.maxLength && !vr.noMultiple) {
+ var times = length / vr.maxLength,
+ i = 0;
+
+ while (i++ < times) {
+ values.push(vr.read(stream, vr.maxLength, syntax));
+ }
+ } else {
+ var val = vr.read(stream, length, syntax);
+
+ if (!vr.isBinary() && singleVRs.indexOf(vr.type) == -1) {
+ values = val;
+
+ if (typeof val === "string") {
+ values = val.split(String.fromCharCode(0x5c));
+ }
+ } else if (vr.type == "SQ") {
+ values = val;
+ } else if (vr.type == "OW" || vr.type == "OB") {
+ values = val;
+ } else {
+ Array.isArray(val) ? values = val : values.push(val);
+ }
+ }
+
+ stream.setEndian(oldEndian);
+ return {
+ tag: tag,
+ vr: vr,
+ values: values
+ };
+ }
+ }, {
+ key: "lookupTag",
+ value: function lookupTag(tag) {
+ return DicomMetaDictionary.dictionary[tag.toString()];
+ }
+ }]);
+
+ return DicomMessage;
+ }();
+
+ var EXPLICIT_LITTLE_ENDIAN = "1.2.840.10008.1.2.1";
+
+ var DicomDict = /*#__PURE__*/function () {
+ function DicomDict(meta) {
+ _classCallCheck(this, DicomDict);
+
+ this.meta = meta;
+ this.dict = {};
+ }
+
+ _createClass(DicomDict, [{
+ key: "upsertTag",
+ value: function upsertTag(tag, vr, values) {
+ if (this.dict[tag]) {
+ this.dict[tag].Value = values;
+ } else {
+ this.dict[tag] = {
+ vr: vr,
+ Value: values
+ };
+ }
+ }
+ }, {
+ key: "write",
+ value: function write() {
+ var writeOptions = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {
+ allowInvalidVRLength: false
+ };
+ var metaSyntax = EXPLICIT_LITTLE_ENDIAN;
+ var fileStream = new WriteBufferStream(4096, true);
+ fileStream.writeUint8Repeat(0, 128);
+ fileStream.writeAsciiString("DICM");
+ var metaStream = new WriteBufferStream(1024);
+
+ if (!this.meta["00020010"]) {
+ this.meta["00020010"] = {
+ vr: "UI",
+ Value: [EXPLICIT_LITTLE_ENDIAN]
+ };
+ }
+
+ DicomMessage.write(this.meta, metaStream, metaSyntax, writeOptions);
+ DicomMessage.writeTagObject(fileStream, "00020000", "UL", metaStream.size, metaSyntax, writeOptions);
+ fileStream.concat(metaStream);
+ var useSyntax = this.meta["00020010"].Value[0];
+ DicomMessage.write(this.dict, fileStream, useSyntax, writeOptions);
+ return fileStream.getBuffer();
+ }
+ }]);
+
+ return DicomDict;
+ }();
+
+ var DICOMWEB = /*#__PURE__*/function () {
+ /*
+ JavaScript DICOMweb REST API for browser use.
+ Design:
+ * map rest api to high-level code with modern conventions
+ ** ES6: classes, arrow functions, let...
+ ** promises
+ ** json converted to objects
+ examples: see tests() method below.
+ */
+ function DICOMWEB() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ _classCallCheck(this, DICOMWEB);
+
+ this.rootURL = options.rootURL;
+ this.progressCallback = options.progressCallback;
+ }
+
+ _createClass(DICOMWEB, [{
+ key: "request",
+ value: function request(endpoint) {
+ var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ var payload = arguments.length > 2 ? arguments[2] : undefined;
+ var responseType = DICOMWEB.responseType(endpoint);
+ var service = DICOMWEB.endpointService(endpoint);
+ var url = this.rootURL + "/" + service + endpoint;
+ var firstParameter = true;
+ Object.keys(parameters).forEach(function (parameter) {
+ if (firstParameter) {
+ url += "?";
+ firstParameter = false;
+ } else {
+ url += "&";
+ }
+
+ url += parameter + "=" + encodeURIComponent(parameters[parameter]);
+ });
+
+ function promiseHandler(resolve, reject) {
+ var request = new XMLHttpRequest();
+ request.open("GET", url);
+ request.responseType = responseType;
+
+ request.onload = function () {
+ resolve(request.response);
+ };
+
+ request.onprogress = this.progressCallback;
+
+ request.onerror = function (error) {
+ log.error(request.response);
+ reject(error);
+ };
+
+ request.send(payload);
+ }
+
+ var promise = new Promise(promiseHandler.bind(this));
+ return promise;
+ }
+ }, {
+ key: "patients",
+ value: function patients() {
+ return this.request("patients");
+ }
+ }, {
+ key: "studies",
+ value: function studies(patientID) {
+ return this.request("studies", {
+ PatientID: patientID
+ });
+ }
+ }, {
+ key: "series",
+ value: function series(studyInstanceUID) {
+ return this.request("series", {
+ StudyInstanceUID: studyInstanceUID
+ });
+ }
+ }, {
+ key: "instances",
+ value: function instances(studyInstanceUID, seriesInstanceUID) {
+ return this.request("instances", {
+ StudyInstanceUID: studyInstanceUID,
+ SeriesInstanceUID: seriesInstanceUID
+ });
+ }
+ }, {
+ key: "instance",
+ value: function instance(studyInstanceUID, seriesInstanceUID, sopInstanceUID) {
+ return this.request("wado", {
+ requestType: "WADO",
+ studyUID: studyInstanceUID,
+ seriesUID: seriesInstanceUID,
+ objectUID: sopInstanceUID,
+ contentType: "application/dicom"
+ });
+ }
+ }, {
+ key: "tests",
+ value: function tests() {
+ var testingServerURL = "http://quantome.org:4242/dcm4chee-arc/aets/DCM4CHEE";
+ var testOptions = {
+ rootURL: testingServerURL
+ };
+ new DICOMWEB(testOptions).patients().then(function (responses) {
+ responses.forEach(function (patient) {
+ log.log(patient);
+ });
+ });
+ }
+ }], [{
+ key: "responseType",
+ value: function responseType(endpoint) {
+ var types = {
+ wado: "arraybuffer"
+ };
+ return types[endpoint] ? types[endpoint] : "json";
+ } // which URL service to use for each of the high level services
+
+ }, {
+ key: "endpointService",
+ value: function endpointService(endpoint) {
+ var services = {
+ wado: ""
+ };
+ return Object.keys(services).indexOf(endpoint) != -1 ? services[endpoint] : "rs/";
+ }
+ }, {
+ key: "randomEntry",
+ value: function randomEntry(array) {
+ return array[Math.floor(Math.random() * array.length)];
+ }
+ }]);
+
+ return DICOMWEB;
+ }();
+
+ //
+ // Handle DICOM and CIELAB colors
+ // based on:
+ // https://github.com/michaelonken/dcmtk/blob/3c68f0e882e22e6d9e2a42f836332c0ca21b3e7f/dcmiod/libsrc/cielabutil.cc
+ //
+ // RGB here refers to sRGB 0-1 per component.
+ // dicomlab is CIELAB values as defined in the dicom standard
+ // XYZ is CIEXYZ convention
+ //
+ // TODO: needs a test suite
+ // TODO: only dicomlab2RGB tested on real data
+ //
+ //
+ var Colors = /*#__PURE__*/function () {
+ function Colors() {
+ _classCallCheck(this, Colors);
+ }
+
+ _createClass(Colors, null, [{
+ key: "d65WhitePointXYZ",
+ value: function d65WhitePointXYZ() {
+ // white points of D65 light point (CIELAB standard white point)
+ return [0.950456, 1.0, 1.088754];
+ }
+ }, {
+ key: "dicomlab2RGB",
+ value: function dicomlab2RGB(dicomlab) {
+ return Colors.lab2RGB(Colors.dicomlab2LAB(dicomlab));
+ }
+ }, {
+ key: "rgb2DICOMLAB",
+ value: function rgb2DICOMLAB(rgb) {
+ return Colors.lab2DICOMLAB(Colors.rgb2LAB(rgb));
+ }
+ }, {
+ key: "dicomlab2LAB",
+ value: function dicomlab2LAB(dicomlab) {
+ return [dicomlab[0] * 100.0 / 65535.0, // results in 0 <= L <= 100
+ dicomlab[1] * 255.0 / 65535.0 - 128, // results in -128 <= a <= 127
+ dicomlab[2] * 255.0 / 65535.0 - 128 // results in -128 <= b <= 127
+ ];
+ }
+ }, {
+ key: "lab2DICOMLAB",
+ value: function lab2DICOMLAB(lab) {
+ return [lab[0] * 65535.0 / 100.0, // results in 0 <= L <= 65535
+ (lab[1] + 128) * 65535.0 / 255.0, // results in 0 <= a <= 65535
+ (lab[2] + 128) * 65535.0 / 255.0 // results in 0 <= b <= 65535
+ ];
+ }
+ }, {
+ key: "rgb2LAB",
+ value: function rgb2LAB(rgb) {
+ return Colors.xyz2LAB(Colors.rgb2XYZ(rgb));
+ }
+ }, {
+ key: "gammaCorrection",
+ value: function gammaCorrection(n) {
+ if (n <= 0.0031306684425005883) {
+ return 12.92 * n;
+ } else {
+ return 1.055 * Math.pow(n, 0.416666666666666667) - 0.055;
+ }
+ }
+ }, {
+ key: "invGammaCorrection",
+ value: function invGammaCorrection(n) {
+ if (n <= 0.0404482362771076) {
+ return n / 12.92;
+ } else {
+ return Math.pow((n + 0.055) / 1.055, 2.4);
+ }
+ }
+ }, {
+ key: "rgb2XYZ",
+ value: function rgb2XYZ(rgb) {
+ var R = Colors.invGammaCorrection(rgb[0]);
+ var G = Colors.invGammaCorrection(rgb[1]);
+ var B = Colors.invGammaCorrection(rgb[2]);
+ return [0.4123955889674142161 * R + 0.3575834307637148171 * G + 0.1804926473817015735 * B, 0.2125862307855955516 * R + 0.7151703037034108499 * G + 0.07220049864333622685 * B, 0.01929721549174694484 * R + 0.1191838645808485318 * G + 0.950497125131579766 * B];
+ }
+ }, {
+ key: "xyz2LAB",
+ value: function xyz2LAB(xyz) {
+ var whitePoint = Colors.d65WhitePointXYZ();
+ var X = xyz[0] / whitePoint[0];
+ var Y = xyz[1] / whitePoint[1];
+ var Z = xyz[2] / whitePoint[2];
+ X = Colors.labf(X);
+ Y = Colors.labf(Y);
+ Z = Colors.labf(Z);
+ return [116 * Y - 16, 500 * (X - Y), 200 * (Y - Z)];
+ }
+ }, {
+ key: "lab2RGB",
+ value: function lab2RGB(lab) {
+ return Colors.xyz2RGB(Colors.lab2XYZ(lab));
+ }
+ }, {
+ key: "lab2XYZ",
+ value: function lab2XYZ(lab) {
+ var L = (lab[0] + 16) / 116;
+ var a = L + lab[1] / 500;
+ var b = L - lab[2] / 200;
+ var whitePoint = Colors.d65WhitePointXYZ();
+ return [whitePoint[0] * Colors.labfInv(a), whitePoint[1] * Colors.labfInv(L), whitePoint[2] * Colors.labfInv(b)];
+ }
+ }, {
+ key: "xyz2RGB",
+ value: function xyz2RGB(xyz) {
+ var R1 = 3.2406 * xyz[0] - 1.5372 * xyz[1] - 0.4986 * xyz[2];
+ var G1 = -0.9689 * xyz[0] + 1.8758 * xyz[1] + 0.0415 * xyz[2];
+ var B1 = 0.0557 * xyz[0] - 0.204 * xyz[1] + 1.057 * xyz[2];
+ /* Force nonnegative values so that gamma correction is well-defined. */
+
+ var minimumComponent = Math.min(R1, G1);
+ minimumComponent = Math.min(minimumComponent, B1);
+
+ if (minimumComponent < 0) {
+ R1 -= minimumComponent;
+ G1 -= minimumComponent;
+ B1 -= minimumComponent;
+ }
+ /* Transform from RGB to R'G'B' */
+
+
+ return [Colors.gammaCorrection(R1), Colors.gammaCorrection(G1), Colors.gammaCorrection(B1)];
+ }
+ }, {
+ key: "labf",
+ value: function labf(n) {
+ if (n >= 8.85645167903563082e-3) {
+ return Math.pow(n, 0.333333333333333);
+ } else {
+ return 841.0 / 108.0 * n + 4.0 / 29.0;
+ }
+ }
+ }, {
+ key: "labfInv",
+ value: function labfInv(n) {
+ if (n >= 0.206896551724137931) {
+ return n * n * n;
+ } else {
+ return 108.0 / 841.0 * (n - 4.0 / 29.0);
+ }
+ }
+ }]);
+
+ return Colors;
+ }();
+
+ function datasetToDict(dataset) {
+ var fileMetaInformationVersionArray = new Uint8Array(2);
+ fileMetaInformationVersionArray[1] = 1;
+ var TransferSyntaxUID = dataset._meta.TransferSyntaxUID && dataset._meta.TransferSyntaxUID.Value && dataset._meta.TransferSyntaxUID.Value[0] ? dataset._meta.TransferSyntaxUID.Value[0] : "1.2.840.10008.1.2.1";
+ dataset._meta = {
+ MediaStorageSOPClassUID: dataset.SOPClassUID,
+ MediaStorageSOPInstanceUID: dataset.SOPInstanceUID,
+ ImplementationVersionName: "dcmjs-0.0",
+ TransferSyntaxUID: TransferSyntaxUID,
+ ImplementationClassUID: "2.25.80302813137786398554742050926734630921603366648225212145404",
+ FileMetaInformationVersion: fileMetaInformationVersionArray.buffer
+ };
+ var denaturalized = DicomMetaDictionary.denaturalizeDataset(dataset._meta);
+ var dicomDict = new DicomDict(denaturalized);
+ dicomDict.dict = DicomMetaDictionary.denaturalizeDataset(dataset);
+ return dicomDict;
+ }
+
+ function datasetToBuffer(dataset) {
+ return Buffer.from(datasetToDict(dataset).write());
+ }
+
+ function datasetToBlob(dataset) {
+ var buffer = datasetToBuffer(dataset);
+ return new Blob([buffer], {
+ type: "application/dicom"
+ });
+ }
+
+ var DerivedDataset = /*#__PURE__*/function () {
+ function DerivedDataset(datasets) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, DerivedDataset);
+
+ this.options = JSON.parse(JSON.stringify(options));
+ var o = this.options;
+ o.Manufacturer = options.Manufacturer || "Unspecified";
+ o.ManufacturerModelName = options.ManufacturerModelName || "Unspecified";
+ o.SeriesDescription = options.SeriesDescription || "Research Derived series";
+ o.SeriesNumber = options.SeriesNumber || "99";
+ o.SoftwareVersions = options.SoftwareVersions || "0";
+ o.DeviceSerialNumber = options.DeviceSerialNumber || "1";
+ var date = DicomMetaDictionary.date();
+ var time = DicomMetaDictionary.time();
+ o.SeriesDate = options.SeriesDate || date;
+ o.SeriesTime = options.SeriesTime || time;
+ o.ContentDate = options.ContentDate || date;
+ o.ContentTime = options.ContentTime || time;
+ o.SOPInstanceUID = options.SOPInstanceUID || DicomMetaDictionary.uid();
+ o.SeriesInstanceUID = options.SeriesInstanceUID || DicomMetaDictionary.uid();
+ o.ClinicalTrialTimePointID = options.ClinicalTrialTimePointID || "";
+ o.ClinicalTrialCoordinatingCenterName = options.ClinicalTrialCoordinatingCenterName || "";
+ o.ClinicalTrialSeriesID = options.ClinicalTrialSeriesID || "";
+ o.ImageComments = options.ImageComments || "NOT FOR CLINICAL USE";
+ o.ContentQualification = "RESEARCH";
+ this.referencedDatasets = datasets; // list of one or more dicom-like object instances
+
+ this.referencedDataset = this.referencedDatasets[0];
+ this.dataset = {
+ _vrMap: this.referencedDataset._vrMap,
+ _meta: this.referencedDataset._meta
+ };
+ this.derive();
+ }
+
+ _createClass(DerivedDataset, [{
+ key: "assignToDataset",
+ value: function assignToDataset(data) {
+ var _this = this;
+
+ Object.keys(data).forEach(function (key) {
+ return _this.dataset[key] = data[key];
+ });
+ }
+ }, {
+ key: "assignFromReference",
+ value: function assignFromReference(tags) {
+ var _this2 = this;
+
+ tags.forEach(function (tag) {
+ return _this2.dataset[tag] = _this2.referencedDataset[tag] || "";
+ });
+ }
+ }, {
+ key: "assignFromOptions",
+ value: function assignFromOptions(tags) {
+ var _this3 = this;
+
+ tags.forEach(function (tag) {
+ return _this3.dataset[tag] = _this3.options[tag] || "";
+ });
+ }
+ }, {
+ key: "derive",
+ value: function derive() {
+ // common for all instances in study
+ this.assignFromReference(["AccessionNumber", "ReferringPhysicianName", "StudyDate", "StudyID", "StudyTime", "PatientName", "PatientID", "PatientBirthDate", "PatientSex", "PatientAge", "StudyInstanceUID", "StudyID"]);
+ this.assignFromOptions(["Manufacturer", "SoftwareVersions", "DeviceSerialNumber", "ManufacturerModelName", "SeriesDescription", "SeriesNumber", "ImageComments", "SeriesDate", "SeriesTime", "ContentDate", "ContentTime", "ContentQualification", "SOPInstanceUID", "SeriesInstanceUID"]);
+ }
+ }], [{
+ key: "copyDataset",
+ value: function copyDataset(dataset) {
+ // copies everything but the buffers
+ return JSON.parse(JSON.stringify(dataset));
+ }
+ }]);
+
+ return DerivedDataset;
+ }();
+
+ var DerivedPixels = /*#__PURE__*/function (_DerivedDataset) {
+ _inherits(DerivedPixels, _DerivedDataset);
+
+ var _super = _createSuper(DerivedPixels);
+
+ function DerivedPixels(datasets) {
+ var _this;
+
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, DerivedPixels);
+
+ _this = _super.call(this, datasets, options);
+ var o = _this.options;
+ o.ContentLabel = options.ContentLabel || "";
+ o.ContentDescription = options.ContentDescription || "";
+ o.ContentCreatorName = options.ContentCreatorName || "";
+ return _this;
+ } // this assumes a normalized multiframe input and will create
+ // a multiframe derived image
+
+
+ _createClass(DerivedPixels, [{
+ key: "derive",
+ value: function derive() {
+ _get(_getPrototypeOf(DerivedPixels.prototype), "derive", this).call(this);
+
+ this.assignToDataset({
+ ImageType: ["DERIVED", "PRIMARY"],
+ LossyImageCompression: "00",
+ InstanceNumber: "1"
+ });
+ this.assignFromReference(["SOPClassUID", "Modality", "FrameOfReferenceUID", "PositionReferenceIndicator", "NumberOfFrames", "Rows", "Columns", "SamplesPerPixel", "PhotometricInterpretation", "BitsStored", "HighBit"]);
+ this.assignFromOptions(["ContentLabel", "ContentDescription", "ContentCreatorName"]); //
+ // TODO: more carefully copy only PixelMeasures and related
+ // TODO: add derivation references
+ //
+
+ if (this.referencedDataset.SharedFunctionalGroupsSequence) {
+ this.dataset.SharedFunctionalGroupsSequence = DerivedDataset.copyDataset(this.referencedDataset.SharedFunctionalGroupsSequence);
+ }
+
+ if (this.referencedDataset.PerFrameFunctionalGroupsSequence) {
+ this.dataset.PerFrameFunctionalGroupsSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence);
+ } // make an array of zeros for the pixels
+
+
+ this.dataset.PixelData = new ArrayBuffer(this.referencedDataset.PixelData.byteLength);
+ }
+ }]);
+
+ return DerivedPixels;
+ }(DerivedDataset);
+
+ var DerivedImage = /*#__PURE__*/function (_DerivedPixels) {
+ _inherits(DerivedImage, _DerivedPixels);
+
+ var _super = _createSuper(DerivedImage);
+
+ function DerivedImage(datasets) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, DerivedImage);
+
+ return _super.call(this, datasets, options);
+ }
+
+ _createClass(DerivedImage, [{
+ key: "derive",
+ value: function derive() {
+ _get(_getPrototypeOf(DerivedImage.prototype), "derive", this).call(this);
+
+ this.assignFromReference(["WindowCenter", "WindowWidth", "BitsAllocated", "PixelRepresentation", "BodyPartExamined", "Laterality", "PatientPosition", "RescaleSlope", "RescaleIntercept", "PixelPresentation", "VolumetricProperties", "VolumeBasedCalculationTechnique", "PresentationLUTShape"]);
+ }
+ }]);
+
+ return DerivedImage;
+ }(DerivedPixels);
+
+ var Normalizer = /*#__PURE__*/function () {
+ function Normalizer(datasets) {
+ _classCallCheck(this, Normalizer);
+
+ this.datasets = datasets; // one or more dicom-like object instances
+
+ this.dataset = undefined; // a normalized multiframe dicom object instance
+ }
+
+ _createClass(Normalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ return "No normalization defined";
+ }
+ }], [{
+ key: "consistentSOPClassUIDs",
+ value: function consistentSOPClassUIDs(datasets) {
+ // return sopClassUID if all exist and match, otherwise undefined
+ var sopClassUID;
+ datasets.forEach(function (dataset) {
+ if (!dataset.SOPClassUID) {
+ return undefined;
+ }
+
+ if (!sopClassUID) {
+ sopClassUID = dataset.SOPClassUID;
+ }
+
+ if (dataset.SOPClassUID !== sopClassUID) {
+ log.error("inconsistent sopClassUIDs: ", dataset.SOPClassUID, sopClassUID);
+ return undefined;
+ }
+ });
+ return sopClassUID;
+ }
+ }, {
+ key: "normalizerForSOPClassUID",
+ value: function normalizerForSOPClassUID(sopClassUID) {
+ sopClassUID = sopClassUID.replace(/[^0-9.]/g, ""); // TODO: clean all VRs as part of normalizing
+
+ var toUID = DicomMetaDictionary.sopClassUIDsByName;
+ var sopClassUIDMap = {};
+ sopClassUIDMap[toUID.CTImage] = CTImageNormalizer;
+ sopClassUIDMap[toUID.ParametricMapStorage] = PMImageNormalizer;
+ sopClassUIDMap[toUID.MRImage] = MRImageNormalizer;
+ sopClassUIDMap[toUID.EnhancedCTImage] = EnhancedCTImageNormalizer;
+ sopClassUIDMap[toUID.LegacyConvertedEnhancedCTImage] = EnhancedCTImageNormalizer;
+ sopClassUIDMap[toUID.EnhancedMRImage] = EnhancedMRImageNormalizer;
+ sopClassUIDMap[toUID.LegacyConvertedEnhancedMRImage] = EnhancedMRImageNormalizer;
+ sopClassUIDMap[toUID.EnhancedUSVolume] = EnhancedUSVolumeNormalizer;
+ sopClassUIDMap[toUID.PETImage] = PETImageNormalizer;
+ sopClassUIDMap[toUID.EnhancedPETImage] = PETImageNormalizer;
+ sopClassUIDMap[toUID.LegacyConvertedEnhancedPETImage] = PETImageNormalizer;
+ sopClassUIDMap[toUID.Segmentation] = SEGImageNormalizer;
+ sopClassUIDMap[toUID.DeformableSpatialRegistration] = DSRNormalizer;
+ return sopClassUIDMap[sopClassUID];
+ }
+ }, {
+ key: "isMultiframeSOPClassUID",
+ value: function isMultiframeSOPClassUID(sopClassUID) {
+ var toUID = DicomMetaDictionary.sopClassUIDsByName;
+ var multiframeSOPClasses = [toUID.EnhancedMRImage, toUID.LegacyConvertedEnhancedMRImage, toUID.EnhancedCTImage, toUID.LegacyConvertedEnhancedCTImage, toUID.EnhancedUSVolume, toUID.EnhancedPETImage, toUID.LegacyConvertedEnhancedPETImage, toUID.Segmentation, toUID.ParametricMapStorage];
+ return multiframeSOPClasses.indexOf(sopClassUID) !== -1;
+ }
+ }, {
+ key: "isMultiframeDataset",
+ value: function isMultiframeDataset() {
+ var ds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.dataset;
+ var sopClassUID = ds.SOPClassUID.replace(/[^0-9.]/g, ""); // TODO: clean all VRs as part of normalizing
+
+ return Normalizer.isMultiframeSOPClassUID(sopClassUID);
+ }
+ }, {
+ key: "normalizeToDataset",
+ value: function normalizeToDataset(datasets) {
+ var sopClassUID = Normalizer.consistentSOPClassUIDs(datasets);
+ var normalizerClass = Normalizer.normalizerForSOPClassUID(sopClassUID);
+
+ if (!normalizerClass) {
+ log.error("no normalizerClass for ", sopClassUID);
+ return undefined;
+ }
+
+ var normalizer = new normalizerClass(datasets);
+ normalizer.normalize();
+ return normalizer.dataset;
+ }
+ }]);
+
+ return Normalizer;
+ }();
+
+ var ImageNormalizer = /*#__PURE__*/function (_Normalizer) {
+ _inherits(ImageNormalizer, _Normalizer);
+
+ var _super = _createSuper(ImageNormalizer);
+
+ function ImageNormalizer() {
+ _classCallCheck(this, ImageNormalizer);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(ImageNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ this.convertToMultiframe();
+ this.normalizeMultiframe();
+ }
+ }, {
+ key: "convertToMultiframe",
+ value: function convertToMultiframe() {
+ if (this.datasets.length === 1 && Normalizer.isMultiframeDataset(this.datasets[0])) {
+ // already a multiframe, so just use it
+ this.dataset = this.datasets[0];
+ return;
+ }
+
+ this.derivation = new DerivedImage(this.datasets);
+ this.dataset = this.derivation.dataset;
+ var ds = this.dataset; // create a new multiframe from the source datasets
+ // fill in only those elements required to make a valid image
+ // for volumetric processing
+
+ var referenceDataset = this.datasets[0];
+ ds.NumberOfFrames = this.datasets.length; // TODO: develop sets of elements to copy over in loops
+
+ ds.SOPClassUID = referenceDataset.SOPClassUID;
+ ds.Rows = referenceDataset.Rows;
+ ds.Columns = referenceDataset.Columns;
+ ds.BitsAllocated = referenceDataset.BitsAllocated;
+ ds.PixelRepresentation = referenceDataset.PixelRepresentation;
+ ds.RescaleSlope = referenceDataset.RescaleSlope || "1";
+ ds.RescaleIntercept = referenceDataset.RescaleIntercept || "0"; //ds.BurnedInAnnotation = referenceDataset.BurnedInAnnotation || "YES";
+ // sort
+ // https://github.com/pieper/Slicer3/blob/master/Base/GUI/Tcl/LoadVolume.tcl
+ // TODO: add spacing checks:
+ // https://github.com/Slicer/Slicer/blob/master/Modules/Scripted/DICOMPlugins/DICOMScalarVolumePlugin.py#L228-L250
+ // TODO: put this information into the Shared and PerFrame functional groups
+ // TODO: sorting of frames could happen in normalizeMultiframe instead, since other
+ // multiframe converters may not sort the images
+ // TODO: sorting can be seen as part of generation of the Dimension Multiframe Dimension Module
+ // and should really be done in an acquisition-specific way (e.g. for DCE)
+
+ var referencePosition = referenceDataset.ImagePositionPatient;
+ var rowVector = referenceDataset.ImageOrientationPatient.slice(0, 3);
+ var columnVector = referenceDataset.ImageOrientationPatient.slice(3, 6);
+ var scanAxis = ImageNormalizer.vec3CrossProduct(rowVector, columnVector);
+ var distanceDatasetPairs = [];
+ this.datasets.forEach(function (dataset) {
+ var position = dataset.ImagePositionPatient.slice();
+ var positionVector = ImageNormalizer.vec3Subtract(position, referencePosition);
+ var distance = ImageNormalizer.vec3Dot(positionVector, scanAxis);
+ distanceDatasetPairs.push([distance, dataset]);
+ });
+ distanceDatasetPairs.sort(function (a, b) {
+ return b[0] - a[0];
+ }); // assign array buffers
+
+ if (ds.BitsAllocated !== 16) {
+ log.error("Only works with 16 bit data, not " + String(this.dataset.BitsAllocated));
+ }
+
+ if (referenceDataset._vrMap && !referenceDataset._vrMap.PixelData) {
+ log.warn("No vr map given for pixel data, using OW");
+ ds._vrMap = {
+ PixelData: "OW"
+ };
+ } else {
+ ds._vrMap = {
+ PixelData: referenceDataset._vrMap.PixelData
+ };
+ }
+
+ var frameSize = referenceDataset.PixelData.byteLength;
+ ds.PixelData = new ArrayBuffer(ds.NumberOfFrames * frameSize);
+ var frame = 0;
+ distanceDatasetPairs.forEach(function (pair) {
+ var dataset = pair[1];
+ var pixels = new Uint16Array(dataset.PixelData);
+ var frameView = new Uint16Array(ds.PixelData, frame * frameSize, frameSize / 2);
+
+ try {
+ frameView.set(pixels);
+ } catch (e) {
+ if (e instanceof RangeError) {
+ var message = "Error inserting pixels in PixelData\n" + "frameSize ".concat(frameSize, "\n") + "NumberOfFrames ".concat(ds.NumberOfFrames, "\n") + "pair ".concat(pair, "\n") + "dataset PixelData size ".concat(dataset.PixelData.length);
+ log.error(message);
+ }
+ }
+
+ frame++;
+ });
+
+ if (ds.NumberOfFrames < 2) {
+ // TODO
+ log.error("Cannot populate shared groups uniquely without multiple frames");
+ }
+
+ var _distanceDatasetPairs = _slicedToArray(distanceDatasetPairs[0], 2),
+ distance0 = _distanceDatasetPairs[0],
+ dataset0 = _distanceDatasetPairs[1];
+
+ var distance1 = distanceDatasetPairs[1][0]; //
+ // make the functional groups
+ //
+ // shared
+
+ var SpacingBetweenSlices = Math.abs(distance1 - distance0);
+ ds.SharedFunctionalGroupsSequence = {
+ PlaneOrientationSequence: {
+ ImageOrientationPatient: dataset0.ImageOrientationPatient
+ },
+ PixelMeasuresSequence: {
+ PixelSpacing: dataset0.PixelSpacing,
+ SpacingBetweenSlices: SpacingBetweenSlices,
+ SliceThickness: SpacingBetweenSlices
+ }
+ };
+ ds.ReferencedSeriesSequence = {
+ SeriesInstanceUID: dataset0.SeriesInstanceUID,
+ ReferencedInstanceSequence: []
+ }; // per-frame
+
+ ds.PerFrameFunctionalGroupsSequence = []; // copy over each datasets window/level into the per-frame groups
+ // and set the referenced series uid
+
+ distanceDatasetPairs.forEach(function (pair) {
+ var dataset = pair[1];
+ ds.PerFrameFunctionalGroupsSequence.push({
+ PlanePositionSequence: {
+ ImagePositionPatient: dataset.ImagePositionPatient
+ },
+ FrameVOILUTSequence: {
+ WindowCenter: dataset.WindowCenter,
+ WindowWidth: dataset.WindowWidth
+ }
+ });
+ ds.ReferencedSeriesSequence.ReferencedInstanceSequence.push({
+ ReferencedSOPClassUID: dataset.SOPClassUID,
+ ReferencedSOPInstanceUID: dataset.SOPInstanceUID
+ });
+ });
+ var dimensionUID = DicomMetaDictionary.uid();
+ this.dataset.DimensionOrganizationSequence = {
+ DimensionOrganizationUID: dimensionUID
+ };
+ this.dataset.DimensionIndexSequence = [{
+ DimensionOrganizationUID: dimensionUID,
+ DimensionIndexPointer: 2097202,
+ FunctionalGroupPointer: 2134291,
+ // PlanePositionSequence
+ DimensionDescriptionLabel: "ImagePositionPatient"
+ }];
+ }
+ }, {
+ key: "normalizeMultiframe",
+ value: function normalizeMultiframe() {
+ var ds = this.dataset;
+
+ if (!ds.NumberOfFrames) {
+ log.error("Missing number or frames not supported");
+ return;
+ }
+
+ if (!ds.PixelRepresentation) {
+ // Required tag: guess signed
+ ds.PixelRepresentation = 1;
+ }
+
+ if (!ds.StudyID || ds.StudyID === "") {
+ // Required tag: fill in if needed
+ ds.StudyID = "No Study ID";
+ }
+
+ var validLateralities = ["R", "L"];
+
+ if (validLateralities.indexOf(ds.Laterality) === -1) {
+ delete ds.Laterality;
+ }
+
+ if (!ds.PresentationLUTShape) {
+ ds.PresentationLUTShape = "IDENTITY";
+ }
+
+ if (!ds.SharedFunctionalGroupsSequence) {
+ log.error("Can only process multiframe data with SharedFunctionalGroupsSequence");
+ } // TODO: special case!
+
+
+ if (ds.BodyPartExamined === "PROSTATE") {
+ ds.SharedFunctionalGroupsSequence.FrameAnatomySequence = {
+ AnatomicRegionSequence: {
+ CodeValue: "T-9200B",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Prostate"
+ },
+ FrameLaterality: "U"
+ };
+ }
+
+ var rescaleIntercept = ds.RescaleIntercept || 0;
+ var rescaleSlope = ds.RescaleSlope || 1;
+ ds.SharedFunctionalGroupsSequence.PixelValueTransformationSequence = {
+ RescaleIntercept: rescaleIntercept,
+ RescaleSlope: rescaleSlope,
+ RescaleType: "US"
+ };
+ var frameNumber = 1;
+ this.datasets.forEach(function (dataset) {
+ if (ds.NumberOfFrames === 1) ds.PerFrameFunctionalGroupsSequence = [ds.PerFrameFunctionalGroupsSequence];
+ ds.PerFrameFunctionalGroupsSequence[frameNumber - 1].FrameContentSequence = {
+ FrameAcquisitionDuration: 0,
+ StackID: 1,
+ InStackPositionNumber: frameNumber,
+ DimensionIndexValues: frameNumber
+ };
+ var frameTime = dataset.AcquisitionDate + dataset.AcquisitionTime;
+
+ if (!isNaN(frameTime)) {
+ var frameContentSequence = ds.PerFrameFunctionalGroupsSequence[frameNumber - 1].FrameContentSequence;
+ frameContentSequence.FrameAcquisitionDateTime = frameTime;
+ frameContentSequence.FrameReferenceDateTime = frameTime;
+ }
+
+ frameNumber++;
+ }); //
+ // TODO: convert this to shared functional group not top level element
+ //
+
+ if (ds.WindowCenter && ds.WindowWidth) {
+ // if they exist as single values, make them lists for consistency
+ if (!Array.isArray(ds.WindowCenter)) {
+ ds.WindowCenter = [ds.WindowCenter];
+ }
+
+ if (!Array.isArray(ds.WindowWidth)) {
+ ds.WindowWidth = [ds.WindowWidth];
+ }
+ }
+
+ if (!ds.WindowCenter || !ds.WindowWidth) {
+ // if they don't exist, make them empty lists and try to initialize them
+ ds.WindowCenter = []; // both must exist and be the same length
+
+ ds.WindowWidth = []; // provide a volume-level window/level guess (mean of per-frame)
+
+ if (ds.PerFrameFunctionalGroupsSequence) {
+ var wcww = {
+ center: 0,
+ width: 0,
+ count: 0
+ };
+ ds.PerFrameFunctionalGroupsSequence.forEach(function (functionalGroup) {
+ if (functionalGroup.FrameVOILUT) {
+ var wc = functionalGroup.FrameVOILUTSequence.WindowCenter;
+ var ww = functionalGroup.FrameVOILUTSequence.WindowWidth;
+
+ if (functionalGroup.FrameVOILUTSequence && wc && ww) {
+ if (Array.isArray(wc)) {
+ wc = wc[0];
+ }
+
+ if (Array.isArray(ww)) {
+ ww = ww[0];
+ }
+
+ wcww.center += Number(wc);
+ wcww.width += Number(ww);
+ wcww.count++;
+ }
+ }
+ });
+
+ if (wcww.count > 0) {
+ ds.WindowCenter.push(String(wcww.center / wcww.count));
+ ds.WindowWidth.push(String(wcww.width / wcww.count));
+ }
+ }
+ } // last gasp, pick an arbitrary default
+
+
+ if (ds.WindowCenter.length === 0) {
+ ds.WindowCenter = [300];
+ }
+
+ if (ds.WindowWidth.length === 0) {
+ ds.WindowWidth = [500];
+ }
+ }
+ }], [{
+ key: "vec3CrossProduct",
+ value: function vec3CrossProduct(a, b) {
+ var ax = a[0],
+ ay = a[1],
+ az = a[2],
+ bx = b[0],
+ by = b[1],
+ bz = b[2];
+ var out = [];
+ out[0] = ay * bz - az * by;
+ out[1] = az * bx - ax * bz;
+ out[2] = ax * by - ay * bx;
+ return out;
+ }
+ }, {
+ key: "vec3Subtract",
+ value: function vec3Subtract(a, b) {
+ var out = [];
+ out[0] = a[0] - b[0];
+ out[1] = a[1] - b[1];
+ out[2] = a[2] - b[2];
+ return out;
+ }
+ }, {
+ key: "vec3Dot",
+ value: function vec3Dot(a, b) {
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+ }
+ }]);
+
+ return ImageNormalizer;
+ }(Normalizer);
+
+ var MRImageNormalizer = /*#__PURE__*/function (_ImageNormalizer) {
+ _inherits(MRImageNormalizer, _ImageNormalizer);
+
+ var _super2 = _createSuper(MRImageNormalizer);
+
+ function MRImageNormalizer() {
+ _classCallCheck(this, MRImageNormalizer);
+
+ return _super2.apply(this, arguments);
+ }
+
+ _createClass(MRImageNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ _get(_getPrototypeOf(MRImageNormalizer.prototype), "normalize", this).call(this); // TODO: make specialization for LegacyConverted vs normal EnhanceMRImage
+ //let toUID = DicomMetaDictionary.sopClassUIDsByName;
+
+
+ this.dataset.SOPClassUID = "LegacyConvertedEnhancedMRImage"; //this.dataset.SOPClassUID = toUID.EnhancedMRImage;
+ }
+ }, {
+ key: "normalizeMultiframe",
+ value: function normalizeMultiframe() {
+ _get(_getPrototypeOf(MRImageNormalizer.prototype), "normalizeMultiframe", this).call(this);
+
+ var ds = this.dataset;
+
+ if (!ds.ImageType || !ds.ImageType.constructor || ds.ImageType.constructor.name != "Array" || ds.ImageType.length != 4) {
+ ds.ImageType = ["ORIGINAL", "PRIMARY", "OTHER", "NONE"];
+ }
+
+ ds.SharedFunctionalGroupsSequence.MRImageFrameTypeSequence = {
+ FrameType: ds.ImageType,
+ PixelPresentation: "MONOCHROME",
+ VolumetricProperties: "VOLUME",
+ VolumeBasedCalculationTechnique: "NONE",
+ ComplexImageComponent: "MAGNITUDE",
+ AcquisitionContrast: "UNKNOWN"
+ };
+ }
+ }]);
+
+ return MRImageNormalizer;
+ }(ImageNormalizer);
+
+ var EnhancedCTImageNormalizer = /*#__PURE__*/function (_ImageNormalizer2) {
+ _inherits(EnhancedCTImageNormalizer, _ImageNormalizer2);
+
+ var _super3 = _createSuper(EnhancedCTImageNormalizer);
+
+ function EnhancedCTImageNormalizer() {
+ _classCallCheck(this, EnhancedCTImageNormalizer);
+
+ return _super3.apply(this, arguments);
+ }
+
+ _createClass(EnhancedCTImageNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ _get(_getPrototypeOf(EnhancedCTImageNormalizer.prototype), "normalize", this).call(this);
+ }
+ }]);
+
+ return EnhancedCTImageNormalizer;
+ }(ImageNormalizer);
+
+ var EnhancedMRImageNormalizer = /*#__PURE__*/function (_ImageNormalizer3) {
+ _inherits(EnhancedMRImageNormalizer, _ImageNormalizer3);
+
+ var _super4 = _createSuper(EnhancedMRImageNormalizer);
+
+ function EnhancedMRImageNormalizer() {
+ _classCallCheck(this, EnhancedMRImageNormalizer);
+
+ return _super4.apply(this, arguments);
+ }
+
+ _createClass(EnhancedMRImageNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ _get(_getPrototypeOf(EnhancedMRImageNormalizer.prototype), "normalize", this).call(this);
+ }
+ }]);
+
+ return EnhancedMRImageNormalizer;
+ }(ImageNormalizer);
+
+ var EnhancedUSVolumeNormalizer = /*#__PURE__*/function (_ImageNormalizer4) {
+ _inherits(EnhancedUSVolumeNormalizer, _ImageNormalizer4);
+
+ var _super5 = _createSuper(EnhancedUSVolumeNormalizer);
+
+ function EnhancedUSVolumeNormalizer() {
+ _classCallCheck(this, EnhancedUSVolumeNormalizer);
+
+ return _super5.apply(this, arguments);
+ }
+
+ _createClass(EnhancedUSVolumeNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ _get(_getPrototypeOf(EnhancedUSVolumeNormalizer.prototype), "normalize", this).call(this);
+ }
+ }]);
+
+ return EnhancedUSVolumeNormalizer;
+ }(ImageNormalizer);
+
+ var CTImageNormalizer = /*#__PURE__*/function (_ImageNormalizer5) {
+ _inherits(CTImageNormalizer, _ImageNormalizer5);
+
+ var _super6 = _createSuper(CTImageNormalizer);
+
+ function CTImageNormalizer() {
+ _classCallCheck(this, CTImageNormalizer);
+
+ return _super6.apply(this, arguments);
+ }
+
+ _createClass(CTImageNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ _get(_getPrototypeOf(CTImageNormalizer.prototype), "normalize", this).call(this); // TODO: provide option at export to swap in LegacyConverted UID
+
+
+ var toUID = DicomMetaDictionary.sopClassUIDsByName; //this.dataset.SOPClassUID = "LegacyConvertedEnhancedCTImage";
+
+ this.dataset.SOPClassUID = toUID.EnhancedCTImage;
+ }
+ }]);
+
+ return CTImageNormalizer;
+ }(ImageNormalizer);
+
+ var PETImageNormalizer = /*#__PURE__*/function (_ImageNormalizer6) {
+ _inherits(PETImageNormalizer, _ImageNormalizer6);
+
+ var _super7 = _createSuper(PETImageNormalizer);
+
+ function PETImageNormalizer() {
+ _classCallCheck(this, PETImageNormalizer);
+
+ return _super7.apply(this, arguments);
+ }
+
+ _createClass(PETImageNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ _get(_getPrototypeOf(PETImageNormalizer.prototype), "normalize", this).call(this); // TODO: provide option at export to swap in LegacyConverted UID
+
+
+ var toUID = DicomMetaDictionary.sopClassUIDsByName; //this.dataset.SOPClassUID = "LegacyConvertedEnhancedPETImage";
+
+ this.dataset.SOPClassUID = toUID.EnhancedPETImage;
+ }
+ }]);
+
+ return PETImageNormalizer;
+ }(ImageNormalizer);
+
+ var SEGImageNormalizer = /*#__PURE__*/function (_ImageNormalizer7) {
+ _inherits(SEGImageNormalizer, _ImageNormalizer7);
+
+ var _super8 = _createSuper(SEGImageNormalizer);
+
+ function SEGImageNormalizer() {
+ _classCallCheck(this, SEGImageNormalizer);
+
+ return _super8.apply(this, arguments);
+ }
+
+ _createClass(SEGImageNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ _get(_getPrototypeOf(SEGImageNormalizer.prototype), "normalize", this).call(this);
+ }
+ }]);
+
+ return SEGImageNormalizer;
+ }(ImageNormalizer);
+
+ var PMImageNormalizer = /*#__PURE__*/function (_ImageNormalizer8) {
+ _inherits(PMImageNormalizer, _ImageNormalizer8);
+
+ var _super9 = _createSuper(PMImageNormalizer);
+
+ function PMImageNormalizer() {
+ _classCallCheck(this, PMImageNormalizer);
+
+ return _super9.apply(this, arguments);
+ }
+
+ _createClass(PMImageNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ _get(_getPrototypeOf(PMImageNormalizer.prototype), "normalize", this).call(this);
+
+ var ds = this.datasets[0];
+
+ if (ds.BitsAllocated !== 32) {
+ log.error("Only works with 32 bit data, not " + String(ds.BitsAllocated));
+ }
+ }
+ }]);
+
+ return PMImageNormalizer;
+ }(ImageNormalizer);
+
+ var DSRNormalizer = /*#__PURE__*/function (_Normalizer2) {
+ _inherits(DSRNormalizer, _Normalizer2);
+
+ var _super10 = _createSuper(DSRNormalizer);
+
+ function DSRNormalizer() {
+ _classCallCheck(this, DSRNormalizer);
+
+ return _super10.apply(this, arguments);
+ }
+
+ _createClass(DSRNormalizer, [{
+ key: "normalize",
+ value: function normalize() {
+ this.dataset = this.datasets[0]; // only one dataset per series and for now we assume it is normalized
+ }
+ }]);
+
+ return DSRNormalizer;
+ }(Normalizer);
+
+ var Segmentation$4 = /*#__PURE__*/function (_DerivedPixels) {
+ _inherits(Segmentation, _DerivedPixels);
+
+ var _super = _createSuper(Segmentation);
+
+ function Segmentation(datasets) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {
+ includeSliceSpacing: true
+ };
+
+ _classCallCheck(this, Segmentation);
+
+ return _super.call(this, datasets, options);
+ }
+
+ _createClass(Segmentation, [{
+ key: "derive",
+ value: function derive() {
+ _get(_getPrototypeOf(Segmentation.prototype), "derive", this).call(this);
+
+ this.assignToDataset({
+ SOPClassUID: DicomMetaDictionary.sopClassUIDsByName.Segmentation,
+ Modality: "SEG",
+ SamplesPerPixel: "1",
+ PhotometricInterpretation: "MONOCHROME2",
+ BitsAllocated: "1",
+ BitsStored: "1",
+ HighBit: "0",
+ PixelRepresentation: "0",
+ LossyImageCompression: "00",
+ SegmentationType: "BINARY",
+ ContentLabel: "SEGMENTATION"
+ });
+ var dimensionUID = DicomMetaDictionary.uid();
+ this.dataset.DimensionOrganizationSequence = {
+ DimensionOrganizationUID: dimensionUID
+ };
+ this.dataset.DimensionIndexSequence = [{
+ DimensionOrganizationUID: dimensionUID,
+ DimensionIndexPointer: 6422539,
+ FunctionalGroupPointer: 6422538,
+ // SegmentIdentificationSequence
+ DimensionDescriptionLabel: "ReferencedSegmentNumber"
+ }, {
+ DimensionOrganizationUID: dimensionUID,
+ DimensionIndexPointer: 2097202,
+ FunctionalGroupPointer: 2134291,
+ // PlanePositionSequence
+ DimensionDescriptionLabel: "ImagePositionPatient"
+ }];
+ this.dataset.SegmentSequence = []; // TODO: check logic here.
+ // If the referenced dataset itself references a series, then copy.
+ // Otherwise, reference the dataset itself.
+ // This should allow Slicer and others to get the correct original
+ // images when loading Legacy Converted Images, but it's a workaround
+ // that really doesn't belong here.
+
+ if (this.referencedDataset.ReferencedSeriesSequence) {
+ this.dataset.ReferencedSeriesSequence = DerivedDataset.copyDataset(this.referencedDataset.ReferencedSeriesSequence);
+ } else {
+ var ReferencedInstanceSequence = [];
+
+ for (var i = 0; i < this.referencedDatasets.length; i++) {
+ ReferencedInstanceSequence.push({
+ ReferencedSOPClassUID: this.referencedDatasets[i].SOPClassUID,
+ ReferencedSOPInstanceUID: this.referencedDatasets[i].SOPInstanceUID
+ });
+ }
+
+ this.dataset.ReferencedSeriesSequence = {
+ SeriesInstanceUID: this.referencedDataset.SeriesInstanceUID,
+ StudyInstanceUID: this.referencedDataset.StudyInstanceUID,
+ ReferencedInstanceSequence: ReferencedInstanceSequence
+ };
+ }
+
+ if (!this.options.includeSliceSpacing) {
+ // per dciodvfy this should not be included, but dcmqi/Slicer requires it
+ delete this.dataset.SharedFunctionalGroupsSequence.PixelMeasuresSequence.SpacingBetweenSlices;
+ }
+
+ if (this.dataset.SharedFunctionalGroupsSequence.PixelValueTransformationSequence) {
+ // If derived from a CT, this shouldn't be left in the SEG.
+ delete this.dataset.SharedFunctionalGroupsSequence.PixelValueTransformationSequence;
+ } // The pixelData array needs to be defined once you know how many frames you'll have.
+
+
+ this.dataset.PixelData = undefined;
+ this.dataset.NumberOfFrames = 0;
+ this.dataset.PerFrameFunctionalGroupsSequence = [];
+ }
+ /**
+ * setNumberOfFrames - Sets the number of frames of the segmentation object
+ * and allocates (non-bitpacked) memory for the PixelData for constuction.
+ *
+ * @param {type} NumberOfFrames The number of segmentation frames.
+ */
+
+ }, {
+ key: "setNumberOfFrames",
+ value: function setNumberOfFrames(NumberOfFrames) {
+ var dataset = this.dataset;
+ dataset.NumberOfFrames = NumberOfFrames;
+ dataset.PixelData = new ArrayBuffer(dataset.Rows * dataset.Columns * NumberOfFrames);
+ }
+ /**
+ * bitPackPixelData - Bitpacks the pixeldata, should be called after all
+ * segments are addded.
+ *
+ * @returns {type} description
+ */
+
+ }, {
+ key: "bitPackPixelData",
+ value: function bitPackPixelData() {
+ if (this.isBitpacked) {
+ console.warn("This.bitPackPixelData has already been called, it should only be called once, when all frames have been added. Exiting.");
+ }
+
+ var dataset = this.dataset;
+ var unpackedPixelData = dataset.PixelData;
+ var uInt8ViewUnpackedPixelData = new Uint8Array(unpackedPixelData);
+ var bitPackedPixelData = BitArray.pack(uInt8ViewUnpackedPixelData);
+ dataset.PixelData = bitPackedPixelData.buffer;
+ this.isBitpacked = true;
+ }
+ /**
+ * addSegmentFromLabelmap - Adds a segment to the dataset,
+ * where the labelmaps are a set of 2D labelmaps, from which to extract the binary maps.
+ *
+ * @param {type} Segment The segment metadata.
+ * @param {Uint8Array[]} labelmaps labelmap arrays for each index of referencedFrameNumbers.
+ * @param {number} segmentIndexInLabelmap The segment index to extract from the labelmap
+ * (might be different to the segment metadata depending on implementation).
+ * @param {number[]} referencedFrameNumbers The frames that the
+ * segmentation references.
+ *
+ */
+
+ }, {
+ key: "addSegmentFromLabelmap",
+ value: function addSegmentFromLabelmap(Segment, labelmaps, segmentIndexInLabelmap, referencedFrameNumbers) {
+ if (this.dataset.NumberOfFrames === 0) {
+ throw new Error("Must set the total number of frames via setNumberOfFrames() before adding segments to the segmentation.");
+ }
+
+ this._addSegmentPixelDataFromLabelmaps(labelmaps, segmentIndexInLabelmap);
+
+ var ReferencedSegmentNumber = this._addSegmentMetadata(Segment);
+
+ this._addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers);
+ }
+ }, {
+ key: "_addSegmentPixelDataFromLabelmaps",
+ value: function _addSegmentPixelDataFromLabelmaps(labelmaps, segmentIndex) {
+ var dataset = this.dataset;
+ var existingFrames = dataset.PerFrameFunctionalGroupsSequence.length;
+ var sliceLength = dataset.Rows * dataset.Columns;
+ var byteOffset = existingFrames * sliceLength;
+ var pixelDataUInt8View = new Uint8Array(dataset.PixelData, byteOffset, labelmaps.length * sliceLength);
+
+ var occupiedValue = this._getOccupiedValue();
+
+ for (var l = 0; l < labelmaps.length; l++) {
+ var labelmap = labelmaps[l];
+
+ for (var i = 0; i < labelmap.length; i++) {
+ if (labelmap[i] === segmentIndex) {
+ pixelDataUInt8View[l * sliceLength + i] = occupiedValue;
+ }
+ }
+ }
+ }
+ }, {
+ key: "_getOccupiedValue",
+ value: function _getOccupiedValue() {
+ if (this.dataset.SegmentationType === "FRACTIONAL") {
+ return 255;
+ }
+
+ return 1;
+ }
+ /**
+ * addSegment - Adds a segment to the dataset.
+ *
+ * @param {type} Segment The segment metadata.
+ * @param {Uint8Array} pixelData The pixelData array containing all frames
+ * of the segmentation.
+ * @param {Number[]} referencedFrameNumbers The frames that the
+ * segmentation references.
+ *
+ */
+
+ }, {
+ key: "addSegment",
+ value: function addSegment(Segment, pixelData, referencedFrameNumbers) {
+ if (this.dataset.NumberOfFrames === 0) {
+ throw new Error("Must set the total number of frames via setNumberOfFrames() before adding segments to the segmentation.");
+ }
+
+ this._addSegmentPixelData(pixelData);
+
+ var ReferencedSegmentNumber = this._addSegmentMetadata(Segment);
+
+ this._addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers);
+ }
+ }, {
+ key: "_addSegmentPixelData",
+ value: function _addSegmentPixelData(pixelData) {
+ var dataset = this.dataset;
+ var existingFrames = dataset.PerFrameFunctionalGroupsSequence.length;
+ var sliceLength = dataset.Rows * dataset.Columns;
+ var byteOffset = existingFrames * sliceLength;
+ var pixelDataUInt8View = new Uint8Array(dataset.PixelData, byteOffset, pixelData.length);
+
+ for (var i = 0; i < pixelData.length; i++) {
+ pixelDataUInt8View[i] = pixelData[i];
+ }
+ }
+ }, {
+ key: "_addPerFrameFunctionalGroups",
+ value: function _addPerFrameFunctionalGroups(ReferencedSegmentNumber, referencedFrameNumbers) {
+ var PerFrameFunctionalGroupsSequence = this.dataset.PerFrameFunctionalGroupsSequence;
+ var ReferencedSeriesSequence = this.referencedDataset.ReferencedSeriesSequence;
+
+ for (var i = 0; i < referencedFrameNumbers.length; i++) {
+ var frameNumber = referencedFrameNumbers[i];
+ var perFrameFunctionalGroups = {};
+ perFrameFunctionalGroups.PlanePositionSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence[frameNumber - 1].PlanePositionSequence); // If the PlaneOrientationSequence is not in the SharedFunctionalGroupsSequence,
+ // extract it from the PerFrameFunctionalGroupsSequence.
+
+ if (!this.dataset.SharedFunctionalGroupsSequence.PlaneOrientationSequence) {
+ perFrameFunctionalGroups.PlaneOrientationSequence = DerivedDataset.copyDataset(this.referencedDataset.PerFrameFunctionalGroupsSequence[frameNumber - 1].PlaneOrientationSequence);
+ }
+
+ perFrameFunctionalGroups.FrameContentSequence = {
+ DimensionIndexValues: [ReferencedSegmentNumber, frameNumber]
+ };
+ perFrameFunctionalGroups.SegmentIdentificationSequence = {
+ ReferencedSegmentNumber: ReferencedSegmentNumber
+ };
+ var ReferencedSOPClassUID = void 0;
+ var ReferencedSOPInstanceUID = void 0;
+ var ReferencedFrameNumber = void 0;
+
+ if (ReferencedSeriesSequence) {
+ var referencedInstanceSequenceI = ReferencedSeriesSequence.ReferencedInstanceSequence[frameNumber - 1];
+ ReferencedSOPClassUID = referencedInstanceSequenceI.ReferencedSOPClassUID;
+ ReferencedSOPInstanceUID = referencedInstanceSequenceI.ReferencedSOPInstanceUID;
+
+ if (Normalizer.isMultiframeSOPClassUID(ReferencedSOPClassUID)) {
+ ReferencedFrameNumber = frameNumber;
+ }
+ } else {
+ ReferencedSOPClassUID = this.referencedDataset.SOPClassUID;
+ ReferencedSOPInstanceUID = this.referencedDataset.SOPInstanceUID;
+ ReferencedFrameNumber = frameNumber;
+ }
+
+ if (ReferencedFrameNumber) {
+ perFrameFunctionalGroups.DerivationImageSequence = {
+ SourceImageSequence: {
+ ReferencedSOPClassUID: ReferencedSOPClassUID,
+ ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
+ ReferencedFrameNumber: ReferencedFrameNumber,
+ PurposeOfReferenceCodeSequence: {
+ CodeValue: "121322",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Source image for image processing operation"
+ }
+ },
+ DerivationCodeSequence: {
+ CodeValue: "113076",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Segmentation"
+ }
+ };
+ } else {
+ perFrameFunctionalGroups.DerivationImageSequence = {
+ SourceImageSequence: {
+ ReferencedSOPClassUID: ReferencedSOPClassUID,
+ ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
+ PurposeOfReferenceCodeSequence: {
+ CodeValue: "121322",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Source image for image processing operation"
+ }
+ },
+ DerivationCodeSequence: {
+ CodeValue: "113076",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Segmentation"
+ }
+ };
+ }
+
+ PerFrameFunctionalGroupsSequence.push(perFrameFunctionalGroups);
+ }
+ }
+ }, {
+ key: "_addSegmentMetadata",
+ value: function _addSegmentMetadata(Segment) {
+ if (!Segment.SegmentLabel || !Segment.SegmentedPropertyCategoryCodeSequence || !Segment.SegmentedPropertyTypeCodeSequence || !Segment.SegmentAlgorithmType) {
+ throw new Error("Segment does not contain all the required fields.");
+ } // Capitalise the SegmentAlgorithmType if it happens to be given in
+ // Lower/mixed case.
+
+
+ Segment.SegmentAlgorithmType = Segment.SegmentAlgorithmType.toUpperCase(); // Check SegmentAlgorithmType and SegmentAlgorithmName if necessary.
+
+ switch (Segment.SegmentAlgorithmType) {
+ case "AUTOMATIC":
+ case "SEMIAUTOMATIC":
+ if (!Segment.SegmentAlgorithmName) {
+ throw new Error("If the SegmentAlgorithmType is SEMIAUTOMATIC or AUTOMATIC,\n SegmentAlgorithmName must be provided");
+ }
+
+ break;
+
+ case "MANUAL":
+ break;
+
+ default:
+ throw new Error("SegmentAlgorithmType ".concat(Segment.SegmentAlgorithmType, " invalid."));
+ } // Deep copy, so we don't change the segment index stored in cornerstoneTools.
+
+
+ var SegmentSequence = this.dataset.SegmentSequence;
+ var SegmentAlgorithmType = Segment.SegmentAlgorithmType;
+ var reNumberedSegmentCopy = {
+ SegmentedPropertyCategoryCodeSequence: Segment.SegmentedPropertyCategoryCodeSequence,
+ SegmentNumber: (SegmentSequence.length + 1).toString(),
+ SegmentLabel: Segment.SegmentLabel,
+ SegmentAlgorithmType: SegmentAlgorithmType,
+ RecommendedDisplayCIELabValue: Segment.RecommendedDisplayCIELabValue,
+ SegmentedPropertyTypeCodeSequence: Segment.SegmentedPropertyTypeCodeSequence
+ };
+
+ if (SegmentAlgorithmType === "AUTOMATIC" || SegmentAlgorithmType === "SEMIAUTOMATIC") {
+ reNumberedSegmentCopy.SegmentAlgorithmName = Segment.SegmentAlgorithmName;
+ }
+
+ SegmentSequence.push(reNumberedSegmentCopy);
+ return reNumberedSegmentCopy.SegmentNumber;
+ }
+ }]);
+
+ return Segmentation;
+ }(DerivedPixels);
+
+ var ParametricMap = /*#__PURE__*/function (_DerivedDataset) {
+ _inherits(ParametricMap, _DerivedDataset);
+
+ var _super = _createSuper(ParametricMap);
+
+ function ParametricMap(datasets) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, ParametricMap);
+
+ return _super.call(this, datasets, options);
+ } // this assumes a normalized multiframe input and will create
+ // a multiframe derived image
+
+
+ _createClass(ParametricMap, [{
+ key: "derive",
+ value: function derive() {
+ _get(_getPrototypeOf(ParametricMap.prototype), "derive", this).call(this);
+
+ this.assignToDataset({// TODO: ???
+ });
+ this.assignFromReference([]);
+ }
+ }]);
+
+ return ParametricMap;
+ }(DerivedDataset);
+
+ var StructuredReport = /*#__PURE__*/function (_DerivedDataset) {
+ _inherits(StructuredReport, _DerivedDataset);
+
+ var _super = _createSuper(StructuredReport);
+
+ function StructuredReport(datasets) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, StructuredReport);
+
+ return _super.call(this, datasets, options);
+ } // this assumes a normalized multiframe input and will create
+ // a multiframe derived image
+
+
+ _createClass(StructuredReport, [{
+ key: "derive",
+ value: function derive() {
+ _get(_getPrototypeOf(StructuredReport.prototype), "derive", this).call(this);
+
+ this.assignToDataset({
+ SOPClassUID: DicomMetaDictionary.sopClassUIDsByName.EnhancedSR,
+ Modality: "SR",
+ ValueType: "CONTAINER"
+ });
+ this.assignFromReference([]);
+ }
+ }]);
+
+ return StructuredReport;
+ }(DerivedDataset);
+
+ var TID1500MeasurementReport = /*#__PURE__*/function () {
+ function TID1500MeasurementReport(TIDIncludeGroups) {
+ _classCallCheck(this, TID1500MeasurementReport);
+
+ this.TIDIncludeGroups = TIDIncludeGroups;
+ var ImageLibraryContentSequence = [];
+ var CurrentRequestedProcedureEvidenceSequence = [];
+ this.ImageLibraryContentSequence = ImageLibraryContentSequence;
+ this.CurrentRequestedProcedureEvidenceSequence = CurrentRequestedProcedureEvidenceSequence;
+ this.PersonObserverName = {
+ RelationshipType: "HAS OBS CONTEXT",
+ ValueType: "PNAME",
+ ConceptNameCodeSequence: {
+ CodeValue: "121008",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Person Observer Name"
+ },
+ PersonName: "unknown^unknown"
+ };
+ this.tid1500 = {
+ ConceptNameCodeSequence: {
+ CodeValue: "126000",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Imaging Measurement Report"
+ },
+ ContinuityOfContent: "SEPARATE",
+ PerformedProcedureCodeSequence: [],
+ CompletionFlag: "COMPLETE",
+ VerificationFlag: "UNVERIFIED",
+ ReferencedPerformedProcedureStepSequence: [],
+ InstanceNumber: 1,
+ CurrentRequestedProcedureEvidenceSequence: CurrentRequestedProcedureEvidenceSequence,
+ CodingSchemeIdentificationSequence: {
+ CodingSchemeDesignator: "99dcmjs",
+ CodingSchemeName: "Codes used for dcmjs",
+ CodingSchemeVersion: "0",
+ CodingSchemeResponsibleOrganization: "https://github.com/dcmjs-org/dcmjs"
+ },
+ ContentTemplateSequence: {
+ MappingResource: "DCMR",
+ TemplateIdentifier: "1500"
+ },
+ ContentSequence: [{
+ RelationshipType: "HAS CONCEPT MOD",
+ ValueType: "CODE",
+ ConceptNameCodeSequence: addAccessors({
+ CodeValue: "121049",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Language of Content Item and Descendants"
+ }),
+ ConceptCodeSequence: addAccessors({
+ CodeValue: "eng",
+ CodingSchemeDesignator: "RFC5646",
+ CodeMeaning: "English"
+ }),
+ ContentSequence: addAccessors({
+ RelationshipType: "HAS CONCEPT MOD",
+ ValueType: "CODE",
+ ConceptNameCodeSequence: addAccessors({
+ CodeValue: "121046",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Country of Language"
+ }),
+ ConceptCodeSequence: addAccessors({
+ CodeValue: "US",
+ CodingSchemeDesignator: "ISO3166_1",
+ CodeMeaning: "United States"
+ })
+ })
+ }, this.PersonObserverName, {
+ RelationshipType: "HAS CONCEPT MOD",
+ ValueType: "CODE",
+ ConceptNameCodeSequence: addAccessors({
+ CodeValue: "121058",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Procedure reported"
+ }),
+ ConceptCodeSequence: addAccessors({
+ CodeValue: "1",
+ CodingSchemeDesignator: "99dcmjs",
+ CodeMeaning: "Unknown procedure"
+ })
+ }, {
+ RelationshipType: "CONTAINS",
+ ValueType: "CONTAINER",
+ ConceptNameCodeSequence: {
+ CodeValue: "111028",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Image Library"
+ },
+ ContinuityOfContent: "SEPARATE",
+ ContentSequence: {
+ RelationshipType: "CONTAINS",
+ ValueType: "CONTAINER",
+ ConceptNameCodeSequence: {
+ CodeValue: "126200",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Image Library Group"
+ },
+ ContinuityOfContent: "SEPARATE",
+ ContentSequence: ImageLibraryContentSequence
+ }
+ }]
+ };
+ }
+
+ _createClass(TID1500MeasurementReport, [{
+ key: "validate",
+ value: function validate() {}
+ }, {
+ key: "contentItem",
+ value: function contentItem(derivationSourceDatasetOrDatasets) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ if (options.PersonName) {
+ this.PersonObserverName.PersonName = options.PersonName;
+ } // Note this is left in for compatibility with the Cornerstone Legacy adapter which only supports one series for now.
+
+
+ var derivationSourceDatasets = Array.isArray(derivationSourceDatasetOrDatasets) ? derivationSourceDatasetOrDatasets : [derivationSourceDatasetOrDatasets]; // Add the Measurement Groups to the Measurement Report
+
+ this.addTID1501MeasurementGroups(derivationSourceDatasets, options);
+ return this.tid1500;
+ }
+ }, {
+ key: "addTID1501MeasurementGroups",
+ value: function addTID1501MeasurementGroups(derivationSourceDatasets) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+ var CurrentRequestedProcedureEvidenceSequence = this.CurrentRequestedProcedureEvidenceSequence,
+ ImageLibraryContentSequence = this.ImageLibraryContentSequence;
+ var sopInstanceUIDsToSeriesInstanceUIDMap = options.sopInstanceUIDsToSeriesInstanceUIDMap;
+
+ if (derivationSourceDatasets.length > 1 && sopInstanceUIDsToSeriesInstanceUIDMap === undefined) {
+ throw new Error("addTID1501MeasurementGroups provided with ".concat(derivationSourceDatasets.length, " derivationSourceDatasets, with no sopInstanceUIDsToSeriesInstanceUIDMap in options."));
+ }
+
+ var TID1501MeasurementGroups = this.TIDIncludeGroups.TID1501MeasurementGroups;
+
+ if (!TID1501MeasurementGroups) {
+ return;
+ }
+
+ var ContentSequence = [];
+ TID1501MeasurementGroups.forEach(function (child) {
+ ContentSequence = ContentSequence.concat(child.contentItem());
+ });
+ var parsedSOPInstances = []; // For each measurement that is referenced, add a link to the
+ // Image Library Group and the Current Requested Procedure Evidence
+ // with the proper ReferencedSOPSequence
+
+ TID1501MeasurementGroups.forEach(function (measurementGroup) {
+ measurementGroup.TID300Measurements.forEach(function (measurement) {
+ var ReferencedSOPInstanceUID = measurement.ReferencedSOPSequence.ReferencedSOPInstanceUID;
+
+ if (!parsedSOPInstances.includes(ReferencedSOPInstanceUID)) {
+ ImageLibraryContentSequence.push({
+ RelationshipType: "CONTAINS",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: measurement.ReferencedSOPSequence
+ });
+ var derivationSourceDataset;
+
+ if (derivationSourceDatasets.length === 1) {
+ // If there is only one derivationSourceDataset, use it.
+ derivationSourceDataset = derivationSourceDatasets[0];
+ } else {
+ var SeriesInstanceUID = sopInstanceUIDsToSeriesInstanceUIDMap[ReferencedSOPInstanceUID];
+ derivationSourceDataset = derivationSourceDatasets.find(function (dsd) {
+ return dsd.SeriesInstanceUID === SeriesInstanceUID;
+ });
+ }
+ /**
+ * Note: the VM of the ReferencedSeriesSequence and ReferencedSOPSequence are 1, so
+ * it is correct that we have a full `CurrentRequestedProcedureEvidenceSequence`
+ * item per `SOPInstanceUID`.
+ */
+
+
+ CurrentRequestedProcedureEvidenceSequence.push({
+ StudyInstanceUID: derivationSourceDataset.StudyInstanceUID,
+ ReferencedSeriesSequence: {
+ SeriesInstanceUID: derivationSourceDataset.SeriesInstanceUID,
+ ReferencedSOPSequence: measurement.ReferencedSOPSequence
+ }
+ });
+ parsedSOPInstances.push(ReferencedSOPInstanceUID);
+ }
+ });
+ });
+ var ImagingMeasurments = {
+ RelationshipType: "CONTAINS",
+ ValueType: "CONTAINER",
+ ConceptNameCodeSequence: {
+ CodeValue: "126010",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Imaging Measurements" // TODO: would be nice to abstract the code sequences (in a dictionary? a service?)
+
+ },
+ ContinuityOfContent: "SEPARATE",
+ ContentSequence: ContentSequence
+ };
+ this.tid1500.ContentSequence.push(ImagingMeasurments);
+ }
+ }]);
+
+ return TID1500MeasurementReport;
+ }();
+
+ var TID1501MeasurementGroup = /*#__PURE__*/function () {
+ function TID1501MeasurementGroup(TID300Measurements) {
+ _classCallCheck(this, TID1501MeasurementGroup);
+
+ this.TID300Measurements = TID300Measurements;
+ }
+
+ _createClass(TID1501MeasurementGroup, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this = this;
+
+ var TID300Measurements = this.TID300Measurements; // TODO: Is there nothing else in this group?
+
+ var measurementGroups = [];
+ TID300Measurements.forEach(function (TID300Measurement) {
+ measurementGroups.push(_this.getMeasurementGroup(TID300Measurement.contentItem()));
+ });
+ return measurementGroups;
+ }
+ }, {
+ key: "getMeasurementGroup",
+ value: function getMeasurementGroup(contentSequenceEntries) {
+ return {
+ RelationshipType: "CONTAINS",
+ ValueType: "CONTAINER",
+ ConceptNameCodeSequence: {
+ CodeValue: "125007",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Measurement Group"
+ },
+ ContinuityOfContent: "SEPARATE",
+ ContentSequence: _toConsumableArray(contentSequenceEntries)
+ };
+ }
+ }]);
+
+ return TID1501MeasurementGroup;
+ }();
+
+ var toArray = function toArray(x) {
+ return Array.isArray(x) ? x : [x];
+ };
+
+ var codeMeaningEquals = function codeMeaningEquals(codeMeaningName) {
+ return function (contentItem) {
+ return contentItem.ConceptNameCodeSequence.CodeMeaning === codeMeaningName;
+ };
+ };
+
+ var graphicTypeEquals = function graphicTypeEquals(graphicType) {
+ return function (contentItem) {
+ return contentItem && contentItem.GraphicType === graphicType;
+ };
+ };
+
+ var FINDING$2 = {
+ CodingSchemeDesignator: "DCM",
+ CodeValue: "121071"
+ };
+ var FINDING_SITE$2 = {
+ CodingSchemeDesignator: "SCT",
+ CodeValue: "363698007"
+ };
+ var FINDING_SITE_OLD$1 = {
+ CodingSchemeDesignator: "SRT",
+ CodeValue: "G-C0E3"
+ };
+
+ var codeValueMatch$1 = function codeValueMatch(group, code, oldCode) {
+ var ConceptNameCodeSequence = group.ConceptNameCodeSequence;
+ if (!ConceptNameCodeSequence) return;
+ var CodingSchemeDesignator = ConceptNameCodeSequence.CodingSchemeDesignator,
+ CodeValue = ConceptNameCodeSequence.CodeValue;
+ return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
+ };
+
+ function getTID300ContentItem$2(tool, toolType, ReferencedSOPSequence, toolClass) {
+ var args = toolClass.getTID300RepresentationArguments(tool);
+ args.ReferencedSOPSequence = ReferencedSOPSequence;
+ var TID300Measurement = new toolClass.TID300Representation(args);
+ return TID300Measurement;
+ }
+
+ function getMeasurementGroup$2(toolType, toolData, ReferencedSOPSequence) {
+ var toolTypeData = toolData[toolType];
+ var toolClass = MeasurementReport$3.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolType];
+
+ if (!toolTypeData || !toolTypeData.data || !toolTypeData.data.length || !toolClass) {
+ return;
+ } // Loop through the array of tool instances
+ // for this tool
+
+
+ var Measurements = toolTypeData.data.map(function (tool) {
+ return getTID300ContentItem$2(tool, toolType, ReferencedSOPSequence, toolClass);
+ });
+ return new TID1501MeasurementGroup(Measurements);
+ }
+
+ var MeasurementReport$3 = /*#__PURE__*/function () {
+ function MeasurementReport() {
+ _classCallCheck(this, MeasurementReport);
+ }
+
+ _createClass(MeasurementReport, null, [{
+ key: "getSetupMeasurementData",
+ value: function getSetupMeasurementData(MeasurementGroup) {
+ var ContentSequence = MeasurementGroup.ContentSequence;
+ var contentSequenceArr = toArray(ContentSequence);
+ var findingGroup = contentSequenceArr.find(function (group) {
+ return codeValueMatch$1(group, FINDING$2);
+ });
+ var findingSiteGroups = contentSequenceArr.filter(function (group) {
+ return codeValueMatch$1(group, FINDING_SITE$2, FINDING_SITE_OLD$1);
+ }) || [];
+ var NUMGroup = contentSequenceArr.find(function (group) {
+ return group.ValueType === "NUM";
+ });
+ var SCOORDGroup = toArray(NUMGroup.ContentSequence).find(function (group) {
+ return group.ValueType === "SCOORD";
+ });
+ var ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;
+ var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
+ ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;
+ var defaultState = {
+ sopInstanceUid: ReferencedSOPInstanceUID,
+ frameIndex: ReferencedFrameNumber || 1,
+ complete: true,
+ finding: findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined,
+ findingSites: findingSiteGroups.map(function (fsg) {
+ return addAccessors(fsg.ConceptCodeSequence);
+ })
+ };
+
+ if (defaultState.finding) {
+ defaultState.description = defaultState.finding.CodeMeaning;
+ }
+
+ var findingSite = defaultState.findingSites && defaultState.findingSites[0];
+
+ if (findingSite) {
+ defaultState.location = findingSite[0] && findingSite[0].CodeMeaning || findingSite.CodeMeaning;
+ }
+
+ return {
+ defaultState: defaultState,
+ findingGroup: findingGroup,
+ findingSiteGroups: findingSiteGroups,
+ NUMGroup: NUMGroup,
+ SCOORDGroup: SCOORDGroup,
+ ReferencedSOPSequence: ReferencedSOPSequence,
+ ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
+ ReferencedFrameNumber: ReferencedFrameNumber
+ };
+ }
+ }, {
+ key: "generateReport",
+ value: function generateReport(toolState, metadataProvider, options) {
+ // ToolState for array of imageIDs to a Report
+ // Assume Cornerstone metadata provider has access to Study / Series / Sop Instance UID
+ var allMeasurementGroups = [];
+ var firstImageId = Object.keys(toolState)[0];
+
+ if (!firstImageId) {
+ throw new Error("No measurements provided.");
+ }
+ /* Patient ID
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Patient ID
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Date
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Time
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study ID
+ */
+
+
+ var generalSeriesModule = metadataProvider.get("generalSeriesModule", firstImageId); //const sopCommonModule = metadataProvider.get('sopCommonModule', firstImageId);
+ // NOTE: We are getting the Series and Study UIDs from the first imageId of the toolState
+ // which means that if the toolState is for multiple series, the report will have the incorrect
+ // SeriesInstanceUIDs
+
+ var studyInstanceUID = generalSeriesModule.studyInstanceUID,
+ seriesInstanceUID = generalSeriesModule.seriesInstanceUID; // Loop through each image in the toolData
+
+ Object.keys(toolState).forEach(function (imageId) {
+ var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
+ var frameNumber = metadataProvider.get("frameNumber", imageId);
+ var toolData = toolState[imageId];
+ var toolTypes = Object.keys(toolData);
+ var ReferencedSOPSequence = {
+ ReferencedSOPClassUID: sopCommonModule.sopClassUID,
+ ReferencedSOPInstanceUID: sopCommonModule.sopInstanceUID
+ };
+
+ if (Normalizer.isMultiframeSOPClassUID(sopCommonModule.sopClassUID)) {
+ ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;
+ } // Loop through each tool type for the image
+
+
+ var measurementGroups = [];
+ toolTypes.forEach(function (toolType) {
+ var group = getMeasurementGroup$2(toolType, toolData, ReferencedSOPSequence);
+
+ if (group) {
+ measurementGroups.push(group);
+ }
+ });
+ allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);
+ });
+
+ var _MeasurementReport = new TID1500MeasurementReport({
+ TID1501MeasurementGroups: allMeasurementGroups
+ }, options); // TODO: what is the correct metaheader
+ // http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html
+ // TODO: move meta creation to happen in derivations.js
+
+
+ var fileMetaInformationVersionArray = new Uint8Array(2);
+ fileMetaInformationVersionArray[1] = 1;
+ var derivationSourceDataset = {
+ StudyInstanceUID: studyInstanceUID,
+ SeriesInstanceUID: seriesInstanceUID //SOPInstanceUID: sopInstanceUID, // TODO: Necessary?
+ //SOPClassUID: sopClassUID,
+
+ };
+ var _meta = {
+ FileMetaInformationVersion: {
+ Value: [fileMetaInformationVersionArray.buffer],
+ vr: "OB"
+ },
+ //MediaStorageSOPClassUID
+ //MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,
+ TransferSyntaxUID: {
+ Value: ["1.2.840.10008.1.2.1"],
+ vr: "UI"
+ },
+ ImplementationClassUID: {
+ Value: [DicomMetaDictionary.uid()],
+ // TODO: could be git hash or other valid id
+ vr: "UI"
+ },
+ ImplementationVersionName: {
+ Value: ["dcmjs"],
+ vr: "SH"
+ }
+ };
+ var _vrMap = {
+ PixelData: "OW"
+ };
+ derivationSourceDataset._meta = _meta;
+ derivationSourceDataset._vrMap = _vrMap;
+ var report = new StructuredReport([derivationSourceDataset]);
+
+ var contentItem = _MeasurementReport.contentItem(derivationSourceDataset); // Merge the derived dataset with the content from the Measurement Report
+
+
+ report.dataset = Object.assign(report.dataset, contentItem);
+ report.dataset._meta = _meta;
+ return report;
+ }
+ /**
+ * Generate Cornerstone tool state from dataset
+ * @param {object} dataset dataset
+ * @param {object} hooks
+ * @param {function} hooks.getToolClass Function to map dataset to a tool class
+ * @returns
+ */
+
+ }, {
+ key: "generateToolState",
+ value: function generateToolState(dataset) {
+ var hooks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ // For now, bail out if the dataset is not a TID1500 SR with length measurements
+ if (dataset.ContentTemplateSequence.TemplateIdentifier !== "1500") {
+ throw new Error("This package can currently only interpret DICOM SR TID 1500");
+ }
+
+ var REPORT = "Imaging Measurements";
+ var GROUP = "Measurement Group";
+ var TRACKING_IDENTIFIER = "Tracking Identifier"; // Identify the Imaging Measurements
+
+ var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves
+
+ var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // For each of the supported measurement types, compute the measurement data
+
+ var measurementData = {};
+ var cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;
+ var registeredToolClasses = [];
+ Object.keys(cornerstoneToolClasses).forEach(function (key) {
+ registeredToolClasses.push(cornerstoneToolClasses[key]);
+ measurementData[key] = [];
+ });
+ measurementGroups.forEach(function (measurementGroup) {
+ var measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);
+ var TrackingIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {
+ return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER;
+ });
+ var TrackingIdentifierValue = TrackingIdentifierGroup.TextValue;
+ var toolClass = hooks.getToolClass ? hooks.getToolClass(measurementGroup, dataset, registeredToolClasses) : registeredToolClasses.find(function (tc) {
+ return tc.isValidCornerstoneTrackingIdentifier(TrackingIdentifierValue);
+ });
+
+ if (toolClass) {
+ var measurement = toolClass.getMeasurementData(measurementGroup);
+ console.log("=== ".concat(toolClass.toolType, " ==="));
+ console.log(measurement);
+ measurementData[toolClass.toolType].push(measurement);
+ }
+ }); // NOTE: There is no way of knowing the cornerstone imageIds as that could be anything.
+ // That is up to the consumer to derive from the SOPInstanceUIDs.
+
+ return measurementData;
+ }
+ }, {
+ key: "registerTool",
+ value: function registerTool(toolClass) {
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.toolType] = toolClass;
+ MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.toolType] = toolClass.utilityToolType;
+ }
+ }]);
+
+ return MeasurementReport;
+ }();
+ MeasurementReport$3.MEASUREMENT_BY_TOOLTYPE = {};
+ MeasurementReport$3.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE = {};
+ MeasurementReport$3.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE = {};
+
+ var TID300Measurement = /*#__PURE__*/function () {
+ function TID300Measurement(props) {
+ _classCallCheck(this, TID300Measurement);
+
+ this.ReferencedSOPSequence = props.ReferencedSOPSequence;
+ this.props = props;
+ }
+
+ _createClass(TID300Measurement, [{
+ key: "getMeasurement",
+ value: function getMeasurement(contentSequenceEntries) {
+ return [].concat(_toConsumableArray(this.getTrackingGroups()), _toConsumableArray(this.getFindingGroup()), _toConsumableArray(this.getFindingSiteGroups()), _toConsumableArray(contentSequenceEntries));
+ }
+ }, {
+ key: "getTrackingGroups",
+ value: function getTrackingGroups() {
+ var trackingIdentifierTextValue = this.props.trackingIdentifierTextValue;
+ return [{
+ RelationshipType: "HAS OBS CONTEXT",
+ ValueType: "TEXT",
+ ConceptNameCodeSequence: {
+ CodeValue: "112039",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Tracking Identifier"
+ },
+ TextValue: trackingIdentifierTextValue || "web annotation"
+ }, {
+ RelationshipType: "HAS OBS CONTEXT",
+ ValueType: "UIDREF",
+ ConceptNameCodeSequence: {
+ CodeValue: "112040",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Tracking Unique Identifier"
+ },
+ UID: DicomMetaDictionary.uid()
+ }];
+ }
+ }, {
+ key: "getFindingGroup",
+ value: function getFindingGroup() {
+ var finding = this.props.finding;
+
+ if (!finding) {
+ return [];
+ }
+
+ var CodeValue = finding.CodeValue,
+ CodingSchemeDesignator = finding.CodingSchemeDesignator,
+ CodeMeaning = finding.CodeMeaning;
+ return [{
+ RelationshipType: "CONTAINS",
+ ValueType: "CODE",
+ ConceptNameCodeSequence: addAccessors({
+ CodeValue: "121071",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Finding"
+ }),
+ ConceptCodeSequence: addAccessors({
+ CodeValue: CodeValue,
+ //: "SAMPLE FINDING",
+ CodingSchemeDesignator: CodingSchemeDesignator,
+ //: "99dcmjs",
+ CodeMeaning: CodeMeaning //: "Sample Finding"
+
+ })
+ }];
+ }
+ }, {
+ key: "getFindingSiteGroups",
+ value: function getFindingSiteGroups() {
+ var findingSites = this.props.findingSites || [];
+ return findingSites.map(function (findingSite) {
+ var CodeValue = findingSite.CodeValue,
+ CodingSchemeDesignator = findingSite.CodingSchemeDesignator,
+ CodeMeaning = findingSite.CodeMeaning;
+ return {
+ RelationshipType: "CONTAINS",
+ ValueType: "CODE",
+ ConceptNameCodeSequence: addAccessors({
+ CodeValue: "363698007",
+ CodingSchemeDesignator: "SCT",
+ CodeMeaning: "Finding Site"
+ }),
+ ConceptCodeSequence: addAccessors({
+ CodeValue: CodeValue,
+ //: "SAMPLE FINDING SITE",
+ CodingSchemeDesignator: CodingSchemeDesignator,
+ //: "99dcmjs",
+ CodeMeaning: CodeMeaning //: "Sample Finding Site"
+
+ })
+ };
+ });
+ }
+ }]);
+
+ return TID300Measurement;
+ }();
+
+ var MM_UNIT = {
+ CodeValue: "mm",
+ CodingSchemeDesignator: "UCUM",
+ CodingSchemeVersion: "1.4",
+ CodeMeaning: "millimeter"
+ };
+ var MM2_UNIT = {
+ CodeValue: "mm2",
+ CodingSchemeDesignator: "UCUM",
+ CodingSchemeVersion: "1.4",
+ CodeMeaning: "SquareMilliMeter"
+ };
+ var NO_UNIT = {
+ CodeValue: "1",
+ CodingSchemeDesignator: "UCUM",
+ CodingSchemeVersion: "1.4",
+ CodeMeaning: "px"
+ };
+ var NO2_UNIT = NO_UNIT;
+ var measurementMap = {
+ px: NO_UNIT,
+ mm: MM_UNIT,
+ mm2: MM2_UNIT,
+ "mm\xB2": MM2_UNIT,
+ "px\xB2": NO2_UNIT
+ };
+ /** Converts the given unit into the
+ * specified coding values.
+ * Has .measurementMap on the function specifying global units for measurements.
+ */
+
+ var unit2CodingValue = function unit2CodingValue(units) {
+ if (!units) return NO_UNIT;
+ var space = units.indexOf(" ");
+ var baseUnit = space === -1 ? units : units.substring(0, space);
+ var codingUnit = measurementMap[units] || measurementMap[baseUnit];
+
+ if (!codingUnit) {
+ log.error("Unspecified units", units);
+ return MM_UNIT;
+ }
+
+ return codingUnit;
+ };
+
+ unit2CodingValue.measurementMap = measurementMap;
+
+ var Length$2 = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(Length, _TID300Measurement);
+
+ var _super = _createSuper(Length);
+
+ function Length() {
+ _classCallCheck(this, Length);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Length, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ point1 = _this$props.point1,
+ point2 = _this$props.point2,
+ _this$props$unit = _this$props.unit,
+ unit = _this$props$unit === void 0 ? "mm" : _this$props$unit,
+ distance = _this$props.distance,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence;
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-D7FE",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Length"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(unit),
+ NumericValue: distance
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: "SCOORD",
+ GraphicType: "POLYLINE",
+ GraphicData: [point1.x, point1.y, point2.x, point2.y],
+ ContentSequence: {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return Length;
+ }(TID300Measurement);
+
+ var CORNERSTONE_4_TAG = "cornerstoneTools@^4.0.0";
+
+ var LENGTH$1 = "Length";
+
+ var Length$1 = /*#__PURE__*/function () {
+ function Length() {
+ _classCallCheck(this, Length);
+ } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
+
+
+ _createClass(Length, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
+ defaultState = _MeasurementReport$ge.defaultState,
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
+
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
+ length: NUMGroup.MeasuredValueSequence.NumericValue,
+ toolType: Length.toolType,
+ handles: {
+ start: {},
+ end: {},
+ textBox: {
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ }
+ });
+
+ var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 4);
+
+ state.handles.start.x = _SCOORDGroup$GraphicD[0];
+ state.handles.start.y = _SCOORDGroup$GraphicD[1];
+ state.handles.end.x = _SCOORDGroup$GraphicD[2];
+ state.handles.end.y = _SCOORDGroup$GraphicD[3];
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var handles = tool.handles,
+ finding = tool.finding,
+ findingSites = tool.findingSites;
+ var point1 = handles.start;
+ var point2 = handles.end;
+ var distance = tool.length;
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Length";
+ return {
+ point1: point1,
+ point2: point2,
+ distance: distance,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return Length;
+ }();
+
+ Length$1.toolType = LENGTH$1;
+ Length$1.utilityToolType = LENGTH$1;
+ Length$1.TID300Representation = Length$2;
+
+ Length$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === LENGTH$1;
+ };
+
+ MeasurementReport$3.registerTool(Length$1);
+
+ /**
+ * Expand an array of points stored as objects into
+ * a flattened array of points
+ *
+ * @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]
+ * @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]
+ */
+
+ function expandPoints$3(points) {
+ var allPoints = [];
+ points.forEach(function (point) {
+ allPoints.push(point[0] || point.x);
+ allPoints.push(point[1] || point.y);
+
+ if (point[2] !== undefined || point.z !== undefined) {
+ allPoints.push(point[2] || point.z);
+ }
+ });
+ return allPoints;
+ }
+
+ var Polyline$1 = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(Polyline, _TID300Measurement);
+
+ var _super = _createSuper(Polyline);
+
+ function Polyline() {
+ _classCallCheck(this, Polyline);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Polyline, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ points = _this$props.points,
+ area = _this$props.area,
+ _this$props$areaUnit = _this$props.areaUnit,
+ areaUnit = _this$props$areaUnit === void 0 ? "mm2" : _this$props$areaUnit,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
+ _this$props$use3DSpat = _this$props.use3DSpatialCoordinates,
+ use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat,
+ perimeter = _this$props.perimeter,
+ _this$props$unit = _this$props.unit,
+ unit = _this$props$unit === void 0 ? "mm" : _this$props$unit;
+ var GraphicData = expandPoints$3(points); // TODO: Add Mean and STDev value of (modality?) pixels
+
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "131191004",
+ CodingSchemeDesignator: "SCT",
+ CodeMeaning: "Perimeter"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(unit),
+ NumericValue: perimeter
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
+ GraphicType: "POLYLINE",
+ GraphicData: GraphicData,
+ ContentSequence: use3DSpatialCoordinates ? undefined : {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }, {
+ // TODO: This feels weird to repeat the GraphicData
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-A166",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Area" // TODO: Look this up from a Code Meaning dictionary
+
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(areaUnit),
+ NumericValue: area
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
+ GraphicType: "POLYLINE",
+ GraphicData: GraphicData,
+ ContentSequence: use3DSpatialCoordinates ? undefined : {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return Polyline;
+ }(TID300Measurement);
+
+ var FreehandRoi = /*#__PURE__*/function () {
+ function FreehandRoi() {
+ _classCallCheck(this, FreehandRoi);
+ }
+
+ _createClass(FreehandRoi, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
+ defaultState = _MeasurementReport$ge.defaultState,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
+ NUMGroup = _MeasurementReport$ge.NUMGroup;
+
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
+ toolType: FreehandRoi.toolType,
+ handles: {
+ points: [],
+ textBox: {
+ active: false,
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ },
+ cachedStats: {
+ area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
+ },
+ color: undefined,
+ invalidated: true
+ });
+
+ var GraphicData = SCOORDGroup.GraphicData;
+
+ for (var i = 0; i < GraphicData.length; i += 2) {
+ state.handles.points.push({
+ x: GraphicData[i],
+ y: GraphicData[i + 1]
+ });
+ }
+
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var handles = tool.handles,
+ finding = tool.finding,
+ findingSites = tool.findingSites,
+ _tool$cachedStats = tool.cachedStats,
+ cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats;
+ var points = handles.points;
+ var _cachedStats$area = cachedStats.area,
+ area = _cachedStats$area === void 0 ? 0 : _cachedStats$area,
+ _cachedStats$perimete = cachedStats.perimeter,
+ perimeter = _cachedStats$perimete === void 0 ? 0 : _cachedStats$perimete;
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:FreehandRoi";
+ return {
+ points: points,
+ area: area,
+ perimeter: perimeter,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return FreehandRoi;
+ }();
+
+ FreehandRoi.toolType = "FreehandRoi";
+ FreehandRoi.utilityToolType = "FreehandRoi";
+ FreehandRoi.TID300Representation = Polyline$1;
+
+ FreehandRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === FreehandRoi.toolType;
+ };
+
+ MeasurementReport$3.registerTool(FreehandRoi);
+
+ var Bidirectional$2 = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(Bidirectional, _TID300Measurement);
+
+ var _super = _createSuper(Bidirectional);
+
+ function Bidirectional() {
+ _classCallCheck(this, Bidirectional);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Bidirectional, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ longAxis = _this$props.longAxis,
+ shortAxis = _this$props.shortAxis,
+ longAxisLength = _this$props.longAxisLength,
+ shortAxisLength = _this$props.shortAxisLength,
+ unit = _this$props.unit,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence;
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-A185",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Long Axis"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(unit),
+ NumericValue: longAxisLength
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: "SCOORD",
+ GraphicType: "POLYLINE",
+ GraphicData: [longAxis.point1.x, longAxis.point1.y, longAxis.point2.x, longAxis.point2.y],
+ ContentSequence: {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }, {
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-A186",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Short Axis"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(unit),
+ NumericValue: shortAxisLength
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: "SCOORD",
+ GraphicType: "POLYLINE",
+ GraphicData: [shortAxis.point1.x, shortAxis.point1.y, shortAxis.point2.x, shortAxis.point2.y],
+ ContentSequence: {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return Bidirectional;
+ }(TID300Measurement);
+
+ var BIDIRECTIONAL$1 = "Bidirectional";
+ var LONG_AXIS$1 = "Long Axis";
+ var SHORT_AXIS$1 = "Short Axis";
+ var FINDING$1 = "121071";
+ var FINDING_SITE$1 = "G-C0E3";
+
+ var Bidirectional$1 = /*#__PURE__*/function () {
+ function Bidirectional() {
+ _classCallCheck(this, Bidirectional);
+ } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
+
+
+ _createClass(Bidirectional, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _state;
+
+ var ContentSequence = MeasurementGroup.ContentSequence;
+ var findingGroup = toArray(ContentSequence).find(function (group) {
+ return group.ConceptNameCodeSequence.CodeValue === FINDING$1;
+ });
+ var findingSiteGroups = toArray(ContentSequence).filter(function (group) {
+ return group.ConceptNameCodeSequence.CodeValue === FINDING_SITE$1;
+ });
+ var longAxisNUMGroup = toArray(ContentSequence).find(function (group) {
+ return group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS$1;
+ });
+ var longAxisSCOORDGroup = toArray(longAxisNUMGroup.ContentSequence).find(function (group) {
+ return group.ValueType === "SCOORD";
+ });
+ var shortAxisNUMGroup = toArray(ContentSequence).find(function (group) {
+ return group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS$1;
+ });
+ var shortAxisSCOORDGroup = toArray(shortAxisNUMGroup.ContentSequence).find(function (group) {
+ return group.ValueType === "SCOORD";
+ });
+ var ReferencedSOPSequence = longAxisSCOORDGroup.ContentSequence.ReferencedSOPSequence;
+ var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
+ ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber; // Long axis
+
+ var longestDiameter = String(longAxisNUMGroup.MeasuredValueSequence.NumericValue);
+ var shortestDiameter = String(shortAxisNUMGroup.MeasuredValueSequence.NumericValue);
+ var bottomRight = {
+ x: Math.max(longAxisSCOORDGroup.GraphicData[0], longAxisSCOORDGroup.GraphicData[2], shortAxisSCOORDGroup.GraphicData[0], shortAxisSCOORDGroup.GraphicData[2]),
+ y: Math.max(longAxisSCOORDGroup.GraphicData[1], longAxisSCOORDGroup.GraphicData[3], shortAxisSCOORDGroup.GraphicData[1], shortAxisSCOORDGroup.GraphicData[3])
+ };
+ var state = (_state = {
+ sopInstanceUid: ReferencedSOPInstanceUID,
+ frameIndex: ReferencedFrameNumber || 1,
+ toolType: Bidirectional.toolType,
+ active: false,
+ handles: {
+ start: {
+ x: longAxisSCOORDGroup.GraphicData[0],
+ y: longAxisSCOORDGroup.GraphicData[1],
+ drawnIndependently: false,
+ allowedOutsideImage: false,
+ active: false,
+ highlight: false,
+ index: 0
+ },
+ end: {
+ x: longAxisSCOORDGroup.GraphicData[2],
+ y: longAxisSCOORDGroup.GraphicData[3],
+ drawnIndependently: false,
+ allowedOutsideImage: false,
+ active: false,
+ highlight: false,
+ index: 1
+ },
+ perpendicularStart: {
+ x: shortAxisSCOORDGroup.GraphicData[0],
+ y: shortAxisSCOORDGroup.GraphicData[1],
+ drawnIndependently: false,
+ allowedOutsideImage: false,
+ active: false,
+ highlight: false,
+ index: 2
+ },
+ perpendicularEnd: {
+ x: shortAxisSCOORDGroup.GraphicData[2],
+ y: shortAxisSCOORDGroup.GraphicData[3],
+ drawnIndependently: false,
+ allowedOutsideImage: false,
+ active: false,
+ highlight: false,
+ index: 3
+ },
+ textBox: {
+ highlight: false,
+ hasMoved: true,
+ active: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true,
+ x: bottomRight.x + 10,
+ y: bottomRight.y + 10
+ }
+ },
+ invalidated: false,
+ isCreating: false,
+ longestDiameter: longestDiameter,
+ shortestDiameter: shortestDiameter
+ }, _defineProperty(_state, "toolType", "Bidirectional"), _defineProperty(_state, "toolName", "Bidirectional"), _defineProperty(_state, "visible", true), _defineProperty(_state, "finding", findingGroup ? findingGroup.ConceptCodeSequence : undefined), _defineProperty(_state, "findingSites", findingSiteGroups.map(function (fsg) {
+ return fsg.ConceptCodeSequence;
+ })), _state);
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var _tool$handles = tool.handles,
+ start = _tool$handles.start,
+ end = _tool$handles.end,
+ perpendicularStart = _tool$handles.perpendicularStart,
+ perpendicularEnd = _tool$handles.perpendicularEnd;
+ var shortestDiameter = tool.shortestDiameter,
+ longestDiameter = tool.longestDiameter,
+ finding = tool.finding,
+ findingSites = tool.findingSites;
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Bidirectional";
+ return {
+ longAxis: {
+ point1: start,
+ point2: end
+ },
+ shortAxis: {
+ point1: perpendicularStart,
+ point2: perpendicularEnd
+ },
+ longAxisLength: longestDiameter,
+ shortAxisLength: shortestDiameter,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return Bidirectional;
+ }();
+
+ Bidirectional$1.toolType = BIDIRECTIONAL$1;
+ Bidirectional$1.utilityToolType = BIDIRECTIONAL$1;
+ Bidirectional$1.TID300Representation = Bidirectional$2;
+
+ Bidirectional$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === BIDIRECTIONAL$1;
+ };
+
+ MeasurementReport$3.registerTool(Bidirectional$1);
+
+ /**
+ * Expand an array of points stored as objects into
+ * a flattened array of points
+ *
+ * @param points
+ * @return {Array}
+ */
+
+ function expandPoints$2(points) {
+ var allPoints = [];
+ points.forEach(function (point) {
+ allPoints.push(point.x);
+ allPoints.push(point.y);
+ });
+ return allPoints;
+ }
+
+ var Ellipse$1 = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(Ellipse, _TID300Measurement);
+
+ var _super = _createSuper(Ellipse);
+
+ function Ellipse() {
+ _classCallCheck(this, Ellipse);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Ellipse, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ points = _this$props.points,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
+ area = _this$props.area,
+ areaUnit = _this$props.areaUnit;
+ var GraphicData = expandPoints$2(points);
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-D7FE",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "AREA"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(areaUnit),
+ NumericValue: area
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: "SCOORD",
+ GraphicType: "ELLIPSE",
+ GraphicData: GraphicData,
+ ContentSequence: {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return Ellipse;
+ }(TID300Measurement);
+
+ var ELLIPTICALROI$1 = "EllipticalRoi";
+
+ var EllipticalRoi = /*#__PURE__*/function () {
+ function EllipticalRoi() {
+ _classCallCheck(this, EllipticalRoi);
+ } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
+
+
+ _createClass(EllipticalRoi, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
+ defaultState = _MeasurementReport$ge.defaultState,
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
+
+ var GraphicData = SCOORDGroup.GraphicData;
+ var majorAxis = [{
+ x: GraphicData[0],
+ y: GraphicData[1]
+ }, {
+ x: GraphicData[2],
+ y: GraphicData[3]
+ }];
+ var minorAxis = [{
+ x: GraphicData[4],
+ y: GraphicData[5]
+ }, {
+ x: GraphicData[6],
+ y: GraphicData[7]
+ }]; // Calculate two opposite corners of box defined by two axes.
+
+ var minorAxisLength = Math.sqrt(Math.pow(minorAxis[0].x - minorAxis[1].x, 2) + Math.pow(minorAxis[0].y - minorAxis[1].y, 2));
+ var minorAxisDirection = {
+ x: (minorAxis[1].x - minorAxis[0].x) / minorAxisLength,
+ y: (minorAxis[1].y - minorAxis[0].y) / minorAxisLength
+ };
+ var halfMinorAxisLength = minorAxisLength / 2; // First end point of major axis + half minor axis vector
+
+ var corner1 = {
+ x: majorAxis[0].x + minorAxisDirection.x * halfMinorAxisLength,
+ y: majorAxis[0].y + minorAxisDirection.y * halfMinorAxisLength
+ }; // Second end point of major axis - half of minor axis vector
+
+ var corner2 = {
+ x: majorAxis[1].x - minorAxisDirection.x * halfMinorAxisLength,
+ y: majorAxis[1].y - minorAxisDirection.y * halfMinorAxisLength
+ };
+
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
+ toolType: EllipticalRoi.toolType,
+ active: false,
+ cachedStats: {
+ area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
+ },
+ handles: {
+ end: {
+ x: corner1.x,
+ y: corner1.y,
+ highlight: false,
+ active: false
+ },
+ initialRotation: 0,
+ start: {
+ x: corner2.x,
+ y: corner2.y,
+ highlight: false,
+ active: false
+ },
+ textBox: {
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ },
+ invalidated: true,
+ visible: true
+ });
+
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var _tool$cachedStats = tool.cachedStats,
+ cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,
+ handles = tool.handles,
+ finding = tool.finding,
+ findingSites = tool.findingSites;
+ var start = handles.start,
+ end = handles.end;
+ var area = cachedStats.area;
+ var halfXLength = Math.abs(start.x - end.x) / 2;
+ var halfYLength = Math.abs(start.y - end.y) / 2;
+ var points = [];
+ var center = {
+ x: (start.x + end.x) / 2,
+ y: (start.y + end.y) / 2
+ };
+
+ if (halfXLength > halfYLength) {
+ // X-axis major
+ // Major axis
+ points.push({
+ x: center.x - halfXLength,
+ y: center.y
+ });
+ points.push({
+ x: center.x + halfXLength,
+ y: center.y
+ }); // Minor axis
+
+ points.push({
+ x: center.x,
+ y: center.y - halfYLength
+ });
+ points.push({
+ x: center.x,
+ y: center.y + halfYLength
+ });
+ } else {
+ // Y-axis major
+ // Major axis
+ points.push({
+ x: center.x,
+ y: center.y - halfYLength
+ });
+ points.push({
+ x: center.x,
+ y: center.y + halfYLength
+ }); // Minor axis
+
+ points.push({
+ x: center.x - halfXLength,
+ y: center.y
+ });
+ points.push({
+ x: center.x + halfXLength,
+ y: center.y
+ });
+ }
+
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:EllipticalRoi";
+ return {
+ area: area,
+ points: points,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return EllipticalRoi;
+ }();
+
+ EllipticalRoi.toolType = ELLIPTICALROI$1;
+ EllipticalRoi.utilityToolType = ELLIPTICALROI$1;
+ EllipticalRoi.TID300Representation = Ellipse$1;
+
+ EllipticalRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === ELLIPTICALROI$1;
+ };
+
+ MeasurementReport$3.registerTool(EllipticalRoi);
+
+ /**
+ * Expand an array of points stored as objects into
+ * a flattened array of points
+ *
+ * @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]
+ * @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]
+ */
+
+ function expandPoints$1(points) {
+ var allPoints = [];
+ points.forEach(function (point) {
+ allPoints.push(point.x);
+ allPoints.push(point.y);
+ });
+ return allPoints;
+ }
+
+ var Circle$1 = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(Circle, _TID300Measurement);
+
+ var _super = _createSuper(Circle);
+
+ function Circle() {
+ _classCallCheck(this, Circle);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Circle, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ points = _this$props.points,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
+ _this$props$use3DSpat = _this$props.use3DSpatialCoordinates,
+ use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat,
+ perimeter = _this$props.perimeter,
+ area = _this$props.area,
+ _this$props$areaUnit = _this$props.areaUnit,
+ areaUnit = _this$props$areaUnit === void 0 ? "mm2" : _this$props$areaUnit,
+ _this$props$unit = _this$props.unit,
+ unit = _this$props$unit === void 0 ? "mm" : _this$props$unit; // Combine all lengths to save the perimeter
+ // @ToDO The permiter has to be implemented
+ // const reducer = (accumulator, currentValue) => accumulator + currentValue;
+ // const perimeter = lengths.reduce(reducer);
+
+ var GraphicData = expandPoints$1(points); // TODO: Add Mean and STDev value of (modality?) pixels
+
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-A197",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Perimeter" // TODO: Look this up from a Code Meaning dictionary
+
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(unit),
+ NumericValue: perimeter
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
+ GraphicType: "CIRCLE",
+ GraphicData: GraphicData,
+ ContentSequence: use3DSpatialCoordinates ? undefined : {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }, {
+ // TODO: This feels weird to repeat the GraphicData
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-A166",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Area" // TODO: Look this up from a Code Meaning dictionary
+
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(areaUnit),
+ NumericValue: area
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
+ GraphicType: "CIRCLE",
+ GraphicData: GraphicData,
+ ContentSequence: use3DSpatialCoordinates ? undefined : {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return Circle;
+ }(TID300Measurement);
+
+ var CIRCLEROI = "CircleRoi";
+
+ var CircleRoi = /*#__PURE__*/function () {
+ function CircleRoi() {
+ _classCallCheck(this, CircleRoi);
+ }
+ /** Gets the measurement data for cornerstone, given DICOM SR measurement data. */
+
+
+ _createClass(CircleRoi, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
+ defaultState = _MeasurementReport$ge.defaultState,
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
+
+ var GraphicData = SCOORDGroup.GraphicData;
+ var center = {
+ x: GraphicData[0],
+ y: GraphicData[1]
+ };
+ var end = {
+ x: GraphicData[2],
+ y: GraphicData[3]
+ };
+
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
+ toolType: CircleRoi.toolType,
+ active: false,
+ cachedStats: {
+ area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0,
+ // Dummy values to be updated by cornerstone
+ radius: 0,
+ perimeter: 0
+ },
+ handles: {
+ end: _objectSpread2(_objectSpread2({}, end), {}, {
+ highlight: false,
+ active: false
+ }),
+ initialRotation: 0,
+ start: _objectSpread2(_objectSpread2({}, center), {}, {
+ highlight: false,
+ active: false
+ }),
+ textBox: {
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ },
+ invalidated: true,
+ visible: true
+ });
+
+ return state;
+ }
+ /**
+ * Gets the TID 300 representation of a circle, given the cornerstone representation.
+ *
+ * @param {Object} tool
+ * @returns
+ */
+
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var _tool$cachedStats = tool.cachedStats,
+ cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,
+ handles = tool.handles,
+ finding = tool.finding,
+ findingSites = tool.findingSites;
+ var center = handles.start,
+ end = handles.end;
+ var area = cachedStats.area,
+ _cachedStats$areaUnit = cachedStats.areaUnit,
+ areaUnit = _cachedStats$areaUnit === void 0 ? "mm2" : _cachedStats$areaUnit,
+ _cachedStats$unit = cachedStats.unit,
+ unit = _cachedStats$unit === void 0 ? "mm" : _cachedStats$unit,
+ radius = cachedStats.radius;
+ var perimeter = 2 * Math.PI * radius;
+ var points = [];
+ points.push(center);
+ points.push(end);
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:CircleRoi";
+ return {
+ area: area,
+ areaUnit: areaUnit,
+ perimeter: perimeter,
+ unit: unit,
+ radius: radius,
+ points: points,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return CircleRoi;
+ }();
+
+ CircleRoi.toolType = CIRCLEROI;
+ CircleRoi.utilityToolType = CIRCLEROI;
+ CircleRoi.TID300Representation = Circle$1;
+
+ CircleRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === CIRCLEROI;
+ };
+
+ MeasurementReport$3.registerTool(CircleRoi);
+
+ var Point$1 = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(Point, _TID300Measurement);
+
+ var _super = _createSuper(Point);
+
+ function Point() {
+ _classCallCheck(this, Point);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Point, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ points = _this$props.points,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
+ _this$props$use3DSpat = _this$props.use3DSpatialCoordinates,
+ use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat;
+ var GraphicData = use3DSpatialCoordinates ? [points[0].x, points[0].y, points[0].z] : [points[0].x, points[0].y]; // Allow storing another point as part of an indicator showing a single point
+
+ if (points.length == 2) {
+ GraphicData.push(points[1].x);
+ GraphicData.push(points[1].y);
+ if (use3DSpatialCoordinates) GraphicData.push(points[1].z);
+ }
+
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "111010",
+ CodingSchemeDesignator: "DCM",
+ CodeMeaning: "Center"
+ },
+ //MeasuredValueSequence: ,
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
+ GraphicType: "POINT",
+ GraphicData: GraphicData,
+ ContentSequence: use3DSpatialCoordinates ? undefined : {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return Point;
+ }(TID300Measurement);
+
+ var ARROW_ANNOTATE$1 = "ArrowAnnotate";
+ var CORNERSTONEFREETEXT$1 = "CORNERSTONEFREETEXT";
+
+ var ArrowAnnotate$1 = /*#__PURE__*/function () {
+ function ArrowAnnotate() {
+ _classCallCheck(this, ArrowAnnotate);
+ }
+
+ _createClass(ArrowAnnotate, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
+ defaultState = _MeasurementReport$ge.defaultState,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
+ findingGroup = _MeasurementReport$ge.findingGroup;
+
+ var text = findingGroup.ConceptCodeSequence.CodeMeaning;
+ var GraphicData = SCOORDGroup.GraphicData;
+
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
+ toolType: ArrowAnnotate.toolType,
+ active: false,
+ handles: {
+ start: {
+ x: GraphicData[0],
+ y: GraphicData[1],
+ highlight: true,
+ active: false
+ },
+ // Use a generic offset if the stored data doesn't have the endpoint, otherwise
+ // use the actual endpoint.
+ end: {
+ x: GraphicData.length == 4 ? GraphicData[2] : GraphicData[0] + 20,
+ y: GraphicData.length == 4 ? GraphicData[3] : GraphicData[1] + 20,
+ highlight: true,
+ active: false
+ },
+ textBox: {
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ },
+ invalidated: true,
+ text: text,
+ visible: true
+ });
+
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var points = [tool.handles.start, tool.handles.end];
+ var finding = tool.finding,
+ findingSites = tool.findingSites;
+ var TID300RepresentationArguments = {
+ points: points,
+ trackingIdentifierTextValue: "cornerstoneTools@^4.0.0:ArrowAnnotate",
+ findingSites: findingSites || []
+ }; // If freetext finding isn't present, add it from the tool text.
+
+ if (!finding || finding.CodeValue !== CORNERSTONEFREETEXT$1) {
+ finding = {
+ CodeValue: CORNERSTONEFREETEXT$1,
+ CodingSchemeDesignator: "CST4",
+ CodeMeaning: tool.text
+ };
+ }
+
+ TID300RepresentationArguments.finding = finding;
+ return TID300RepresentationArguments;
+ }
+ }]);
+
+ return ArrowAnnotate;
+ }();
+
+ ArrowAnnotate$1.toolType = ARROW_ANNOTATE$1;
+ ArrowAnnotate$1.utilityToolType = ARROW_ANNOTATE$1;
+ ArrowAnnotate$1.TID300Representation = Point$1;
+
+ ArrowAnnotate$1.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === ARROW_ANNOTATE$1;
+ };
+
+ MeasurementReport$3.registerTool(ArrowAnnotate$1);
+
+ function iota$1(n) {
+ var result = new Array(n);
+ for(var i=0; i
+ * @license MIT
+ */
+
+ // The _isBuffer check is for Safari 5-7 support, because it's missing
+ // Object.prototype.constructor. Remove this eventually
+ var isBuffer_1 = function (obj) {
+ return obj != null && (isBuffer$1(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
+ };
+
+ function isBuffer$1 (obj) {
+ return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
+ }
+
+ // For Node v0.10 support. Remove this eventually.
+ function isSlowBuffer (obj) {
+ return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer$1(obj.slice(0, 0))
+ }
+
+ var iota = iota_1;
+ var isBuffer = isBuffer_1;
+
+ var hasTypedArrays = ((typeof Float64Array) !== "undefined");
+
+ function compare1st(a, b) {
+ return a[0] - b[0]
+ }
+
+ function order() {
+ var stride = this.stride;
+ var terms = new Array(stride.length);
+ var i;
+ for(i=0; iMath.abs(this.stride[1]))?[1,0]:[0,1]}})");
+ } else if(dimension === 3) {
+ code.push(
+ "var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);\
+if(s0>s1){\
+if(s1>s2){\
+return [2,1,0];\
+}else if(s0>s2){\
+return [1,2,0];\
+}else{\
+return [1,0,2];\
+}\
+}else if(s0>s2){\
+return [2,0,1];\
+}else if(s2>s1){\
+return [0,1,2];\
+}else{\
+return [0,2,1];\
+}}})");
+ }
+ } else {
+ code.push("ORDER})");
+ }
+ }
+
+ //view.set(i0, ..., v):
+ code.push(
+ "proto.set=function "+className+"_set("+args.join(",")+",v){");
+ if(useGetters) {
+ code.push("return this.data.set("+index_str+",v)}");
+ } else {
+ code.push("return this.data["+index_str+"]=v}");
+ }
+
+ //view.get(i0, ...):
+ code.push("proto.get=function "+className+"_get("+args.join(",")+"){");
+ if(useGetters) {
+ code.push("return this.data.get("+index_str+")}");
+ } else {
+ code.push("return this.data["+index_str+"]}");
+ }
+
+ //view.index:
+ code.push(
+ "proto.index=function "+className+"_index(", args.join(), "){return "+index_str+"}");
+
+ //view.hi():
+ code.push("proto.hi=function "+className+"_hi("+args.join(",")+"){return new "+className+"(this.data,"+
+ indices.map(function(i) {
+ return ["(typeof i",i,"!=='number'||i",i,"<0)?this.shape[", i, "]:i", i,"|0"].join("")
+ }).join(",")+","+
+ indices.map(function(i) {
+ return "this.stride["+i + "]"
+ }).join(",")+",this.offset)}");
+
+ //view.lo():
+ var a_vars = indices.map(function(i) { return "a"+i+"=this.shape["+i+"]" });
+ var c_vars = indices.map(function(i) { return "c"+i+"=this.stride["+i+"]" });
+ code.push("proto.lo=function "+className+"_lo("+args.join(",")+"){var b=this.offset,d=0,"+a_vars.join(",")+","+c_vars.join(","));
+ for(var i=0; i=0){\
+d=i"+i+"|0;\
+b+=c"+i+"*d;\
+a"+i+"-=d}");
+ }
+ code.push("return new "+className+"(this.data,"+
+ indices.map(function(i) {
+ return "a"+i
+ }).join(",")+","+
+ indices.map(function(i) {
+ return "c"+i
+ }).join(",")+",b)}");
+
+ //view.step():
+ code.push("proto.step=function "+className+"_step("+args.join(",")+"){var "+
+ indices.map(function(i) {
+ return "a"+i+"=this.shape["+i+"]"
+ }).join(",")+","+
+ indices.map(function(i) {
+ return "b"+i+"=this.stride["+i+"]"
+ }).join(",")+",c=this.offset,d=0,ceil=Math.ceil");
+ for(var i=0; i=0){c=(c+this.stride["+i+"]*i"+i+")|0}else{a.push(this.shape["+i+"]);b.push(this.stride["+i+"])}");
+ }
+ code.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}");
+
+ //Add return statement
+ code.push("return function construct_"+className+"(data,shape,stride,offset){return new "+className+"(data,"+
+ indices.map(function(i) {
+ return "shape["+i+"]"
+ }).join(",")+","+
+ indices.map(function(i) {
+ return "stride["+i+"]"
+ }).join(",")+",offset)}");
+
+ //Compile procedure
+ var procedure = new Function("CTOR_LIST", "ORDER", code.join("\n"));
+ return procedure(CACHED_CONSTRUCTORS[dtype], order)
+ }
+
+ function arrayDType(data) {
+ if(isBuffer(data)) {
+ return "buffer"
+ }
+ if(hasTypedArrays) {
+ switch(Object.prototype.toString.call(data)) {
+ case "[object Float64Array]":
+ return "float64"
+ case "[object Float32Array]":
+ return "float32"
+ case "[object Int8Array]":
+ return "int8"
+ case "[object Int16Array]":
+ return "int16"
+ case "[object Int32Array]":
+ return "int32"
+ case "[object Uint8Array]":
+ return "uint8"
+ case "[object Uint16Array]":
+ return "uint16"
+ case "[object Uint32Array]":
+ return "uint32"
+ case "[object Uint8ClampedArray]":
+ return "uint8_clamped"
+ case "[object BigInt64Array]":
+ return "bigint64"
+ case "[object BigUint64Array]":
+ return "biguint64"
+ }
+ }
+ if(Array.isArray(data)) {
+ return "array"
+ }
+ return "generic"
+ }
+
+ var CACHED_CONSTRUCTORS = {
+ "float32":[],
+ "float64":[],
+ "int8":[],
+ "int16":[],
+ "int32":[],
+ "uint8":[],
+ "uint16":[],
+ "uint32":[],
+ "array":[],
+ "uint8_clamped":[],
+ "bigint64": [],
+ "biguint64": [],
+ "buffer":[],
+ "generic":[]
+ }
+
+ ;
+ function wrappedNDArrayCtor(data, shape, stride, offset) {
+ if(data === undefined) {
+ var ctor = CACHED_CONSTRUCTORS.array[0];
+ return ctor([])
+ } else if(typeof data === "number") {
+ data = [data];
+ }
+ if(shape === undefined) {
+ shape = [ data.length ];
+ }
+ var d = shape.length;
+ if(stride === undefined) {
+ stride = new Array(d);
+ for(var i=d-1, sz=1; i>=0; --i) {
+ stride[i] = sz;
+ sz *= shape[i];
+ }
+ }
+ if(offset === undefined) {
+ offset = 0;
+ for(var i=0; i 2 && arguments[2] !== undefined ? arguments[2] : {
+ includeSliceSpacing: true
+ };
+ var toolState = brushData.toolState,
+ segments = brushData.segments; // Calculate the dimensions of the data cube.
+
+ var image0 = images[0];
+ var dims = {
+ x: image0.columns,
+ y: image0.rows,
+ z: images.length
+ };
+ dims.xy = dims.x * dims.y;
+
+ var numSegments = _getSegCount(seg, segments);
+
+ if (!numSegments) {
+ throw new Error("No segments to export!");
+ }
+
+ var isMultiframe = image0.imageId.includes("?frame");
+
+ var seg = _createSegFromImages$1(images, isMultiframe, options);
+
+ var _getNumberOfFramesPer = _getNumberOfFramesPerSegment(toolState, images, segments),
+ referencedFramesPerSegment = _getNumberOfFramesPer.referencedFramesPerSegment,
+ segmentIndicies = _getNumberOfFramesPer.segmentIndicies;
+
+ var NumberOfFrames = 0;
+
+ for (var i = 0; i < referencedFramesPerSegment.length; i++) {
+ NumberOfFrames += referencedFramesPerSegment[i].length;
+ }
+
+ seg.setNumberOfFrames(NumberOfFrames);
+
+ for (var _i = 0; _i < segmentIndicies.length; _i++) {
+ var segmentIndex = segmentIndicies[_i];
+ var referencedFrameIndicies = referencedFramesPerSegment[_i]; // Frame numbers start from 1.
+
+ var referencedFrameNumbers = referencedFrameIndicies.map(function (element) {
+ return element + 1;
+ });
+ var segment = segments[segmentIndex];
+ seg.addSegment(segment, _extractCornerstoneToolsPixelData(segmentIndex, referencedFrameIndicies, toolState, images, dims), referencedFrameNumbers);
+ }
+
+ seg.bitPackPixelData();
+ var segBlob = datasetToBlob(seg.dataset);
+ return segBlob;
+ }
+
+ function _extractCornerstoneToolsPixelData(segmentIndex, referencedFrames, toolState, images, dims) {
+ var pixelData = new Uint8Array(dims.xy * referencedFrames.length);
+ var pixelDataIndex = 0;
+
+ for (var i = 0; i < referencedFrames.length; i++) {
+ var frame = referencedFrames[i];
+ var imageId = images[frame].imageId;
+ var imageIdSpecificToolState = toolState[imageId];
+ var brushPixelData = imageIdSpecificToolState.brush.data[segmentIndex].pixelData;
+
+ for (var p = 0; p < brushPixelData.length; p++) {
+ pixelData[pixelDataIndex] = brushPixelData[p];
+ pixelDataIndex++;
+ }
+ }
+
+ return pixelData;
+ }
+
+ function _getNumberOfFramesPerSegment(toolState, images, segments) {
+ var segmentIndicies = [];
+ var referencedFramesPerSegment = [];
+
+ for (var i = 0; i < segments.length; i++) {
+ if (segments[i]) {
+ segmentIndicies.push(i);
+ referencedFramesPerSegment.push([]);
+ }
+ }
+
+ for (var z = 0; z < images.length; z++) {
+ var imageId = images[z].imageId;
+ var imageIdSpecificToolState = toolState[imageId];
+
+ for (var _i2 = 0; _i2 < segmentIndicies.length; _i2++) {
+ var segIdx = segmentIndicies[_i2];
+
+ if (imageIdSpecificToolState && imageIdSpecificToolState.brush && imageIdSpecificToolState.brush.data && imageIdSpecificToolState.brush.data[segIdx] && imageIdSpecificToolState.brush.data[segIdx].pixelData) {
+ referencedFramesPerSegment[_i2].push(z);
+ }
+ }
+ }
+
+ return {
+ referencedFramesPerSegment: referencedFramesPerSegment,
+ segmentIndicies: segmentIndicies
+ };
+ }
+
+ function _getSegCount(seg, segments) {
+ var numSegments = 0;
+
+ for (var i = 0; i < segments.length; i++) {
+ if (segments[i]) {
+ numSegments++;
+ }
+ }
+
+ return numSegments;
+ }
+ /**
+ * _createSegFromImages - description
+ *
+ * @param {Object[]} images An array of the cornerstone image objects.
+ * @param {Boolean} isMultiframe Whether the images are multiframe.
+ * @returns {Object} The Seg derived dataSet.
+ */
+
+
+ function _createSegFromImages$1(images, isMultiframe, options) {
+ var datasets = [];
+
+ if (isMultiframe) {
+ var image = images[0];
+ var arrayBuffer = image.data.byteArray.buffer;
+ var dicomData = DicomMessage.readFile(arrayBuffer);
+ var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
+ dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
+ datasets.push(dataset);
+ } else {
+ for (var i = 0; i < images.length; i++) {
+ var _image = images[i];
+ var _arrayBuffer = _image.data.byteArray.buffer;
+
+ var _dicomData = DicomMessage.readFile(_arrayBuffer);
+
+ var _dataset = DicomMetaDictionary.naturalizeDataset(_dicomData.dict);
+
+ _dataset._meta = DicomMetaDictionary.namifyDataset(_dicomData.meta);
+ datasets.push(_dataset);
+ }
+ }
+
+ var multiframe = Normalizer.normalizeToDataset(datasets);
+ return new Segmentation$4([multiframe], options);
+ }
+ /**
+ * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
+ * derive cornerstoneTools toolState and brush metadata.
+ *
+ * @param {string[]} imageIds An array of the imageIds.
+ * @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.
+ * @param {*} metadataProvider
+ * @returns {Object} The toolState and an object from which the
+ * segment metadata can be derived.
+ */
+
+
+ function generateToolState$2(imageIds, arrayBuffer, metadataProvider) {
+ var dicomData = DicomMessage.readFile(arrayBuffer);
+ var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
+ dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
+ var multiframe = Normalizer.normalizeToDataset([dataset]);
+ var imagePlaneModule = metadataProvider.get("imagePlaneModule", imageIds[0]);
+
+ if (!imagePlaneModule) {
+ console.warn("Insufficient metadata, imagePlaneModule missing.");
+ }
+
+ var ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) ? [].concat(_toConsumableArray(imagePlaneModule.rowCosines), _toConsumableArray(imagePlaneModule.columnCosines)) : [imagePlaneModule.rowCosines.x, imagePlaneModule.rowCosines.y, imagePlaneModule.rowCosines.z, imagePlaneModule.columnCosines.x, imagePlaneModule.columnCosines.y, imagePlaneModule.columnCosines.z]; // Get IOP from ref series, compute supported orientations:
+
+ var validOrientations = getValidOrientations$1(ImageOrientationPatient);
+ var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence;
+ var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
+ var sliceLength = multiframe.Columns * multiframe.Rows;
+ var segMetadata = getSegmentMetadata$1(multiframe);
+ var pixelData = unpackPixelData$1(multiframe);
+ var PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;
+ var toolState = {};
+ var inPlane = true;
+
+ for (var i = 0; i < PerFrameFunctionalGroupsSequence.length; i++) {
+ var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[i];
+ var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
+ var pixelDataI2D = ndarray$1(new Uint8Array(pixelData.buffer, i * sliceLength, sliceLength), [multiframe.Rows, multiframe.Columns]);
+ var alignedPixelDataI = alignPixelDataWithSourceData$1(pixelDataI2D, ImageOrientationPatientI, validOrientations);
+
+ if (!alignedPixelDataI) {
+ console.warn("This segmentation object is not in-plane with the source data. Bailing out of IO. It'd be better to render this with vtkjs. ");
+ inPlane = false;
+ break;
+ }
+
+ var segmentIndex = PerFrameFunctionalGroups.SegmentIdentificationSequence.ReferencedSegmentNumber - 1;
+ var SourceImageSequence = void 0;
+
+ if (SharedFunctionalGroupsSequence.DerivationImageSequence && SharedFunctionalGroupsSequence.DerivationImageSequence.SourceImageSequence) {
+ SourceImageSequence = SharedFunctionalGroupsSequence.DerivationImageSequence.SourceImageSequence[i];
+ } else {
+ SourceImageSequence = PerFrameFunctionalGroups.DerivationImageSequence.SourceImageSequence;
+ }
+
+ var imageId = getImageIdOfSourceImage(SourceImageSequence, imageIds, metadataProvider);
+ addImageIdSpecificBrushToolState(toolState, imageId, segmentIndex, alignedPixelDataI);
+ }
+
+ if (!inPlane) {
+ return;
+ }
+
+ return {
+ toolState: toolState,
+ segMetadata: segMetadata
+ };
+ }
+ /**
+ * unpackPixelData - Unpacks bitpacked pixelData if the Segmentation is BINARY.
+ *
+ * @param {Object} multiframe The multiframe dataset.
+ * @return {Uint8Array} The unpacked pixelData.
+ */
+
+
+ function unpackPixelData$1(multiframe) {
+ var segType = multiframe.SegmentationType;
+
+ if (segType === "BINARY") {
+ return BitArray.unpack(multiframe.PixelData);
+ }
+
+ var pixelData = new Uint8Array(multiframe.PixelData);
+ var max = multiframe.MaximumFractionalValue;
+ var onlyMaxAndZero = pixelData.find(function (element) {
+ return element !== 0 && element !== max;
+ }) === undefined;
+
+ if (!onlyMaxAndZero) {
+ log.warn("This is a fractional segmentation, which is not currently supported.");
+ return;
+ }
+
+ log.warn("This segmentation object is actually binary... processing as such.");
+ return pixelData;
+ }
+ /**
+ * addImageIdSpecificBrushToolState - Adds brush pixel data to cornerstoneTools
+ * formatted toolState object.
+ *
+ * @param {Object} toolState The toolState object to modify
+ * @param {String} imageId The imageId of the toolState to add the data.
+ * @param {Number} segmentIndex The index of the segment data being added.
+ * @param {Ndarray} pixelData2D The pixelData in Ndarry 2D format.
+ */
+
+
+ function addImageIdSpecificBrushToolState(toolState, imageId, segmentIndex, pixelData2D) {
+ if (!toolState[imageId]) {
+ toolState[imageId] = {};
+ toolState[imageId].brush = {};
+ toolState[imageId].brush.data = [];
+ } else if (!toolState[imageId].brush) {
+ toolState[imageId].brush = {};
+ toolState[imageId].brush.data = [];
+ } else if (!toolState[imageId].brush.data) {
+ toolState[imageId].brush.data = [];
+ }
+
+ toolState[imageId].brush.data[segmentIndex] = {};
+ var brushDataI = toolState[imageId].brush.data[segmentIndex];
+ brushDataI.pixelData = new Uint8Array(pixelData2D.data.length);
+ var cToolsPixelData = brushDataI.pixelData;
+
+ var _pixelData2D$shape = _slicedToArray(pixelData2D.shape, 2);
+ _pixelData2D$shape[0];
+ _pixelData2D$shape[1];
+
+ for (var p = 0; p < cToolsPixelData.length; p++) {
+ if (pixelData2D.data[p]) {
+ cToolsPixelData[p] = 1;
+ } else {
+ cToolsPixelData[p] = 0;
+ }
+ }
+ }
+ /**
+ * getImageIdOfSourceImage - Returns the Cornerstone imageId of the source image.
+ *
+ * @param {Object} SourceImageSequence Sequence describing the source image.
+ * @param {String[]} imageIds A list of imageIds.
+ * @param {Object} metadataProvider A Cornerstone metadataProvider to query
+ * metadata from imageIds.
+ * @return {String} The corresponding imageId.
+ */
+
+
+ function getImageIdOfSourceImage(SourceImageSequence, imageIds, metadataProvider) {
+ var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,
+ ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
+ return ReferencedFrameNumber ? getImageIdOfReferencedFrame$1(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance$1(ReferencedSOPInstanceUID, imageIds, metadataProvider);
+ }
+ /**
+ * getImageIdOfReferencedSingleFramedSOPInstance - Returns the imageId
+ * corresponding to the specified sopInstanceUid for single-frame images.
+ *
+ * @param {String} sopInstanceUid The sopInstanceUid of the desired image.
+ * @param {String[]} imageIds The list of imageIds.
+ * @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids
+ * from the cornerstone imageIds.
+ * @return {String} The imageId that corresponds to the sopInstanceUid.
+ */
+
+
+ function getImageIdOfReferencedSingleFramedSOPInstance$1(sopInstanceUid, imageIds, metadataProvider) {
+ return imageIds.find(function (imageId) {
+ var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
+
+ if (!sopCommonModule) {
+ return;
+ }
+
+ return sopCommonModule.sopInstanceUID === sopInstanceUid;
+ });
+ }
+ /**
+ * getImageIdOfReferencedFrame - Returns the imageId corresponding to the
+ * specified sopInstanceUid and frameNumber for multi-frame images.
+ *
+ * @param {String} sopInstanceUid The sopInstanceUid of the desired image.
+ * @param {Number} frameNumber The frame number.
+ * @param {String} imageIds The list of imageIds.
+ * @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids
+ * from the cornerstone imageIds.
+ * @return {String} The imageId that corresponds to the sopInstanceUid.
+ */
+
+
+ function getImageIdOfReferencedFrame$1(sopInstanceUid, frameNumber, imageIds, metadataProvider) {
+ var imageId = imageIds.find(function (imageId) {
+ var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
+
+ if (!sopCommonModule) {
+ return;
+ }
+
+ var imageIdFrameNumber = Number(imageId.split("frame=")[1]);
+ return (//frameNumber is zero indexed for cornerstoneWADOImageLoader image Ids.
+ sopCommonModule.sopInstanceUID === sopInstanceUid && imageIdFrameNumber === frameNumber - 1
+ );
+ });
+ return imageId;
+ }
+ /**
+ * getValidOrientations - returns an array of valid orientations.
+ *
+ * @param {Number[6]} iop The row (0..2) an column (3..5) direction cosines.
+ * @return {Number[8][6]} An array of valid orientations.
+ */
+
+
+ function getValidOrientations$1(iop) {
+ var orientations = []; // [0, 1, 2]: 0, 0hf, 0vf
+ // [3, 4, 5]: 90, 90hf, 90vf
+ // [6, 7]: 180, 270
+
+ orientations[0] = iop;
+ orientations[1] = flipImageOrientationPatient.h(iop);
+ orientations[2] = flipImageOrientationPatient.v(iop);
+ var iop90 = rotateDirectionCosinesInPlane(iop, Math.PI / 2);
+ orientations[3] = iop90;
+ orientations[4] = flipImageOrientationPatient.h(iop90);
+ orientations[5] = flipImageOrientationPatient.v(iop90);
+ orientations[6] = rotateDirectionCosinesInPlane(iop, Math.PI);
+ orientations[7] = rotateDirectionCosinesInPlane(iop, 1.5 * Math.PI);
+ return orientations;
+ }
+ /**
+ * alignPixelDataWithSourceData -
+ *
+ * @param {Ndarray} pixelData2D The data to align.
+ * @param {Number[6]} iop The orientation of the image slice.
+ * @param {Number[8][6]} orientations An array of valid imageOrientationPatient values.
+ * @return {Ndarray} The aligned pixelData.
+ */
+
+
+ function alignPixelDataWithSourceData$1(pixelData2D, iop, orientations) {
+ if (compareIOP(iop, orientations[0])) {
+ //Same orientation.
+ return pixelData2D;
+ } else if (compareIOP(iop, orientations[1])) {
+ //Flipped vertically.
+ return flipMatrix2D.v(pixelData2D);
+ } else if (compareIOP(iop, orientations[2])) {
+ //Flipped horizontally.
+ return flipMatrix2D.h(pixelData2D);
+ } else if (compareIOP(iop, orientations[3])) {
+ //Rotated 90 degrees.
+ return rotateMatrix902D(pixelData2D);
+ } else if (compareIOP(iop, orientations[4])) {
+ //Rotated 90 degrees and fliped horizontally.
+ return flipMatrix2D.h(rotateMatrix902D(pixelData2D));
+ } else if (compareIOP(iop, orientations[5])) {
+ //Rotated 90 degrees and fliped vertically.
+ return flipMatrix2D.v(rotateMatrix902D(pixelData2D));
+ } else if (compareIOP(iop, orientations[6])) {
+ //Rotated 180 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.
+ return rotateMatrix902D(rotateMatrix902D(pixelData2D));
+ } else if (compareIOP(iop, orientations[7])) {
+ //Rotated 270 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.
+ return rotateMatrix902D(rotateMatrix902D(rotateMatrix902D(pixelData2D)));
+ }
+ }
+
+ var dx = 1e-5;
+ /**
+ * compareIOP - Returns true if iop1 and iop2 are equal
+ * within a tollerance, dx.
+ *
+ * @param {Number[6]} iop1 An ImageOrientationPatient array.
+ * @param {Number[6]} iop2 An ImageOrientationPatient array.
+ * @return {Boolean} True if iop1 and iop2 are equal.
+ */
+
+ function compareIOP(iop1, iop2) {
+ return Math.abs(iop1[0] - iop2[0]) < dx && Math.abs(iop1[1] - iop2[1]) < dx && Math.abs(iop1[2] - iop2[2]) < dx && Math.abs(iop1[3] - iop2[3]) < dx && Math.abs(iop1[4] - iop2[4]) < dx && Math.abs(iop1[5] - iop2[5]) < dx;
+ }
+
+ function getSegmentMetadata$1(multiframe) {
+ var data = [];
+ var segmentSequence = multiframe.SegmentSequence;
+
+ if (Array.isArray(segmentSequence)) {
+ for (var segIdx = 0; segIdx < segmentSequence.length; segIdx++) {
+ data.push(segmentSequence[segIdx]);
+ }
+ } else {
+ // Only one segment, will be stored as an object.
+ data.push(segmentSequence);
+ }
+
+ return {
+ seriesInstanceUid: multiframe.ReferencedSeriesSequence.SeriesInstanceUID,
+ data: data
+ };
+ }
+
+ /**
+ * Common utilities
+ * @module glMatrix
+ */
+ // Configuration Constants
+ var EPSILON$1 = 0.000001;
+ var ARRAY_TYPE = typeof Float32Array !== 'undefined' ? Float32Array : Array;
+ var RANDOM = Math.random;
+ if (!Math.hypot) Math.hypot = function () {
+ var y = 0,
+ i = arguments.length;
+
+ while (i--) {
+ y += arguments[i] * arguments[i];
+ }
+
+ return Math.sqrt(y);
+ };
+
+ /**
+ * 3 Dimensional Vector
+ * @module vec3
+ */
+
+ /**
+ * Creates a new, empty vec3
+ *
+ * @returns {vec3} a new 3D vector
+ */
+
+ function create() {
+ var out = new ARRAY_TYPE(3);
+
+ if (ARRAY_TYPE != Float32Array) {
+ out[0] = 0;
+ out[1] = 0;
+ out[2] = 0;
+ }
+
+ return out;
+ }
+ /**
+ * Creates a new vec3 initialized with values from an existing vector
+ *
+ * @param {ReadonlyVec3} a vector to clone
+ * @returns {vec3} a new 3D vector
+ */
+
+ function clone(a) {
+ var out = new ARRAY_TYPE(3);
+ out[0] = a[0];
+ out[1] = a[1];
+ out[2] = a[2];
+ return out;
+ }
+ /**
+ * Calculates the length of a vec3
+ *
+ * @param {ReadonlyVec3} a vector to calculate length of
+ * @returns {Number} length of a
+ */
+
+ function length(a) {
+ var x = a[0];
+ var y = a[1];
+ var z = a[2];
+ return Math.hypot(x, y, z);
+ }
+ /**
+ * Creates a new vec3 initialized with the given values
+ *
+ * @param {Number} x X component
+ * @param {Number} y Y component
+ * @param {Number} z Z component
+ * @returns {vec3} a new 3D vector
+ */
+
+ function fromValues(x, y, z) {
+ var out = new ARRAY_TYPE(3);
+ out[0] = x;
+ out[1] = y;
+ out[2] = z;
+ return out;
+ }
+ /**
+ * Copy the values from one vec3 to another
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the source vector
+ * @returns {vec3} out
+ */
+
+ function copy(out, a) {
+ out[0] = a[0];
+ out[1] = a[1];
+ out[2] = a[2];
+ return out;
+ }
+ /**
+ * Set the components of a vec3 to the given values
+ *
+ * @param {vec3} out the receiving vector
+ * @param {Number} x X component
+ * @param {Number} y Y component
+ * @param {Number} z Z component
+ * @returns {vec3} out
+ */
+
+ function set(out, x, y, z) {
+ out[0] = x;
+ out[1] = y;
+ out[2] = z;
+ return out;
+ }
+ /**
+ * Adds two vec3's
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {vec3} out
+ */
+
+ function add(out, a, b) {
+ out[0] = a[0] + b[0];
+ out[1] = a[1] + b[1];
+ out[2] = a[2] + b[2];
+ return out;
+ }
+ /**
+ * Subtracts vector b from vector a
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {vec3} out
+ */
+
+ function subtract$1(out, a, b) {
+ out[0] = a[0] - b[0];
+ out[1] = a[1] - b[1];
+ out[2] = a[2] - b[2];
+ return out;
+ }
+ /**
+ * Multiplies two vec3's
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {vec3} out
+ */
+
+ function multiply(out, a, b) {
+ out[0] = a[0] * b[0];
+ out[1] = a[1] * b[1];
+ out[2] = a[2] * b[2];
+ return out;
+ }
+ /**
+ * Divides two vec3's
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {vec3} out
+ */
+
+ function divide(out, a, b) {
+ out[0] = a[0] / b[0];
+ out[1] = a[1] / b[1];
+ out[2] = a[2] / b[2];
+ return out;
+ }
+ /**
+ * Math.ceil the components of a vec3
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a vector to ceil
+ * @returns {vec3} out
+ */
+
+ function ceil(out, a) {
+ out[0] = Math.ceil(a[0]);
+ out[1] = Math.ceil(a[1]);
+ out[2] = Math.ceil(a[2]);
+ return out;
+ }
+ /**
+ * Math.floor the components of a vec3
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a vector to floor
+ * @returns {vec3} out
+ */
+
+ function floor(out, a) {
+ out[0] = Math.floor(a[0]);
+ out[1] = Math.floor(a[1]);
+ out[2] = Math.floor(a[2]);
+ return out;
+ }
+ /**
+ * Returns the minimum of two vec3's
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {vec3} out
+ */
+
+ function min(out, a, b) {
+ out[0] = Math.min(a[0], b[0]);
+ out[1] = Math.min(a[1], b[1]);
+ out[2] = Math.min(a[2], b[2]);
+ return out;
+ }
+ /**
+ * Returns the maximum of two vec3's
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {vec3} out
+ */
+
+ function max(out, a, b) {
+ out[0] = Math.max(a[0], b[0]);
+ out[1] = Math.max(a[1], b[1]);
+ out[2] = Math.max(a[2], b[2]);
+ return out;
+ }
+ /**
+ * Math.round the components of a vec3
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a vector to round
+ * @returns {vec3} out
+ */
+
+ function round(out, a) {
+ out[0] = Math.round(a[0]);
+ out[1] = Math.round(a[1]);
+ out[2] = Math.round(a[2]);
+ return out;
+ }
+ /**
+ * Scales a vec3 by a scalar number
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the vector to scale
+ * @param {Number} b amount to scale the vector by
+ * @returns {vec3} out
+ */
+
+ function scale(out, a, b) {
+ out[0] = a[0] * b;
+ out[1] = a[1] * b;
+ out[2] = a[2] * b;
+ return out;
+ }
+ /**
+ * Adds two vec3's after scaling the second operand by a scalar value
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @param {Number} scale the amount to scale b by before adding
+ * @returns {vec3} out
+ */
+
+ function scaleAndAdd(out, a, b, scale) {
+ out[0] = a[0] + b[0] * scale;
+ out[1] = a[1] + b[1] * scale;
+ out[2] = a[2] + b[2] * scale;
+ return out;
+ }
+ /**
+ * Calculates the euclidian distance between two vec3's
+ *
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {Number} distance between a and b
+ */
+
+ function distance(a, b) {
+ var x = b[0] - a[0];
+ var y = b[1] - a[1];
+ var z = b[2] - a[2];
+ return Math.hypot(x, y, z);
+ }
+ /**
+ * Calculates the squared euclidian distance between two vec3's
+ *
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {Number} squared distance between a and b
+ */
+
+ function squaredDistance(a, b) {
+ var x = b[0] - a[0];
+ var y = b[1] - a[1];
+ var z = b[2] - a[2];
+ return x * x + y * y + z * z;
+ }
+ /**
+ * Calculates the squared length of a vec3
+ *
+ * @param {ReadonlyVec3} a vector to calculate squared length of
+ * @returns {Number} squared length of a
+ */
+
+ function squaredLength(a) {
+ var x = a[0];
+ var y = a[1];
+ var z = a[2];
+ return x * x + y * y + z * z;
+ }
+ /**
+ * Negates the components of a vec3
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a vector to negate
+ * @returns {vec3} out
+ */
+
+ function negate(out, a) {
+ out[0] = -a[0];
+ out[1] = -a[1];
+ out[2] = -a[2];
+ return out;
+ }
+ /**
+ * Returns the inverse of the components of a vec3
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a vector to invert
+ * @returns {vec3} out
+ */
+
+ function inverse(out, a) {
+ out[0] = 1.0 / a[0];
+ out[1] = 1.0 / a[1];
+ out[2] = 1.0 / a[2];
+ return out;
+ }
+ /**
+ * Normalize a vec3
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a vector to normalize
+ * @returns {vec3} out
+ */
+
+ function normalize$1(out, a) {
+ var x = a[0];
+ var y = a[1];
+ var z = a[2];
+ var len = x * x + y * y + z * z;
+
+ if (len > 0) {
+ //TODO: evaluate use of glm_invsqrt here?
+ len = 1 / Math.sqrt(len);
+ }
+
+ out[0] = a[0] * len;
+ out[1] = a[1] * len;
+ out[2] = a[2] * len;
+ return out;
+ }
+ /**
+ * Calculates the dot product of two vec3's
+ *
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {Number} dot product of a and b
+ */
+
+ function dot(a, b) {
+ return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+ }
+ /**
+ * Computes the cross product of two vec3's
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @returns {vec3} out
+ */
+
+ function cross$1(out, a, b) {
+ var ax = a[0],
+ ay = a[1],
+ az = a[2];
+ var bx = b[0],
+ by = b[1],
+ bz = b[2];
+ out[0] = ay * bz - az * by;
+ out[1] = az * bx - ax * bz;
+ out[2] = ax * by - ay * bx;
+ return out;
+ }
+ /**
+ * Performs a linear interpolation between two vec3's
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @param {Number} t interpolation amount, in the range [0-1], between the two inputs
+ * @returns {vec3} out
+ */
+
+ function lerp(out, a, b, t) {
+ var ax = a[0];
+ var ay = a[1];
+ var az = a[2];
+ out[0] = ax + t * (b[0] - ax);
+ out[1] = ay + t * (b[1] - ay);
+ out[2] = az + t * (b[2] - az);
+ return out;
+ }
+ /**
+ * Performs a hermite interpolation with two control points
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @param {ReadonlyVec3} c the third operand
+ * @param {ReadonlyVec3} d the fourth operand
+ * @param {Number} t interpolation amount, in the range [0-1], between the two inputs
+ * @returns {vec3} out
+ */
+
+ function hermite(out, a, b, c, d, t) {
+ var factorTimes2 = t * t;
+ var factor1 = factorTimes2 * (2 * t - 3) + 1;
+ var factor2 = factorTimes2 * (t - 2) + t;
+ var factor3 = factorTimes2 * (t - 1);
+ var factor4 = factorTimes2 * (3 - 2 * t);
+ out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
+ out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
+ out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
+ return out;
+ }
+ /**
+ * Performs a bezier interpolation with two control points
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the first operand
+ * @param {ReadonlyVec3} b the second operand
+ * @param {ReadonlyVec3} c the third operand
+ * @param {ReadonlyVec3} d the fourth operand
+ * @param {Number} t interpolation amount, in the range [0-1], between the two inputs
+ * @returns {vec3} out
+ */
+
+ function bezier(out, a, b, c, d, t) {
+ var inverseFactor = 1 - t;
+ var inverseFactorTimesTwo = inverseFactor * inverseFactor;
+ var factorTimes2 = t * t;
+ var factor1 = inverseFactorTimesTwo * inverseFactor;
+ var factor2 = 3 * t * inverseFactorTimesTwo;
+ var factor3 = 3 * factorTimes2 * inverseFactor;
+ var factor4 = factorTimes2 * t;
+ out[0] = a[0] * factor1 + b[0] * factor2 + c[0] * factor3 + d[0] * factor4;
+ out[1] = a[1] * factor1 + b[1] * factor2 + c[1] * factor3 + d[1] * factor4;
+ out[2] = a[2] * factor1 + b[2] * factor2 + c[2] * factor3 + d[2] * factor4;
+ return out;
+ }
+ /**
+ * Generates a random vector with the given scale
+ *
+ * @param {vec3} out the receiving vector
+ * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned
+ * @returns {vec3} out
+ */
+
+ function random(out, scale) {
+ scale = scale || 1.0;
+ var r = RANDOM() * 2.0 * Math.PI;
+ var z = RANDOM() * 2.0 - 1.0;
+ var zScale = Math.sqrt(1.0 - z * z) * scale;
+ out[0] = Math.cos(r) * zScale;
+ out[1] = Math.sin(r) * zScale;
+ out[2] = z * scale;
+ return out;
+ }
+ /**
+ * Transforms the vec3 with a mat4.
+ * 4th vector component is implicitly '1'
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the vector to transform
+ * @param {ReadonlyMat4} m matrix to transform with
+ * @returns {vec3} out
+ */
+
+ function transformMat4(out, a, m) {
+ var x = a[0],
+ y = a[1],
+ z = a[2];
+ var w = m[3] * x + m[7] * y + m[11] * z + m[15];
+ w = w || 1.0;
+ out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w;
+ out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w;
+ out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w;
+ return out;
+ }
+ /**
+ * Transforms the vec3 with a mat3.
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the vector to transform
+ * @param {ReadonlyMat3} m the 3x3 matrix to transform with
+ * @returns {vec3} out
+ */
+
+ function transformMat3(out, a, m) {
+ var x = a[0],
+ y = a[1],
+ z = a[2];
+ out[0] = x * m[0] + y * m[3] + z * m[6];
+ out[1] = x * m[1] + y * m[4] + z * m[7];
+ out[2] = x * m[2] + y * m[5] + z * m[8];
+ return out;
+ }
+ /**
+ * Transforms the vec3 with a quat
+ * Can also be used for dual quaternions. (Multiply it with the real part)
+ *
+ * @param {vec3} out the receiving vector
+ * @param {ReadonlyVec3} a the vector to transform
+ * @param {ReadonlyQuat} q quaternion to transform with
+ * @returns {vec3} out
+ */
+
+ function transformQuat(out, a, q) {
+ // benchmarks: https://jsperf.com/quaternion-transform-vec3-implementations-fixed
+ var qx = q[0],
+ qy = q[1],
+ qz = q[2],
+ qw = q[3];
+ var x = a[0],
+ y = a[1],
+ z = a[2]; // var qvec = [qx, qy, qz];
+ // var uv = vec3.cross([], qvec, a);
+
+ var uvx = qy * z - qz * y,
+ uvy = qz * x - qx * z,
+ uvz = qx * y - qy * x; // var uuv = vec3.cross([], qvec, uv);
+
+ var uuvx = qy * uvz - qz * uvy,
+ uuvy = qz * uvx - qx * uvz,
+ uuvz = qx * uvy - qy * uvx; // vec3.scale(uv, uv, 2 * w);
+
+ var w2 = qw * 2;
+ uvx *= w2;
+ uvy *= w2;
+ uvz *= w2; // vec3.scale(uuv, uuv, 2);
+
+ uuvx *= 2;
+ uuvy *= 2;
+ uuvz *= 2; // return vec3.add(out, a, vec3.add(out, uv, uuv));
+
+ out[0] = x + uvx + uuvx;
+ out[1] = y + uvy + uuvy;
+ out[2] = z + uvz + uuvz;
+ return out;
+ }
+ /**
+ * Rotate a 3D vector around the x-axis
+ * @param {vec3} out The receiving vec3
+ * @param {ReadonlyVec3} a The vec3 point to rotate
+ * @param {ReadonlyVec3} b The origin of the rotation
+ * @param {Number} rad The angle of rotation in radians
+ * @returns {vec3} out
+ */
+
+ function rotateX(out, a, b, rad) {
+ var p = [],
+ r = []; //Translate point to the origin
+
+ p[0] = a[0] - b[0];
+ p[1] = a[1] - b[1];
+ p[2] = a[2] - b[2]; //perform rotation
+
+ r[0] = p[0];
+ r[1] = p[1] * Math.cos(rad) - p[2] * Math.sin(rad);
+ r[2] = p[1] * Math.sin(rad) + p[2] * Math.cos(rad); //translate to correct position
+
+ out[0] = r[0] + b[0];
+ out[1] = r[1] + b[1];
+ out[2] = r[2] + b[2];
+ return out;
+ }
+ /**
+ * Rotate a 3D vector around the y-axis
+ * @param {vec3} out The receiving vec3
+ * @param {ReadonlyVec3} a The vec3 point to rotate
+ * @param {ReadonlyVec3} b The origin of the rotation
+ * @param {Number} rad The angle of rotation in radians
+ * @returns {vec3} out
+ */
+
+ function rotateY(out, a, b, rad) {
+ var p = [],
+ r = []; //Translate point to the origin
+
+ p[0] = a[0] - b[0];
+ p[1] = a[1] - b[1];
+ p[2] = a[2] - b[2]; //perform rotation
+
+ r[0] = p[2] * Math.sin(rad) + p[0] * Math.cos(rad);
+ r[1] = p[1];
+ r[2] = p[2] * Math.cos(rad) - p[0] * Math.sin(rad); //translate to correct position
+
+ out[0] = r[0] + b[0];
+ out[1] = r[1] + b[1];
+ out[2] = r[2] + b[2];
+ return out;
+ }
+ /**
+ * Rotate a 3D vector around the z-axis
+ * @param {vec3} out The receiving vec3
+ * @param {ReadonlyVec3} a The vec3 point to rotate
+ * @param {ReadonlyVec3} b The origin of the rotation
+ * @param {Number} rad The angle of rotation in radians
+ * @returns {vec3} out
+ */
+
+ function rotateZ(out, a, b, rad) {
+ var p = [],
+ r = []; //Translate point to the origin
+
+ p[0] = a[0] - b[0];
+ p[1] = a[1] - b[1];
+ p[2] = a[2] - b[2]; //perform rotation
+
+ r[0] = p[0] * Math.cos(rad) - p[1] * Math.sin(rad);
+ r[1] = p[0] * Math.sin(rad) + p[1] * Math.cos(rad);
+ r[2] = p[2]; //translate to correct position
+
+ out[0] = r[0] + b[0];
+ out[1] = r[1] + b[1];
+ out[2] = r[2] + b[2];
+ return out;
+ }
+ /**
+ * Get the angle between two 3D vectors
+ * @param {ReadonlyVec3} a The first operand
+ * @param {ReadonlyVec3} b The second operand
+ * @returns {Number} The angle in radians
+ */
+
+ function angle(a, b) {
+ var ax = a[0],
+ ay = a[1],
+ az = a[2],
+ bx = b[0],
+ by = b[1],
+ bz = b[2],
+ mag1 = Math.sqrt(ax * ax + ay * ay + az * az),
+ mag2 = Math.sqrt(bx * bx + by * by + bz * bz),
+ mag = mag1 * mag2,
+ cosine = mag && dot(a, b) / mag;
+ return Math.acos(Math.min(Math.max(cosine, -1), 1));
+ }
+ /**
+ * Set the components of a vec3 to zero
+ *
+ * @param {vec3} out the receiving vector
+ * @returns {vec3} out
+ */
+
+ function zero(out) {
+ out[0] = 0.0;
+ out[1] = 0.0;
+ out[2] = 0.0;
+ return out;
+ }
+ /**
+ * Returns a string representation of a vector
+ *
+ * @param {ReadonlyVec3} a vector to represent as a string
+ * @returns {String} string representation of the vector
+ */
+
+ function str(a) {
+ return "vec3(" + a[0] + ", " + a[1] + ", " + a[2] + ")";
+ }
+ /**
+ * Returns whether or not the vectors have exactly the same elements in the same position (when compared with ===)
+ *
+ * @param {ReadonlyVec3} a The first vector.
+ * @param {ReadonlyVec3} b The second vector.
+ * @returns {Boolean} True if the vectors are equal, false otherwise.
+ */
+
+ function exactEquals(a, b) {
+ return a[0] === b[0] && a[1] === b[1] && a[2] === b[2];
+ }
+ /**
+ * Returns whether or not the vectors have approximately the same elements in the same position.
+ *
+ * @param {ReadonlyVec3} a The first vector.
+ * @param {ReadonlyVec3} b The second vector.
+ * @returns {Boolean} True if the vectors are equal, false otherwise.
+ */
+
+ function equals(a, b) {
+ var a0 = a[0],
+ a1 = a[1],
+ a2 = a[2];
+ var b0 = b[0],
+ b1 = b[1],
+ b2 = b[2];
+ return Math.abs(a0 - b0) <= EPSILON$1 * Math.max(1.0, Math.abs(a0), Math.abs(b0)) && Math.abs(a1 - b1) <= EPSILON$1 * Math.max(1.0, Math.abs(a1), Math.abs(b1)) && Math.abs(a2 - b2) <= EPSILON$1 * Math.max(1.0, Math.abs(a2), Math.abs(b2));
+ }
+ /**
+ * Alias for {@link vec3.subtract}
+ * @function
+ */
+
+ var sub = subtract$1;
+ /**
+ * Alias for {@link vec3.multiply}
+ * @function
+ */
+
+ var mul = multiply;
+ /**
+ * Alias for {@link vec3.divide}
+ * @function
+ */
+
+ var div = divide;
+ /**
+ * Alias for {@link vec3.distance}
+ * @function
+ */
+
+ var dist = distance;
+ /**
+ * Alias for {@link vec3.squaredDistance}
+ * @function
+ */
+
+ var sqrDist = squaredDistance;
+ /**
+ * Alias for {@link vec3.length}
+ * @function
+ */
+
+ var len = length;
+ /**
+ * Alias for {@link vec3.squaredLength}
+ * @function
+ */
+
+ var sqrLen = squaredLength;
+ /**
+ * Perform some operation over an array of vec3s.
+ *
+ * @param {Array} a the array of vectors to iterate over
+ * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed
+ * @param {Number} offset Number of elements to skip at the beginning of the array
+ * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array
+ * @param {Function} fn Function to call for each vector in the array
+ * @param {Object} [arg] additional argument to pass to fn
+ * @returns {Array} a
+ * @function
+ */
+
+ var forEach = function () {
+ var vec = create();
+ return function (a, stride, offset, count, fn, arg) {
+ var i, l;
+
+ if (!stride) {
+ stride = 3;
+ }
+
+ if (!offset) {
+ offset = 0;
+ }
+
+ if (count) {
+ l = Math.min(count * stride + offset, a.length);
+ } else {
+ l = a.length;
+ }
+
+ for (i = offset; i < l; i += stride) {
+ vec[0] = a[i];
+ vec[1] = a[i + 1];
+ vec[2] = a[i + 2];
+ fn(vec, vec, arg);
+ a[i] = vec[0];
+ a[i + 1] = vec[1];
+ a[i + 2] = vec[2];
+ }
+
+ return a;
+ };
+ }();
+
+ var vec3 = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ add: add,
+ angle: angle,
+ bezier: bezier,
+ ceil: ceil,
+ clone: clone,
+ copy: copy,
+ create: create,
+ cross: cross$1,
+ dist: dist,
+ distance: distance,
+ div: div,
+ divide: divide,
+ dot: dot,
+ equals: equals,
+ exactEquals: exactEquals,
+ floor: floor,
+ forEach: forEach,
+ fromValues: fromValues,
+ hermite: hermite,
+ inverse: inverse,
+ len: len,
+ length: length,
+ lerp: lerp,
+ max: max,
+ min: min,
+ mul: mul,
+ multiply: multiply,
+ negate: negate,
+ normalize: normalize$1,
+ random: random,
+ rotateX: rotateX,
+ rotateY: rotateY,
+ rotateZ: rotateZ,
+ round: round,
+ scale: scale,
+ scaleAndAdd: scaleAndAdd,
+ set: set,
+ sqrDist: sqrDist,
+ sqrLen: sqrLen,
+ squaredDistance: squaredDistance,
+ squaredLength: squaredLength,
+ str: str,
+ sub: sub,
+ subtract: subtract$1,
+ transformMat3: transformMat3,
+ transformMat4: transformMat4,
+ transformQuat: transformQuat,
+ zero: zero
+ });
+
+ /**
+ * Encodes a non-bitpacked frame which has one sample per pixel.
+ *
+ * @param {*} buffer
+ * @param {*} numberOfFrames
+ * @param {*} rows
+ * @param {*} cols
+ */
+
+ function encode(buffer, numberOfFrames, rows, cols) {
+ var frameLength = rows * cols;
+ var header = createHeader();
+ var encodedFrames = [];
+
+ for (var frame = 0; frame < numberOfFrames; frame++) {
+ var frameOffset = frameLength * frame;
+ encodedFrames.push(encodeFrame(buffer, frameOffset, rows, cols, header));
+ }
+
+ return encodedFrames;
+ }
+
+ function encodeFrame(buffer, frameOffset, rows, cols, header) {
+ // Add header to frame:
+ var rleArray = [];
+
+ for (var r = 0; r < rows; r++) {
+ var rowOffset = r * cols;
+ var uint8Row = new Uint8Array(buffer, frameOffset + rowOffset, cols);
+ var i = 0;
+
+ while (i < uint8Row.length) {
+ var literalRunLength = getLiteralRunLength(uint8Row, i);
+
+ if (literalRunLength) {
+ // State how many in litteral run
+ rleArray.push(literalRunLength - 1); // Append litteral run.
+
+ var literalRun = uint8Row.slice(i, i + literalRunLength);
+ rleArray = [].concat(_toConsumableArray(rleArray), _toConsumableArray(literalRun));
+ i += literalRunLength;
+ }
+
+ if (i >= uint8Row.length) {
+ break;
+ } // Next must be a replicate run.
+
+
+ var replicateRunLength = getReplicateRunLength(uint8Row, i);
+
+ if (replicateRunLength) {
+ // State how many in replicate run
+ rleArray.push(257 - replicateRunLength);
+ rleArray.push(uint8Row[i]);
+ i += replicateRunLength;
+ }
+ }
+ }
+
+ var headerLength = 64;
+ var bodyLength = rleArray.length % 2 === 0 ? rleArray.length : rleArray.length + 1;
+ var encodedFrameBuffer = new ArrayBuffer(headerLength + bodyLength); // Copy header into encodedFrameBuffer.
+
+ var headerView = new Uint32Array(encodedFrameBuffer, 0, 16);
+
+ for (var _i = 0; _i < headerView.length; _i++) {
+ headerView[_i] = header[_i];
+ }
+
+ for (var _i2 = 0; _i2 < headerView.length; _i2++) {
+ rleArray.push(headerView[_i2]);
+ } // Copy rle data into encodedFrameBuffer.
+
+
+ var bodyView = new Uint8Array(encodedFrameBuffer, 64);
+
+ for (var _i3 = 0; _i3 < rleArray.length; _i3++) {
+ bodyView[_i3] = rleArray[_i3];
+ }
+
+ return encodedFrameBuffer;
+ }
+
+ function createHeader() {
+ var headerUint32 = new Uint32Array(16);
+ headerUint32[0] = 1; // 1 Segment.
+
+ headerUint32[1] = 64; // Data offset is 64 bytes.
+ // Return byte-array version of header:
+
+ return headerUint32;
+ }
+
+ function getLiteralRunLength(uint8Row, i) {
+ for (var l = 0; l < uint8Row.length - i; l++) {
+ if (uint8Row[i + l] === uint8Row[i + l + 1] && uint8Row[i + l + 1] === uint8Row[i + l + 2]) {
+ return l;
+ }
+
+ if (l === 128) {
+ return l;
+ }
+ }
+
+ return uint8Row.length - i;
+ }
+
+ function getReplicateRunLength(uint8Row, i) {
+ var first = uint8Row[i];
+
+ for (var l = 1; l < uint8Row.length - i; l++) {
+ if (uint8Row[i + l] !== first) {
+ return l;
+ }
+
+ if (l === 128) {
+ return l;
+ }
+ }
+
+ return uint8Row.length - i;
+ }
+
+ function decode(rleEncodedFrames, rows, cols) {
+ var pixelData = new Uint8Array(rows * cols * rleEncodedFrames.length);
+ var buffer = pixelData.buffer;
+ var frameLength = rows * cols;
+
+ for (var i = 0; i < rleEncodedFrames.length; i++) {
+ var rleEncodedFrame = rleEncodedFrames[i];
+ var uint8FrameView = new Uint8Array(buffer, i * frameLength, frameLength);
+ decodeFrame(rleEncodedFrame, uint8FrameView);
+ }
+
+ return pixelData;
+ }
+
+ function decodeFrame(rleEncodedFrame, pixelData) {
+ // Check HEADER:
+ var header = new Uint32Array(rleEncodedFrame, 0, 16);
+
+ if (header[0] !== 1) {
+ log.error("rleSingleSamplePerPixel only supports fragments with single Byte Segments (for rle encoded segmentation data) at the current time. This rleEncodedFrame has ".concat(header[0], " Byte Segments."));
+ return;
+ }
+
+ if (header[1] !== 64) {
+ log.error("Data offset of Byte Segment 1 should be 64 bytes, this rle fragment is encoded incorrectly.");
+ return;
+ }
+
+ var uInt8Frame = new Uint8Array(rleEncodedFrame, 64);
+ var pixelDataIndex = 0;
+ var i = 0;
+
+ while (pixelDataIndex < pixelData.length) {
+ var byteValue = uInt8Frame[i];
+
+ if (byteValue === undefined) {
+ break;
+ }
+
+ if (byteValue <= 127) {
+ // TODO -> Interpret the next N+1 bytes literally.
+ var N = byteValue + 1;
+ var next = i + 1; // Read the next N bytes literally.
+
+ for (var p = next; p < next + N; p++) {
+ pixelData[pixelDataIndex] = uInt8Frame[p];
+ pixelDataIndex++;
+ }
+
+ i += N + 1;
+ }
+
+ if (byteValue >= 129) {
+ var _N = 257 - byteValue;
+
+ var _next = i + 1; // Repeat the next byte N times.
+
+
+ for (var _p = 0; _p < _N; _p++) {
+ pixelData[pixelDataIndex] = uInt8Frame[_next];
+ pixelDataIndex++;
+ }
+
+ i += 2;
+ }
+
+ if (i === uInt8Frame.length) {
+ break;
+ }
+ }
+ }
+
+ var compression = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ decode: decode,
+ encode: encode
+ });
+
+ var lodash_clonedeep = {exports: {}};
+
+ /**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+ lodash_clonedeep.exports;
+
+ (function (module, exports) {
+ /** Used as the size to enable large array optimizations. */
+ var LARGE_ARRAY_SIZE = 200;
+
+ /** Used to stand-in for `undefined` hash values. */
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+ /** Used as references for various `Number` constants. */
+ var MAX_SAFE_INTEGER = 9007199254740991;
+
+ /** `Object#toString` result references. */
+ var argsTag = '[object Arguments]',
+ arrayTag = '[object Array]',
+ boolTag = '[object Boolean]',
+ dateTag = '[object Date]',
+ errorTag = '[object Error]',
+ funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]',
+ mapTag = '[object Map]',
+ numberTag = '[object Number]',
+ objectTag = '[object Object]',
+ promiseTag = '[object Promise]',
+ regexpTag = '[object RegExp]',
+ setTag = '[object Set]',
+ stringTag = '[object String]',
+ symbolTag = '[object Symbol]',
+ weakMapTag = '[object WeakMap]';
+
+ var arrayBufferTag = '[object ArrayBuffer]',
+ dataViewTag = '[object DataView]',
+ float32Tag = '[object Float32Array]',
+ float64Tag = '[object Float64Array]',
+ int8Tag = '[object Int8Array]',
+ int16Tag = '[object Int16Array]',
+ int32Tag = '[object Int32Array]',
+ uint8Tag = '[object Uint8Array]',
+ uint8ClampedTag = '[object Uint8ClampedArray]',
+ uint16Tag = '[object Uint16Array]',
+ uint32Tag = '[object Uint32Array]';
+
+ /**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+ /** Used to match `RegExp` flags from their coerced string values. */
+ var reFlags = /\w*$/;
+
+ /** Used to detect host constructors (Safari). */
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+ /** Used to detect unsigned integer values. */
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
+
+ /** Used to identify `toStringTag` values supported by `_.clone`. */
+ var cloneableTags = {};
+ cloneableTags[argsTag] = cloneableTags[arrayTag] =
+ cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
+ cloneableTags[boolTag] = cloneableTags[dateTag] =
+ cloneableTags[float32Tag] = cloneableTags[float64Tag] =
+ cloneableTags[int8Tag] = cloneableTags[int16Tag] =
+ cloneableTags[int32Tag] = cloneableTags[mapTag] =
+ cloneableTags[numberTag] = cloneableTags[objectTag] =
+ cloneableTags[regexpTag] = cloneableTags[setTag] =
+ cloneableTags[stringTag] = cloneableTags[symbolTag] =
+ cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
+ cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
+ cloneableTags[errorTag] = cloneableTags[funcTag] =
+ cloneableTags[weakMapTag] = false;
+
+ /** Detect free variable `global` from Node.js. */
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
+
+ /** Detect free variable `self`. */
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+ /** Used as a reference to the global object. */
+ var root = freeGlobal || freeSelf || Function('return this')();
+
+ /** Detect free variable `exports`. */
+ var freeExports = exports && !exports.nodeType && exports;
+
+ /** Detect free variable `module`. */
+ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
+
+ /** Detect the popular CommonJS extension `module.exports`. */
+ var moduleExports = freeModule && freeModule.exports === freeExports;
+
+ /**
+ * Adds the key-value `pair` to `map`.
+ *
+ * @private
+ * @param {Object} map The map to modify.
+ * @param {Array} pair The key-value pair to add.
+ * @returns {Object} Returns `map`.
+ */
+ function addMapEntry(map, pair) {
+ // Don't return `map.set` because it's not chainable in IE 11.
+ map.set(pair[0], pair[1]);
+ return map;
+ }
+
+ /**
+ * Adds `value` to `set`.
+ *
+ * @private
+ * @param {Object} set The set to modify.
+ * @param {*} value The value to add.
+ * @returns {Object} Returns `set`.
+ */
+ function addSetEntry(set, value) {
+ // Don't return `set.add` because it's not chainable in IE 11.
+ set.add(value);
+ return set;
+ }
+
+ /**
+ * A specialized version of `_.forEach` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayEach(array, iteratee) {
+ var index = -1,
+ length = array ? array.length : 0;
+
+ while (++index < length) {
+ if (iteratee(array[index], index, array) === false) {
+ break;
+ }
+ }
+ return array;
+ }
+
+ /**
+ * Appends the elements of `values` to `array`.
+ *
+ * @private
+ * @param {Array} array The array to modify.
+ * @param {Array} values The values to append.
+ * @returns {Array} Returns `array`.
+ */
+ function arrayPush(array, values) {
+ var index = -1,
+ length = values.length,
+ offset = array.length;
+
+ while (++index < length) {
+ array[offset + index] = values[index];
+ }
+ return array;
+ }
+
+ /**
+ * A specialized version of `_.reduce` for arrays without support for
+ * iteratee shorthands.
+ *
+ * @private
+ * @param {Array} [array] The array to iterate over.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @param {*} [accumulator] The initial value.
+ * @param {boolean} [initAccum] Specify using the first element of `array` as
+ * the initial value.
+ * @returns {*} Returns the accumulated value.
+ */
+ function arrayReduce(array, iteratee, accumulator, initAccum) {
+ var index = -1,
+ length = array ? array.length : 0;
+
+ if (initAccum && length) {
+ accumulator = array[++index];
+ }
+ while (++index < length) {
+ accumulator = iteratee(accumulator, array[index], index, array);
+ }
+ return accumulator;
+ }
+
+ /**
+ * The base implementation of `_.times` without support for iteratee shorthands
+ * or max array length checks.
+ *
+ * @private
+ * @param {number} n The number of times to invoke `iteratee`.
+ * @param {Function} iteratee The function invoked per iteration.
+ * @returns {Array} Returns the array of results.
+ */
+ function baseTimes(n, iteratee) {
+ var index = -1,
+ result = Array(n);
+
+ while (++index < n) {
+ result[index] = iteratee(index);
+ }
+ return result;
+ }
+
+ /**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+ function getValue(object, key) {
+ return object == null ? undefined : object[key];
+ }
+
+ /**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+ function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+ }
+
+ /**
+ * Converts `map` to its key-value pairs.
+ *
+ * @private
+ * @param {Object} map The map to convert.
+ * @returns {Array} Returns the key-value pairs.
+ */
+ function mapToArray(map) {
+ var index = -1,
+ result = Array(map.size);
+
+ map.forEach(function(value, key) {
+ result[++index] = [key, value];
+ });
+ return result;
+ }
+
+ /**
+ * Creates a unary function that invokes `func` with its argument transformed.
+ *
+ * @private
+ * @param {Function} func The function to wrap.
+ * @param {Function} transform The argument transform.
+ * @returns {Function} Returns the new function.
+ */
+ function overArg(func, transform) {
+ return function(arg) {
+ return func(transform(arg));
+ };
+ }
+
+ /**
+ * Converts `set` to an array of its values.
+ *
+ * @private
+ * @param {Object} set The set to convert.
+ * @returns {Array} Returns the values.
+ */
+ function setToArray(set) {
+ var index = -1,
+ result = Array(set.size);
+
+ set.forEach(function(value) {
+ result[++index] = value;
+ });
+ return result;
+ }
+
+ /** Used for built-in method references. */
+ var arrayProto = Array.prototype,
+ funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+ /** Used to detect overreaching core-js shims. */
+ var coreJsData = root['__core-js_shared__'];
+
+ /** Used to detect methods masquerading as native. */
+ var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+ }());
+
+ /** Used to resolve the decompiled source of functions. */
+ var funcToString = funcProto.toString;
+
+ /** Used to check objects for own properties. */
+ var hasOwnProperty = objectProto.hasOwnProperty;
+
+ /**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+ var objectToString = objectProto.toString;
+
+ /** Used to detect if a method is native. */
+ var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+ );
+
+ /** Built-in value references. */
+ var Buffer = moduleExports ? root.Buffer : undefined,
+ Symbol = root.Symbol,
+ Uint8Array = root.Uint8Array,
+ getPrototype = overArg(Object.getPrototypeOf, Object),
+ objectCreate = Object.create,
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
+ splice = arrayProto.splice;
+
+ /* Built-in method references for those with the same name as other `lodash` methods. */
+ var nativeGetSymbols = Object.getOwnPropertySymbols,
+ nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
+ nativeKeys = overArg(Object.keys, Object);
+
+ /* Built-in method references that are verified to be native. */
+ var DataView = getNative(root, 'DataView'),
+ Map = getNative(root, 'Map'),
+ Promise = getNative(root, 'Promise'),
+ Set = getNative(root, 'Set'),
+ WeakMap = getNative(root, 'WeakMap'),
+ nativeCreate = getNative(Object, 'create');
+
+ /** Used to detect maps, sets, and weakmaps. */
+ var dataViewCtorString = toSource(DataView),
+ mapCtorString = toSource(Map),
+ promiseCtorString = toSource(Promise),
+ setCtorString = toSource(Set),
+ weakMapCtorString = toSource(WeakMap);
+
+ /** Used to convert symbols to primitives and strings. */
+ var symbolProto = Symbol ? Symbol.prototype : undefined,
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
+
+ /**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function Hash(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+ function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+ }
+
+ /**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function hashDelete(key) {
+ return this.has(key) && delete this.__data__[key];
+ }
+
+ /**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
+ }
+
+ /**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+ }
+
+ /**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+ function hashSet(key, value) {
+ var data = this.__data__;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+ }
+
+ // Add methods to `Hash`.
+ Hash.prototype.clear = hashClear;
+ Hash.prototype['delete'] = hashDelete;
+ Hash.prototype.get = hashGet;
+ Hash.prototype.has = hashHas;
+ Hash.prototype.set = hashSet;
+
+ /**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function ListCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+ function listCacheClear() {
+ this.__data__ = [];
+ }
+
+ /**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ return true;
+ }
+
+ /**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+ }
+
+ /**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+ }
+
+ /**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+ function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+ }
+
+ // Add methods to `ListCache`.
+ ListCache.prototype.clear = listCacheClear;
+ ListCache.prototype['delete'] = listCacheDelete;
+ ListCache.prototype.get = listCacheGet;
+ ListCache.prototype.has = listCacheHas;
+ ListCache.prototype.set = listCacheSet;
+
+ /**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function MapCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+ }
+
+ /**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+ function mapCacheClear() {
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map || ListCache),
+ 'string': new Hash
+ };
+ }
+
+ /**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function mapCacheDelete(key) {
+ return getMapData(this, key)['delete'](key);
+ }
+
+ /**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+ }
+
+ /**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+ }
+
+ /**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+ function mapCacheSet(key, value) {
+ getMapData(this, key).set(key, value);
+ return this;
+ }
+
+ // Add methods to `MapCache`.
+ MapCache.prototype.clear = mapCacheClear;
+ MapCache.prototype['delete'] = mapCacheDelete;
+ MapCache.prototype.get = mapCacheGet;
+ MapCache.prototype.has = mapCacheHas;
+ MapCache.prototype.set = mapCacheSet;
+
+ /**
+ * Creates a stack cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+ function Stack(entries) {
+ this.__data__ = new ListCache(entries);
+ }
+
+ /**
+ * Removes all key-value entries from the stack.
+ *
+ * @private
+ * @name clear
+ * @memberOf Stack
+ */
+ function stackClear() {
+ this.__data__ = new ListCache;
+ }
+
+ /**
+ * Removes `key` and its value from the stack.
+ *
+ * @private
+ * @name delete
+ * @memberOf Stack
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+ function stackDelete(key) {
+ return this.__data__['delete'](key);
+ }
+
+ /**
+ * Gets the stack value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Stack
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+ function stackGet(key) {
+ return this.__data__.get(key);
+ }
+
+ /**
+ * Checks if a stack value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Stack
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+ function stackHas(key) {
+ return this.__data__.has(key);
+ }
+
+ /**
+ * Sets the stack `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Stack
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the stack cache instance.
+ */
+ function stackSet(key, value) {
+ var cache = this.__data__;
+ if (cache instanceof ListCache) {
+ var pairs = cache.__data__;
+ if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
+ pairs.push([key, value]);
+ return this;
+ }
+ cache = this.__data__ = new MapCache(pairs);
+ }
+ cache.set(key, value);
+ return this;
+ }
+
+ // Add methods to `Stack`.
+ Stack.prototype.clear = stackClear;
+ Stack.prototype['delete'] = stackDelete;
+ Stack.prototype.get = stackGet;
+ Stack.prototype.has = stackHas;
+ Stack.prototype.set = stackSet;
+
+ /**
+ * Creates an array of the enumerable property names of the array-like `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @param {boolean} inherited Specify returning inherited property names.
+ * @returns {Array} Returns the array of property names.
+ */
+ function arrayLikeKeys(value, inherited) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
+ var result = (isArray(value) || isArguments(value))
+ ? baseTimes(value.length, String)
+ : [];
+
+ var length = result.length,
+ skipIndexes = !!length;
+
+ for (var key in value) {
+ if ((inherited || hasOwnProperty.call(value, key)) &&
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Assigns `value` to `key` of `object` if the existing value is not equivalent
+ * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * for equality comparisons.
+ *
+ * @private
+ * @param {Object} object The object to modify.
+ * @param {string} key The key of the property to assign.
+ * @param {*} value The value to assign.
+ */
+ function assignValue(object, key, value) {
+ var objValue = object[key];
+ if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
+ (value === undefined && !(key in object))) {
+ object[key] = value;
+ }
+ }
+
+ /**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+ function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+ }
+
+ /**
+ * The base implementation of `_.assign` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+ function baseAssign(object, source) {
+ return object && copyObject(source, keys(source), object);
+ }
+
+ /**
+ * The base implementation of `_.clone` and `_.cloneDeep` which tracks
+ * traversed objects.
+ *
+ * @private
+ * @param {*} value The value to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @param {boolean} [isFull] Specify a clone including symbols.
+ * @param {Function} [customizer] The function to customize cloning.
+ * @param {string} [key] The key of `value`.
+ * @param {Object} [object] The parent object of `value`.
+ * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
+ * @returns {*} Returns the cloned value.
+ */
+ function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
+ var result;
+ if (customizer) {
+ result = object ? customizer(value, key, object, stack) : customizer(value);
+ }
+ if (result !== undefined) {
+ return result;
+ }
+ if (!isObject(value)) {
+ return value;
+ }
+ var isArr = isArray(value);
+ if (isArr) {
+ result = initCloneArray(value);
+ if (!isDeep) {
+ return copyArray(value, result);
+ }
+ } else {
+ var tag = getTag(value),
+ isFunc = tag == funcTag || tag == genTag;
+
+ if (isBuffer(value)) {
+ return cloneBuffer(value, isDeep);
+ }
+ if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
+ if (isHostObject(value)) {
+ return object ? value : {};
+ }
+ result = initCloneObject(isFunc ? {} : value);
+ if (!isDeep) {
+ return copySymbols(value, baseAssign(result, value));
+ }
+ } else {
+ if (!cloneableTags[tag]) {
+ return object ? value : {};
+ }
+ result = initCloneByTag(value, tag, baseClone, isDeep);
+ }
+ }
+ // Check for circular references and return its corresponding clone.
+ stack || (stack = new Stack);
+ var stacked = stack.get(value);
+ if (stacked) {
+ return stacked;
+ }
+ stack.set(value, result);
+
+ if (!isArr) {
+ var props = isFull ? getAllKeys(value) : keys(value);
+ }
+ arrayEach(props || value, function(subValue, key) {
+ if (props) {
+ key = subValue;
+ subValue = value[key];
+ }
+ // Recursively populate clone (susceptible to call stack limits).
+ assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
+ });
+ return result;
+ }
+
+ /**
+ * The base implementation of `_.create` without support for assigning
+ * properties to the created object.
+ *
+ * @private
+ * @param {Object} prototype The object to inherit from.
+ * @returns {Object} Returns the new object.
+ */
+ function baseCreate(proto) {
+ return isObject(proto) ? objectCreate(proto) : {};
+ }
+
+ /**
+ * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
+ * `keysFunc` and `symbolsFunc` to get the enumerable property names and
+ * symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {Function} keysFunc The function to get the keys of `object`.
+ * @param {Function} symbolsFunc The function to get the symbols of `object`.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+ function baseGetAllKeys(object, keysFunc, symbolsFunc) {
+ var result = keysFunc(object);
+ return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
+ }
+
+ /**
+ * The base implementation of `getTag`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+ function baseGetTag(value) {
+ return objectToString.call(value);
+ }
+
+ /**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+ function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+ }
+
+ /**
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ */
+ function baseKeys(object) {
+ if (!isPrototype(object)) {
+ return nativeKeys(object);
+ }
+ var result = [];
+ for (var key in Object(object)) {
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
+ result.push(key);
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Creates a clone of `buffer`.
+ *
+ * @private
+ * @param {Buffer} buffer The buffer to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Buffer} Returns the cloned buffer.
+ */
+ function cloneBuffer(buffer, isDeep) {
+ if (isDeep) {
+ return buffer.slice();
+ }
+ var result = new buffer.constructor(buffer.length);
+ buffer.copy(result);
+ return result;
+ }
+
+ /**
+ * Creates a clone of `arrayBuffer`.
+ *
+ * @private
+ * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
+ * @returns {ArrayBuffer} Returns the cloned array buffer.
+ */
+ function cloneArrayBuffer(arrayBuffer) {
+ var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
+ new Uint8Array(result).set(new Uint8Array(arrayBuffer));
+ return result;
+ }
+
+ /**
+ * Creates a clone of `dataView`.
+ *
+ * @private
+ * @param {Object} dataView The data view to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned data view.
+ */
+ function cloneDataView(dataView, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
+ return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
+ }
+
+ /**
+ * Creates a clone of `map`.
+ *
+ * @private
+ * @param {Object} map The map to clone.
+ * @param {Function} cloneFunc The function to clone values.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned map.
+ */
+ function cloneMap(map, isDeep, cloneFunc) {
+ var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
+ return arrayReduce(array, addMapEntry, new map.constructor);
+ }
+
+ /**
+ * Creates a clone of `regexp`.
+ *
+ * @private
+ * @param {Object} regexp The regexp to clone.
+ * @returns {Object} Returns the cloned regexp.
+ */
+ function cloneRegExp(regexp) {
+ var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
+ result.lastIndex = regexp.lastIndex;
+ return result;
+ }
+
+ /**
+ * Creates a clone of `set`.
+ *
+ * @private
+ * @param {Object} set The set to clone.
+ * @param {Function} cloneFunc The function to clone values.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned set.
+ */
+ function cloneSet(set, isDeep, cloneFunc) {
+ var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
+ return arrayReduce(array, addSetEntry, new set.constructor);
+ }
+
+ /**
+ * Creates a clone of the `symbol` object.
+ *
+ * @private
+ * @param {Object} symbol The symbol object to clone.
+ * @returns {Object} Returns the cloned symbol object.
+ */
+ function cloneSymbol(symbol) {
+ return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
+ }
+
+ /**
+ * Creates a clone of `typedArray`.
+ *
+ * @private
+ * @param {Object} typedArray The typed array to clone.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the cloned typed array.
+ */
+ function cloneTypedArray(typedArray, isDeep) {
+ var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
+ return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
+ }
+
+ /**
+ * Copies the values of `source` to `array`.
+ *
+ * @private
+ * @param {Array} source The array to copy values from.
+ * @param {Array} [array=[]] The array to copy values to.
+ * @returns {Array} Returns `array`.
+ */
+ function copyArray(source, array) {
+ var index = -1,
+ length = source.length;
+
+ array || (array = Array(length));
+ while (++index < length) {
+ array[index] = source[index];
+ }
+ return array;
+ }
+
+ /**
+ * Copies properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy properties from.
+ * @param {Array} props The property identifiers to copy.
+ * @param {Object} [object={}] The object to copy properties to.
+ * @param {Function} [customizer] The function to customize copied values.
+ * @returns {Object} Returns `object`.
+ */
+ function copyObject(source, props, object, customizer) {
+ object || (object = {});
+
+ var index = -1,
+ length = props.length;
+
+ while (++index < length) {
+ var key = props[index];
+
+ var newValue = customizer
+ ? customizer(object[key], source[key], key, object, source)
+ : undefined;
+
+ assignValue(object, key, newValue === undefined ? source[key] : newValue);
+ }
+ return object;
+ }
+
+ /**
+ * Copies own symbol properties of `source` to `object`.
+ *
+ * @private
+ * @param {Object} source The object to copy symbols from.
+ * @param {Object} [object={}] The object to copy symbols to.
+ * @returns {Object} Returns `object`.
+ */
+ function copySymbols(source, object) {
+ return copyObject(source, getSymbols(source), object);
+ }
+
+ /**
+ * Creates an array of own enumerable property names and symbols of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names and symbols.
+ */
+ function getAllKeys(object) {
+ return baseGetAllKeys(object, keys, getSymbols);
+ }
+
+ /**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+ function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
+ }
+
+ /**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+ function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+ }
+
+ /**
+ * Creates an array of the own enumerable symbol properties of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of symbols.
+ */
+ var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
+
+ /**
+ * Gets the `toStringTag` of `value`.
+ *
+ * @private
+ * @param {*} value The value to query.
+ * @returns {string} Returns the `toStringTag`.
+ */
+ var getTag = baseGetTag;
+
+ // Fallback for data views, maps, sets, and weak maps in IE 11,
+ // for data views in Edge < 14, and promises in Node.js.
+ if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
+ (Map && getTag(new Map) != mapTag) ||
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
+ (Set && getTag(new Set) != setTag) ||
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
+ getTag = function(value) {
+ var result = objectToString.call(value),
+ Ctor = result == objectTag ? value.constructor : undefined,
+ ctorString = Ctor ? toSource(Ctor) : undefined;
+
+ if (ctorString) {
+ switch (ctorString) {
+ case dataViewCtorString: return dataViewTag;
+ case mapCtorString: return mapTag;
+ case promiseCtorString: return promiseTag;
+ case setCtorString: return setTag;
+ case weakMapCtorString: return weakMapTag;
+ }
+ }
+ return result;
+ };
+ }
+
+ /**
+ * Initializes an array clone.
+ *
+ * @private
+ * @param {Array} array The array to clone.
+ * @returns {Array} Returns the initialized clone.
+ */
+ function initCloneArray(array) {
+ var length = array.length,
+ result = array.constructor(length);
+
+ // Add properties assigned by `RegExp#exec`.
+ if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
+ result.index = array.index;
+ result.input = array.input;
+ }
+ return result;
+ }
+
+ /**
+ * Initializes an object clone.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+ function initCloneObject(object) {
+ return (typeof object.constructor == 'function' && !isPrototype(object))
+ ? baseCreate(getPrototype(object))
+ : {};
+ }
+
+ /**
+ * Initializes an object clone based on its `toStringTag`.
+ *
+ * **Note:** This function only supports cloning values with tags of
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
+ *
+ * @private
+ * @param {Object} object The object to clone.
+ * @param {string} tag The `toStringTag` of the object to clone.
+ * @param {Function} cloneFunc The function to clone values.
+ * @param {boolean} [isDeep] Specify a deep clone.
+ * @returns {Object} Returns the initialized clone.
+ */
+ function initCloneByTag(object, tag, cloneFunc, isDeep) {
+ var Ctor = object.constructor;
+ switch (tag) {
+ case arrayBufferTag:
+ return cloneArrayBuffer(object);
+
+ case boolTag:
+ case dateTag:
+ return new Ctor(+object);
+
+ case dataViewTag:
+ return cloneDataView(object, isDeep);
+
+ case float32Tag: case float64Tag:
+ case int8Tag: case int16Tag: case int32Tag:
+ case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
+ return cloneTypedArray(object, isDeep);
+
+ case mapTag:
+ return cloneMap(object, isDeep, cloneFunc);
+
+ case numberTag:
+ case stringTag:
+ return new Ctor(object);
+
+ case regexpTag:
+ return cloneRegExp(object);
+
+ case setTag:
+ return cloneSet(object, isDeep, cloneFunc);
+
+ case symbolTag:
+ return cloneSymbol(object);
+ }
+ }
+
+ /**
+ * Checks if `value` is a valid array-like index.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
+ */
+ function isIndex(value, length) {
+ length = length == null ? MAX_SAFE_INTEGER : length;
+ return !!length &&
+ (typeof value == 'number' || reIsUint.test(value)) &&
+ (value > -1 && value % 1 == 0 && value < length);
+ }
+
+ /**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+ function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+ }
+
+ /**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+ function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+ }
+
+ /**
+ * Checks if `value` is likely a prototype object.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
+ */
+ function isPrototype(value) {
+ var Ctor = value && value.constructor,
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
+
+ return value === proto;
+ }
+
+ /**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+ function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+ }
+
+ /**
+ * This method is like `_.clone` except that it recursively clones `value`.
+ *
+ * @static
+ * @memberOf _
+ * @since 1.0.0
+ * @category Lang
+ * @param {*} value The value to recursively clone.
+ * @returns {*} Returns the deep cloned value.
+ * @see _.clone
+ * @example
+ *
+ * var objects = [{ 'a': 1 }, { 'b': 2 }];
+ *
+ * var deep = _.cloneDeep(objects);
+ * console.log(deep[0] === objects[0]);
+ * // => false
+ */
+ function cloneDeep(value) {
+ return baseClone(value, true, true);
+ }
+
+ /**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+ function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+ }
+
+ /**
+ * Checks if `value` is likely an `arguments` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
+ * else `false`.
+ * @example
+ *
+ * _.isArguments(function() { return arguments; }());
+ * // => true
+ *
+ * _.isArguments([1, 2, 3]);
+ * // => false
+ */
+ function isArguments(value) {
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
+ }
+
+ /**
+ * Checks if `value` is classified as an `Array` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
+ * @example
+ *
+ * _.isArray([1, 2, 3]);
+ * // => true
+ *
+ * _.isArray(document.body.children);
+ * // => false
+ *
+ * _.isArray('abc');
+ * // => false
+ *
+ * _.isArray(_.noop);
+ * // => false
+ */
+ var isArray = Array.isArray;
+
+ /**
+ * Checks if `value` is array-like. A value is considered array-like if it's
+ * not a function and has a `value.length` that's an integer greater than or
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
+ * @example
+ *
+ * _.isArrayLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLike(document.body.children);
+ * // => true
+ *
+ * _.isArrayLike('abc');
+ * // => true
+ *
+ * _.isArrayLike(_.noop);
+ * // => false
+ */
+ function isArrayLike(value) {
+ return value != null && isLength(value.length) && !isFunction(value);
+ }
+
+ /**
+ * This method is like `_.isArrayLike` except that it also checks if `value`
+ * is an object.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
+ * else `false`.
+ * @example
+ *
+ * _.isArrayLikeObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isArrayLikeObject(document.body.children);
+ * // => true
+ *
+ * _.isArrayLikeObject('abc');
+ * // => false
+ *
+ * _.isArrayLikeObject(_.noop);
+ * // => false
+ */
+ function isArrayLikeObject(value) {
+ return isObjectLike(value) && isArrayLike(value);
+ }
+
+ /**
+ * Checks if `value` is a buffer.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.3.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
+ * @example
+ *
+ * _.isBuffer(new Buffer(2));
+ * // => true
+ *
+ * _.isBuffer(new Uint8Array(2));
+ * // => false
+ */
+ var isBuffer = nativeIsBuffer || stubFalse;
+
+ /**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+ function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+ }
+
+ /**
+ * Checks if `value` is a valid array-like length.
+ *
+ * **Note:** This method is loosely based on
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
+ * @example
+ *
+ * _.isLength(3);
+ * // => true
+ *
+ * _.isLength(Number.MIN_VALUE);
+ * // => false
+ *
+ * _.isLength(Infinity);
+ * // => false
+ *
+ * _.isLength('3');
+ * // => false
+ */
+ function isLength(value) {
+ return typeof value == 'number' &&
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
+ }
+
+ /**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+ function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+ }
+
+ /**
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
+ * and has a `typeof` result of "object".
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
+ * @example
+ *
+ * _.isObjectLike({});
+ * // => true
+ *
+ * _.isObjectLike([1, 2, 3]);
+ * // => true
+ *
+ * _.isObjectLike(_.noop);
+ * // => false
+ *
+ * _.isObjectLike(null);
+ * // => false
+ */
+ function isObjectLike(value) {
+ return !!value && typeof value == 'object';
+ }
+
+ /**
+ * Creates an array of the own enumerable property names of `object`.
+ *
+ * **Note:** Non-object values are coerced to objects. See the
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
+ * for more details.
+ *
+ * @static
+ * @since 0.1.0
+ * @memberOf _
+ * @category Object
+ * @param {Object} object The object to query.
+ * @returns {Array} Returns the array of property names.
+ * @example
+ *
+ * function Foo() {
+ * this.a = 1;
+ * this.b = 2;
+ * }
+ *
+ * Foo.prototype.c = 3;
+ *
+ * _.keys(new Foo);
+ * // => ['a', 'b'] (iteration order is not guaranteed)
+ *
+ * _.keys('hi');
+ * // => ['0', '1']
+ */
+ function keys(object) {
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
+ }
+
+ /**
+ * This method returns a new empty array.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.13.0
+ * @category Util
+ * @returns {Array} Returns the new empty array.
+ * @example
+ *
+ * var arrays = _.times(2, _.stubArray);
+ *
+ * console.log(arrays);
+ * // => [[], []]
+ *
+ * console.log(arrays[0] === arrays[1]);
+ * // => false
+ */
+ function stubArray() {
+ return [];
+ }
+
+ /**
+ * This method returns `false`.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.13.0
+ * @category Util
+ * @returns {boolean} Returns `false`.
+ * @example
+ *
+ * _.times(2, _.stubFalse);
+ * // => [false, false]
+ */
+ function stubFalse() {
+ return false;
+ }
+
+ module.exports = cloneDeep;
+ } (lodash_clonedeep, lodash_clonedeep.exports));
+
+ var lodash_clonedeepExports = lodash_clonedeep.exports;
+ var cloneDeep = /*@__PURE__*/getDefaultExportFromCjs(lodash_clonedeepExports);
+
+ var Segmentation$2 = {
+ generateSegmentation: generateSegmentation$1,
+ generateToolState: generateToolState$1,
+ fillSegmentation: fillSegmentation$1
+ };
+ /**
+ *
+ * @typedef {Object} BrushData
+ * @property {Object} toolState - The cornerstoneTools global toolState.
+ * @property {Object[]} segments - The cornerstoneTools segment metadata that corresponds to the
+ * seriesInstanceUid.
+ */
+
+ var generateSegmentationDefaultOptions = {
+ includeSliceSpacing: true,
+ rleEncode: true
+ };
+ /**
+ * generateSegmentation - Generates cornerstoneTools brush data, given a stack of
+ * imageIds, images and the cornerstoneTools brushData.
+ *
+ * @param {object[]} images An array of cornerstone images that contain the source
+ * data under `image.data.byteArray.buffer`.
+ * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
+ * @param {Object} userOptions Options to pass to the segmentation derivation and `fillSegmentation`.
+ * @returns {Blob}
+ */
+
+ function generateSegmentation$1(images, inputLabelmaps3D) {
+ var userOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+ var isMultiframe = images[0].imageId.includes("?frame");
+
+ var segmentation = _createSegFromImages(images, isMultiframe, userOptions);
+
+ return fillSegmentation$1(segmentation, inputLabelmaps3D, userOptions);
+ }
+ /**
+ * fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.
+ *
+ * @param {object[]} segmentation An empty segmentation derived dataset.
+ * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
+ * @param {Object} userOptions Options object to override default options.
+ * @returns {Blob} description
+ */
+
+
+ function fillSegmentation$1(segmentation, inputLabelmaps3D) {
+ var userOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
+ var options = Object.assign({}, generateSegmentationDefaultOptions, userOptions); // Use another variable so we don't redefine labelmaps3D.
+
+ var labelmaps3D = Array.isArray(inputLabelmaps3D) ? inputLabelmaps3D : [inputLabelmaps3D];
+ var numberOfFrames = 0;
+ var referencedFramesPerLabelmap = [];
+
+ var _loop = function _loop(labelmapIndex) {
+ var labelmap3D = labelmaps3D[labelmapIndex];
+ var labelmaps2D = labelmap3D.labelmaps2D,
+ metadata = labelmap3D.metadata;
+ var referencedFramesPerSegment = [];
+
+ for (var i = 1; i < metadata.length; i++) {
+ if (metadata[i]) {
+ referencedFramesPerSegment[i] = [];
+ }
+ }
+
+ var _loop2 = function _loop2(_i) {
+ var labelmap2D = labelmaps2D[_i];
+
+ if (labelmaps2D[_i]) {
+ var segmentsOnLabelmap = labelmap2D.segmentsOnLabelmap;
+ segmentsOnLabelmap.forEach(function (segmentIndex) {
+ if (segmentIndex !== 0) {
+ referencedFramesPerSegment[segmentIndex].push(_i);
+ numberOfFrames++;
+ }
+ });
+ }
+ };
+
+ for (var _i = 0; _i < labelmaps2D.length; _i++) {
+ _loop2(_i);
+ }
+
+ referencedFramesPerLabelmap[labelmapIndex] = referencedFramesPerSegment;
+ };
+
+ for (var labelmapIndex = 0; labelmapIndex < labelmaps3D.length; labelmapIndex++) {
+ _loop(labelmapIndex);
+ }
+
+ segmentation.setNumberOfFrames(numberOfFrames);
+
+ for (var _labelmapIndex = 0; _labelmapIndex < labelmaps3D.length; _labelmapIndex++) {
+ var referencedFramesPerSegment = referencedFramesPerLabelmap[_labelmapIndex];
+ var labelmap3D = labelmaps3D[_labelmapIndex];
+ var metadata = labelmap3D.metadata;
+
+ for (var segmentIndex = 1; segmentIndex < referencedFramesPerSegment.length; segmentIndex++) {
+ var referencedFrameIndicies = referencedFramesPerSegment[segmentIndex];
+
+ if (referencedFrameIndicies) {
+ // Frame numbers start from 1.
+ var referencedFrameNumbers = referencedFrameIndicies.map(function (element) {
+ return element + 1;
+ });
+ var segmentMetadata = metadata[segmentIndex];
+
+ var labelmaps = _getLabelmapsFromRefernecedFrameIndicies(labelmap3D, referencedFrameIndicies);
+
+ segmentation.addSegmentFromLabelmap(segmentMetadata, labelmaps, segmentIndex, referencedFrameNumbers);
+ }
+ }
+ }
+
+ if (options.rleEncode) {
+ var rleEncodedFrames = encode(segmentation.dataset.PixelData, numberOfFrames, segmentation.dataset.Rows, segmentation.dataset.Columns); // Must use fractional now to RLE encode, as the DICOM standard only allows BitStored && BitsAllocated
+ // to be 1 for BINARY. This is not ideal and there should be a better format for compression in this manner
+ // added to the standard.
+
+ segmentation.assignToDataset({
+ BitsAllocated: "8",
+ BitsStored: "8",
+ HighBit: "7",
+ SegmentationType: "FRACTIONAL",
+ SegmentationFractionalType: "PROBABILITY",
+ MaximumFractionalValue: "255"
+ });
+ segmentation.dataset._meta.TransferSyntaxUID = {
+ Value: ["1.2.840.10008.1.2.5"],
+ vr: "UI"
+ };
+ segmentation.dataset._vrMap.PixelData = "OB";
+ segmentation.dataset.PixelData = rleEncodedFrames;
+ } else {
+ // If no rleEncoding, at least bitpack the data.
+ segmentation.bitPackPixelData();
+ }
+
+ var segBlob = datasetToBlob(segmentation.dataset);
+ return segBlob;
+ }
+
+ function _getLabelmapsFromRefernecedFrameIndicies(labelmap3D, referencedFrameIndicies) {
+ var labelmaps2D = labelmap3D.labelmaps2D;
+ var labelmaps = [];
+
+ for (var i = 0; i < referencedFrameIndicies.length; i++) {
+ var frame = referencedFrameIndicies[i];
+ labelmaps.push(labelmaps2D[frame].pixelData);
+ }
+
+ return labelmaps;
+ }
+ /**
+ * _createSegFromImages - description
+ *
+ * @param {Object[]} images An array of the cornerstone image objects.
+ * @param {Boolean} isMultiframe Whether the images are multiframe.
+ * @returns {Object} The Seg derived dataSet.
+ */
+
+
+ function _createSegFromImages(images, isMultiframe, options) {
+ var datasets = [];
+
+ if (isMultiframe) {
+ var image = images[0];
+ var arrayBuffer = image.data.byteArray.buffer;
+ var dicomData = DicomMessage.readFile(arrayBuffer);
+ var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
+ dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
+ datasets.push(dataset);
+ } else {
+ for (var i = 0; i < images.length; i++) {
+ var _image = images[i];
+ var _arrayBuffer = _image.data.byteArray.buffer;
+
+ var _dicomData = DicomMessage.readFile(_arrayBuffer);
+
+ var _dataset = DicomMetaDictionary.naturalizeDataset(_dicomData.dict);
+
+ _dataset._meta = DicomMetaDictionary.namifyDataset(_dicomData.meta);
+ datasets.push(_dataset);
+ }
+ }
+
+ var multiframe = Normalizer.normalizeToDataset(datasets);
+ return new Segmentation$4([multiframe], options);
+ }
+ /**
+ * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
+ * derive cornerstoneTools toolState and brush metadata.
+ *
+ * @param {string[]} imageIds - An array of the imageIds.
+ * @param {ArrayBuffer} arrayBuffer - The SEG arrayBuffer.
+ * @param {*} metadataProvider.
+ * @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.
+ * @param {number} tolerance - default value 1.e-3.
+ *
+ * @return {[]ArrayBuffer}a list of array buffer for each labelMap
+ * @return {Object} an object from which the segment metadata can be derived
+ * @return {[][][]} 2D list containing the track of segments per frame
+ * @return {[][][]} 3D list containing the track of segments per frame for each labelMap
+ * (available only for the overlapping case).
+ */
+
+
+ function generateToolState$1(imageIds, arrayBuffer, metadataProvider) {
+ var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+ var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
+ var dicomData = DicomMessage.readFile(arrayBuffer);
+ var dataset = DicomMetaDictionary.naturalizeDataset(dicomData.dict);
+ dataset._meta = DicomMetaDictionary.namifyDataset(dicomData.meta);
+ var multiframe = Normalizer.normalizeToDataset([dataset]);
+ var imagePlaneModule = metadataProvider.get("imagePlaneModule", imageIds[0]);
+ var generalSeriesModule = metadataProvider.get("generalSeriesModule", imageIds[0]);
+ var SeriesInstanceUID = generalSeriesModule.seriesInstanceUID;
+
+ if (!imagePlaneModule) {
+ console.warn("Insufficient metadata, imagePlaneModule missing.");
+ }
+
+ var ImageOrientationPatient = Array.isArray(imagePlaneModule.rowCosines) ? [].concat(_toConsumableArray(imagePlaneModule.rowCosines), _toConsumableArray(imagePlaneModule.columnCosines)) : [imagePlaneModule.rowCosines.x, imagePlaneModule.rowCosines.y, imagePlaneModule.rowCosines.z, imagePlaneModule.columnCosines.x, imagePlaneModule.columnCosines.y, imagePlaneModule.columnCosines.z]; // Get IOP from ref series, compute supported orientations:
+
+ var validOrientations = getValidOrientations(ImageOrientationPatient);
+ var sliceLength = multiframe.Columns * multiframe.Rows;
+ var segMetadata = getSegmentMetadata(multiframe, SeriesInstanceUID);
+ var TransferSyntaxUID = multiframe._meta.TransferSyntaxUID.Value[0];
+ var pixelData;
+
+ if (TransferSyntaxUID === "1.2.840.10008.1.2.5") {
+ var rleEncodedFrames = Array.isArray(multiframe.PixelData) ? multiframe.PixelData : [multiframe.PixelData];
+ pixelData = decode(rleEncodedFrames, multiframe.Rows, multiframe.Columns);
+
+ if (multiframe.BitsStored === 1) {
+ console.warn("No implementation for rle + bitbacking.");
+ return;
+ }
+ } else {
+ pixelData = unpackPixelData(multiframe);
+
+ if (!pixelData) {
+ throw new Error("Fractional segmentations are not yet supported");
+ }
+ }
+
+ var orientation = checkOrientation(multiframe, validOrientations, [imagePlaneModule.rows, imagePlaneModule.columns, imageIds.length], tolerance);
+ var overlapping = false;
+
+ if (!skipOverlapping) {
+ overlapping = checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance);
+ }
+
+ var insertFunction;
+
+ switch (orientation) {
+ case "Planar":
+ if (overlapping) {
+ insertFunction = insertOverlappingPixelDataPlanar;
+ } else {
+ insertFunction = insertPixelDataPlanar;
+ }
+
+ break;
+
+ case "Perpendicular":
+ //insertFunction = insertPixelDataPerpendicular;
+ throw new Error("Segmentations orthogonal to the acquisition plane of the source data are not yet supported.");
+
+ case "Oblique":
+ throw new Error("Segmentations oblique to the acquisition plane of the source data are not yet supported.");
+ }
+ /* if SEGs are overlapping:
+ 1) the labelmapBuffer will contain M volumes which have non-overlapping segments;
+ 2) segmentsOnFrame will have M * numberOfFrames values to track in which labelMap are the segments;
+ 3) insertFunction will return the number of LabelMaps
+ 4) generateToolState return is an array*/
+
+
+ var segmentsOnFrameArray = [];
+ segmentsOnFrameArray[0] = [];
+ var segmentsOnFrame = [];
+ var arrayBufferLength = sliceLength * imageIds.length * 2; // 2 bytes per label voxel in cst4.
+
+ var labelmapBufferArray = [];
+ labelmapBufferArray[0] = new ArrayBuffer(arrayBufferLength);
+ insertFunction(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance);
+ return {
+ labelmapBufferArray: labelmapBufferArray,
+ segMetadata: segMetadata,
+ segmentsOnFrame: segmentsOnFrame,
+ segmentsOnFrameArray: segmentsOnFrameArray
+ };
+ }
+ /**
+ * Find the reference frame of the segmentation frame in the source data.
+ *
+ * @param {Object} multiframe dicom metadata
+ * @param {Int} frameSegment frame dicom index
+ * @param {String[]} imageIds A list of imageIds.
+ * @param {Object} metadataProvider A Cornerstone metadataProvider to query
+ * metadata from imageIds.
+ * @param {Float} tolerance The tolerance parameter
+ *
+ * @returns {String} Returns the imageId
+ */
+
+
+ function findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance) {
+ var imageId = undefined;
+
+ if (!multiframe) {
+ return imageId;
+ }
+
+ var FrameOfReferenceUID = multiframe.FrameOfReferenceUID,
+ PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
+ SourceImageSequence = multiframe.SourceImageSequence,
+ ReferencedSeriesSequence = multiframe.ReferencedSeriesSequence;
+
+ if (!PerFrameFunctionalGroupsSequence || PerFrameFunctionalGroupsSequence.length === 0) {
+ return imageId;
+ }
+
+ var PerFrameFunctionalGroup = PerFrameFunctionalGroupsSequence[frameSegment];
+
+ if (!PerFrameFunctionalGroup) {
+ return imageId;
+ }
+
+ var frameSourceImageSequence = undefined;
+
+ if (SourceImageSequence && SourceImageSequence.length !== 0) {
+ frameSourceImageSequence = SourceImageSequence[frameSegment];
+ } else if (PerFrameFunctionalGroup.DerivationImageSequence) {
+ var DerivationImageSequence = PerFrameFunctionalGroup.DerivationImageSequence;
+
+ if (Array.isArray(DerivationImageSequence)) {
+ if (DerivationImageSequence.length !== 0) {
+ DerivationImageSequence = DerivationImageSequence[0];
+ } else {
+ DerivationImageSequence = undefined;
+ }
+ }
+
+ if (DerivationImageSequence) {
+ frameSourceImageSequence = DerivationImageSequence.SourceImageSequence;
+
+ if (Array.isArray(frameSourceImageSequence)) {
+ if (frameSourceImageSequence.length !== 0) {
+ frameSourceImageSequence = frameSourceImageSequence[0];
+ } else {
+ frameSourceImageSequence = undefined;
+ }
+ }
+ }
+ }
+
+ if (frameSourceImageSequence) {
+ imageId = getImageIdOfSourceImagebySourceImageSequence(frameSourceImageSequence, imageIds, metadataProvider);
+ }
+
+ if (imageId === undefined && ReferencedSeriesSequence) {
+ var referencedSeriesSequence = Array.isArray(ReferencedSeriesSequence) ? ReferencedSeriesSequence[0] : ReferencedSeriesSequence;
+ var ReferencedSeriesInstanceUID = referencedSeriesSequence.SeriesInstanceUID;
+ imageId = getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance);
+ }
+
+ return imageId;
+ }
+ /**
+ * Checks if there is any overlapping segmentations.
+ * @returns {boolean} Returns a flag if segmentations overlapping
+ */
+
+
+ function checkSEGsOverlapping(pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {
+ var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
+ PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
+ SegmentSequence = multiframe.SegmentSequence,
+ Rows = multiframe.Rows,
+ Columns = multiframe.Columns;
+ var numberOfSegs = SegmentSequence.length;
+
+ if (numberOfSegs < 2) {
+ return false;
+ }
+
+ var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
+ var sliceLength = Columns * Rows;
+ var groupsLen = PerFrameFunctionalGroupsSequence.length;
+ /** sort groupsLen to have all the segments for each frame in an array
+ * frame 2 : 1, 2
+ * frame 4 : 1, 3
+ * frame 5 : 4
+ */
+
+ var frameSegmentsMapping = new Map();
+
+ var _loop3 = function _loop3(frameSegment) {
+ var segmentIndex = getSegmentIndex(multiframe, frameSegment);
+
+ if (segmentIndex === undefined) {
+ console.warn("Could not retrieve the segment index for frame segment " + frameSegment + ", skipping this frame.");
+ return "continue";
+ }
+
+ var imageId = findReferenceSourceImageId(multiframe, frameSegment, imageIds, metadataProvider, tolerance);
+
+ if (!imageId) {
+ console.warn("Image not present in stack, can't import frame : " + frameSegment + ".");
+ return "continue";
+ }
+
+ var imageIdIndex = imageIds.findIndex(function (element) {
+ return element === imageId;
+ });
+
+ if (frameSegmentsMapping.has(imageIdIndex)) {
+ var segmentArray = frameSegmentsMapping.get(imageIdIndex);
+
+ if (!segmentArray.includes(frameSegment)) {
+ segmentArray.push(frameSegment);
+ frameSegmentsMapping.set(imageIdIndex, segmentArray);
+ }
+ } else {
+ frameSegmentsMapping.set(imageIdIndex, [frameSegment]);
+ }
+ };
+
+ for (var frameSegment = 0; frameSegment < groupsLen; ++frameSegment) {
+ var _ret = _loop3(frameSegment);
+
+ if (_ret === "continue") continue;
+ }
+
+ var _iterator = _createForOfIteratorHelper(frameSegmentsMapping.entries()),
+ _step;
+
+ try {
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
+ var _step$value = _slicedToArray(_step.value, 2),
+ user = _step$value[0],
+ role = _step$value[1];
+
+ var temp2DArray = new Uint16Array(sliceLength).fill(0);
+
+ for (var i = 0; i < role.length; ++i) {
+ var _frameSegment = role[i];
+ var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_frameSegment];
+ var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
+ var pixelDataI2D = ndarray$1(new Uint8Array(pixelData.buffer, _frameSegment * sliceLength, sliceLength), [Rows, Columns]);
+ var alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
+
+ if (!alignedPixelDataI) {
+ console.warn("Individual SEG frames are out of plane with respect to the first SEG frame, this is not yet supported, skipping this frame.");
+ continue;
+ }
+
+ var data = alignedPixelDataI.data;
+
+ for (var j = 0, len = data.length; j < len; ++j) {
+ if (data[j] !== 0) {
+ temp2DArray[j]++;
+
+ if (temp2DArray[j] > 1) {
+ return true;
+ }
+ }
+ }
+ }
+ }
+ } catch (err) {
+ _iterator.e(err);
+ } finally {
+ _iterator.f();
+ }
+
+ return false;
+ }
+
+ function insertOverlappingPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {
+ var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
+ PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
+ Rows = multiframe.Rows,
+ Columns = multiframe.Columns;
+ var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
+ var sliceLength = Columns * Rows;
+ var arrayBufferLength = sliceLength * imageIds.length * 2; // 2 bytes per label voxel in cst4.
+ // indicate the number of labelMaps
+
+ var M = 1; // indicate the current labelMap array index;
+
+ var m = 0; // temp array for checking overlaps
+
+ var tempBuffer = labelmapBufferArray[m].slice(0); // temp list for checking overlaps
+
+ var tempSegmentsOnFrame = cloneDeep(segmentsOnFrameArray[m]);
+ /** split overlapping SEGs algorithm for each segment:
+ * A) copy the labelmapBuffer in the array with index 0
+ * B) add the segment pixel per pixel on the copied buffer from (A)
+ * C) if no overlap, copy the results back on the orignal array from (A)
+ * D) if overlap, repeat increasing the index m up to M (if out of memory, add new buffer in the array and M++);
+ */
+
+ var numberOfSegs = multiframe.SegmentSequence.length;
+
+ for (var segmentIndexToProcess = 1; segmentIndexToProcess <= numberOfSegs; ++segmentIndexToProcess) {
+ var _loop4 = function _loop4(_i2, groupsLen) {
+ var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_i2];
+ var segmentIndex = getSegmentIndex(multiframe, _i2);
+
+ if (segmentIndex === undefined) {
+ throw new Error("Could not retrieve the segment index. Aborting segmentation loading.");
+ }
+
+ if (segmentIndex !== segmentIndexToProcess) {
+ i = _i2;
+ return "continue";
+ }
+
+ var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
+ var pixelDataI2D = ndarray$1(new Uint8Array(pixelData.buffer, _i2 * sliceLength, sliceLength), [Rows, Columns]);
+ var alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
+
+ if (!alignedPixelDataI) {
+ throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
+ }
+
+ var imageId = findReferenceSourceImageId(multiframe, _i2, imageIds, metadataProvider, tolerance);
+
+ if (!imageId) {
+ console.warn("Image not present in stack, can't import frame : " + _i2 + ".");
+ i = _i2;
+ return "continue";
+ }
+
+ var sourceImageMetadata = metadataProvider.get("instance", imageId);
+
+ if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {
+ throw new Error("Individual SEG frames have different geometry dimensions (Rows and Columns) " + "respect to the source image reference frame. This is not yet supported. " + "Aborting segmentation loading. ");
+ }
+
+ var imageIdIndex = imageIds.findIndex(function (element) {
+ return element === imageId;
+ });
+ var byteOffset = sliceLength * 2 * imageIdIndex; // 2 bytes/pixel
+
+ var labelmap2DView = new Uint16Array(tempBuffer, byteOffset, sliceLength);
+ var data = alignedPixelDataI.data;
+ var segmentOnFrame = false;
+
+ for (var j = 0, len = alignedPixelDataI.data.length; j < len; ++j) {
+ if (data[j]) {
+ if (labelmap2DView[j] !== 0) {
+ m++;
+
+ if (m >= M) {
+ labelmapBufferArray[m] = new ArrayBuffer(arrayBufferLength);
+ segmentsOnFrameArray[m] = [];
+ M++;
+ }
+
+ tempBuffer = labelmapBufferArray[m].slice(0);
+ tempSegmentsOnFrame = cloneDeep(segmentsOnFrameArray[m]);
+ _i2 = 0;
+ break;
+ } else {
+ labelmap2DView[j] = segmentIndex;
+ segmentOnFrame = true;
+ }
+ }
+ }
+
+ if (segmentOnFrame) {
+ if (!tempSegmentsOnFrame[imageIdIndex]) {
+ tempSegmentsOnFrame[imageIdIndex] = [];
+ }
+
+ tempSegmentsOnFrame[imageIdIndex].push(segmentIndex);
+
+ if (!segmentsOnFrame[imageIdIndex]) {
+ segmentsOnFrame[imageIdIndex] = [];
+ }
+
+ segmentsOnFrame[imageIdIndex].push(segmentIndex);
+ }
+
+ i = _i2;
+ };
+
+ for (var i = 0, groupsLen = PerFrameFunctionalGroupsSequence.length; i < groupsLen; ++i) {
+ var _ret2 = _loop4(i, groupsLen);
+
+ if (_ret2 === "continue") continue;
+ }
+
+ labelmapBufferArray[m] = tempBuffer.slice(0);
+ segmentsOnFrameArray[m] = cloneDeep(tempSegmentsOnFrame); // reset temp variables/buffers for new segment
+
+ m = 0;
+ tempBuffer = labelmapBufferArray[m].slice(0);
+ tempSegmentsOnFrame = cloneDeep(segmentsOnFrameArray[m]);
+ }
+ }
+
+ var getSegmentIndex = function getSegmentIndex(multiframe, frame) {
+ var PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
+ SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence;
+ var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[frame];
+ return PerFrameFunctionalGroups && PerFrameFunctionalGroups.SegmentIdentificationSequence ? PerFrameFunctionalGroups.SegmentIdentificationSequence.ReferencedSegmentNumber : SharedFunctionalGroupsSequence.SegmentIdentificationSequence ? SharedFunctionalGroupsSequence.SegmentIdentificationSequence.ReferencedSegmentNumber : undefined;
+ };
+
+ function insertPixelDataPlanar(segmentsOnFrame, segmentsOnFrameArray, labelmapBufferArray, pixelData, multiframe, imageIds, validOrientations, metadataProvider, tolerance) {
+ var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
+ PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence,
+ Rows = multiframe.Rows,
+ Columns = multiframe.Columns;
+ var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined;
+ var sliceLength = Columns * Rows;
+
+ var _loop5 = function _loop5(groupsLen, _i3) {
+ var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[_i3];
+ var ImageOrientationPatientI = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
+ var pixelDataI2D = ndarray$1(new Uint8Array(pixelData.buffer, _i3 * sliceLength, sliceLength), [Rows, Columns]);
+ var alignedPixelDataI = alignPixelDataWithSourceData(pixelDataI2D, ImageOrientationPatientI, validOrientations, tolerance);
+
+ if (!alignedPixelDataI) {
+ throw new Error("Individual SEG frames are out of plane with respect to the first SEG frame. " + "This is not yet supported. Aborting segmentation loading.");
+ }
+
+ var segmentIndex = getSegmentIndex(multiframe, _i3);
+
+ if (segmentIndex === undefined) {
+ throw new Error("Could not retrieve the segment index. Aborting segmentation loading.");
+ }
+
+ var imageId = findReferenceSourceImageId(multiframe, _i3, imageIds, metadataProvider, tolerance);
+
+ if (!imageId) {
+ console.warn("Image not present in stack, can't import frame : " + _i3 + ".");
+ return "continue";
+ }
+
+ var sourceImageMetadata = metadataProvider.get("instance", imageId);
+
+ if (Rows !== sourceImageMetadata.Rows || Columns !== sourceImageMetadata.Columns) {
+ throw new Error("Individual SEG frames have different geometry dimensions (Rows and Columns) " + "respect to the source image reference frame. This is not yet supported. " + "Aborting segmentation loading. ");
+ }
+
+ var imageIdIndex = imageIds.findIndex(function (element) {
+ return element === imageId;
+ });
+ var byteOffset = sliceLength * 2 * imageIdIndex; // 2 bytes/pixel
+
+ var labelmap2DView = new Uint16Array(labelmapBufferArray[0], byteOffset, sliceLength);
+ var data = alignedPixelDataI.data;
+
+ for (var j = 0, len = alignedPixelDataI.data.length; j < len; ++j) {
+ if (data[j]) {
+ for (var x = j; x < len; ++x) {
+ if (data[x]) {
+ labelmap2DView[x] = segmentIndex;
+ }
+ }
+
+ if (!segmentsOnFrame[imageIdIndex]) {
+ segmentsOnFrame[imageIdIndex] = [];
+ }
+
+ segmentsOnFrame[imageIdIndex].push(segmentIndex);
+ break;
+ }
+ }
+ };
+
+ for (var _i3 = 0, groupsLen = PerFrameFunctionalGroupsSequence.length; _i3 < groupsLen; ++_i3) {
+ var _ret3 = _loop5(groupsLen, _i3);
+
+ if (_ret3 === "continue") continue;
+ }
+ }
+
+ function checkOrientation(multiframe, validOrientations, sourceDataDimensions, tolerance) {
+ var SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence,
+ PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence;
+ var sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined; // Check if in plane.
+
+ var PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[0];
+ var iop = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient;
+ var inPlane = validOrientations.some(function (operation) {
+ return compareArrays(iop, operation, tolerance);
+ });
+
+ if (inPlane) {
+ return "Planar";
+ }
+
+ if (checkIfPerpendicular(iop, validOrientations[0], tolerance) && sourceDataDimensions.includes(multiframe.Rows) && sourceDataDimensions.includes(multiframe.Columns)) {
+ // Perpendicular and fits on same grid.
+ return "Perpendicular";
+ }
+
+ return "Oblique";
+ }
+ /**
+ * checkIfPerpendicular - Returns true if iop1 and iop2 are perpendicular
+ * within a tolerance.
+ *
+ * @param {Number[6]} iop1 An ImageOrientationPatient array.
+ * @param {Number[6]} iop2 An ImageOrientationPatient array.
+ * @param {Number} tolerance.
+ * @return {Boolean} True if iop1 and iop2 are equal.
+ */
+
+
+ function checkIfPerpendicular(iop1, iop2, tolerance) {
+ var absDotColumnCosines = Math.abs(iop1[0] * iop2[0] + iop1[1] * iop2[1] + iop1[2] * iop2[2]);
+ var absDotRowCosines = Math.abs(iop1[3] * iop2[3] + iop1[4] * iop2[4] + iop1[5] * iop2[5]);
+ return (absDotColumnCosines < tolerance || Math.abs(absDotColumnCosines - 1) < tolerance) && (absDotRowCosines < tolerance || Math.abs(absDotRowCosines - 1) < tolerance);
+ }
+ /**
+ * unpackPixelData - Unpacks bitpacked pixelData if the Segmentation is BINARY.
+ *
+ * @param {Object} multiframe The multiframe dataset.
+ * @return {Uint8Array} The unpacked pixelData.
+ */
+
+
+ function unpackPixelData(multiframe) {
+ var segType = multiframe.SegmentationType;
+ var data;
+
+ if (Array.isArray(multiframe.PixelData)) {
+ data = multiframe.PixelData[0];
+ } else {
+ data = multiframe.PixelData;
+ }
+
+ if (data === undefined) {
+ log.error("This segmentation pixeldata is undefined.");
+ }
+
+ if (segType === "BINARY") {
+ return BitArray.unpack(data);
+ }
+
+ var pixelData = new Uint8Array(data);
+ var max = multiframe.MaximumFractionalValue;
+ var onlyMaxAndZero = pixelData.find(function (element) {
+ return element !== 0 && element !== max;
+ }) === undefined;
+
+ if (!onlyMaxAndZero) {
+ // This is a fractional segmentation, which is not currently supported.
+ return;
+ }
+
+ log.warn("This segmentation object is actually binary... processing as such.");
+ return pixelData;
+ }
+ /**
+ * getImageIdOfSourceImagebySourceImageSequence - Returns the Cornerstone imageId of the source image.
+ *
+ * @param {Object} SourceImageSequence Sequence describing the source image.
+ * @param {String[]} imageIds A list of imageIds.
+ * @param {Object} metadataProvider A Cornerstone metadataProvider to query
+ * metadata from imageIds.
+ * @return {String} The corresponding imageId.
+ */
+
+
+ function getImageIdOfSourceImagebySourceImageSequence(SourceImageSequence, imageIds, metadataProvider) {
+ var ReferencedSOPInstanceUID = SourceImageSequence.ReferencedSOPInstanceUID,
+ ReferencedFrameNumber = SourceImageSequence.ReferencedFrameNumber;
+ return ReferencedFrameNumber ? getImageIdOfReferencedFrame(ReferencedSOPInstanceUID, ReferencedFrameNumber, imageIds, metadataProvider) : getImageIdOfReferencedSingleFramedSOPInstance(ReferencedSOPInstanceUID, imageIds, metadataProvider);
+ }
+ /**
+ * getImageIdOfSourceImagebyGeometry - Returns the Cornerstone imageId of the source image.
+ *
+ * @param {String} ReferencedSeriesInstanceUID Referenced series of the source image.
+ * @param {String} FrameOfReferenceUID Frame of reference.
+ * @param {Object} PerFrameFunctionalGroup Sequence describing segmentation reference attributes per frame.
+ * @param {String[]} imageIds A list of imageIds.
+ * @param {Object} metadataProvider A Cornerstone metadataProvider to query
+ * @param {Float} tolerance The tolerance parameter
+ *
+ * @return {String} The corresponding imageId.
+ */
+
+
+ function getImageIdOfSourceImagebyGeometry(ReferencedSeriesInstanceUID, FrameOfReferenceUID, PerFrameFunctionalGroup, imageIds, metadataProvider, tolerance) {
+ if (ReferencedSeriesInstanceUID === undefined || PerFrameFunctionalGroup.PlanePositionSequence === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0] === undefined || PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient === undefined) {
+ return undefined;
+ }
+
+ for (var imageIdsIndexc = 0; imageIdsIndexc < imageIds.length; ++imageIdsIndexc) {
+ var sourceImageMetadata = metadataProvider.get("instance", imageIds[imageIdsIndexc]);
+
+ if (sourceImageMetadata === undefined || sourceImageMetadata.ImagePositionPatient === undefined || sourceImageMetadata.FrameOfReferenceUID !== FrameOfReferenceUID || sourceImageMetadata.SeriesInstanceUID !== ReferencedSeriesInstanceUID) {
+ continue;
+ }
+
+ if (compareArrays(PerFrameFunctionalGroup.PlanePositionSequence[0].ImagePositionPatient, sourceImageMetadata.ImagePositionPatient, tolerance)) {
+ return imageIds[imageIdsIndexc];
+ }
+ }
+ }
+ /**
+ * getImageIdOfReferencedSingleFramedSOPInstance - Returns the imageId
+ * corresponding to the specified sopInstanceUid for single-frame images.
+ *
+ * @param {String} sopInstanceUid The sopInstanceUid of the desired image.
+ * @param {String[]} imageIds The list of imageIds.
+ * @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids
+ * from the cornerstone imageIds.
+ * @return {String} The imageId that corresponds to the sopInstanceUid.
+ */
+
+
+ function getImageIdOfReferencedSingleFramedSOPInstance(sopInstanceUid, imageIds, metadataProvider) {
+ return imageIds.find(function (imageId) {
+ var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
+
+ if (!sopCommonModule) {
+ return;
+ }
+
+ return sopCommonModule.sopInstanceUID === sopInstanceUid;
+ });
+ }
+ /**
+ * getImageIdOfReferencedFrame - Returns the imageId corresponding to the
+ * specified sopInstanceUid and frameNumber for multi-frame images.
+ *
+ * @param {String} sopInstanceUid The sopInstanceUid of the desired image.
+ * @param {Number} frameNumber The frame number.
+ * @param {String} imageIds The list of imageIds.
+ * @param {Object} metadataProvider The metadataProvider to obtain sopInstanceUids
+ * from the cornerstone imageIds.
+ * @return {String} The imageId that corresponds to the sopInstanceUid.
+ */
+
+
+ function getImageIdOfReferencedFrame(sopInstanceUid, frameNumber, imageIds, metadataProvider) {
+ var imageId = imageIds.find(function (imageId) {
+ var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
+
+ if (!sopCommonModule) {
+ return;
+ }
+
+ var imageIdFrameNumber = Number(imageId.split("frame=")[1]);
+ return (//frameNumber is zero indexed for cornerstoneWADOImageLoader image Ids.
+ sopCommonModule.sopInstanceUID === sopInstanceUid && imageIdFrameNumber === frameNumber - 1
+ );
+ });
+ return imageId;
+ }
+ /**
+ * getValidOrientations - returns an array of valid orientations.
+ *
+ * @param {Number[6]} iop The row (0..2) an column (3..5) direction cosines.
+ * @return {Number[8][6]} An array of valid orientations.
+ */
+
+
+ function getValidOrientations(iop) {
+ var orientations = []; // [0, 1, 2]: 0, 0hf, 0vf
+ // [3, 4, 5]: 90, 90hf, 90vf
+ // [6, 7]: 180, 270
+
+ orientations[0] = iop;
+ orientations[1] = flipImageOrientationPatient.h(iop);
+ orientations[2] = flipImageOrientationPatient.v(iop);
+ var iop90 = rotateDirectionCosinesInPlane(iop, Math.PI / 2);
+ orientations[3] = iop90;
+ orientations[4] = flipImageOrientationPatient.h(iop90);
+ orientations[5] = flipImageOrientationPatient.v(iop90);
+ orientations[6] = rotateDirectionCosinesInPlane(iop, Math.PI);
+ orientations[7] = rotateDirectionCosinesInPlane(iop, 1.5 * Math.PI);
+ return orientations;
+ }
+ /**
+ * alignPixelDataWithSourceData -
+ *
+ * @param {Ndarray} pixelData2D - The data to align.
+ * @param {Number[6]} iop - The orientation of the image slice.
+ * @param {Number[8][6]} orientations - An array of valid imageOrientationPatient values.
+ * @param {Number} tolerance.
+ * @return {Ndarray} The aligned pixelData.
+ */
+
+
+ function alignPixelDataWithSourceData(pixelData2D, iop, orientations, tolerance) {
+ if (compareArrays(iop, orientations[0], tolerance)) {
+ return pixelData2D;
+ } else if (compareArrays(iop, orientations[1], tolerance)) {
+ // Flipped vertically.
+ // Undo Flip
+ return flipMatrix2D.v(pixelData2D);
+ } else if (compareArrays(iop, orientations[2], tolerance)) {
+ // Flipped horizontally.
+ // Unfo flip
+ return flipMatrix2D.h(pixelData2D);
+ } else if (compareArrays(iop, orientations[3], tolerance)) {
+ //Rotated 90 degrees
+ // Rotate back
+ return rotateMatrix902D(pixelData2D);
+ } else if (compareArrays(iop, orientations[4], tolerance)) {
+ //Rotated 90 degrees and fliped horizontally.
+ // Undo flip and rotate back.
+ return rotateMatrix902D(flipMatrix2D.h(pixelData2D));
+ } else if (compareArrays(iop, orientations[5], tolerance)) {
+ // Rotated 90 degrees and fliped vertically
+ // Unfo flip and rotate back.
+ return rotateMatrix902D(flipMatrix2D.v(pixelData2D));
+ } else if (compareArrays(iop, orientations[6], tolerance)) {
+ // Rotated 180 degrees. // TODO -> Do this more effeciently, there is a 1:1 mapping like 90 degree rotation.
+ return rotateMatrix902D(rotateMatrix902D(pixelData2D));
+ } else if (compareArrays(iop, orientations[7], tolerance)) {
+ // Rotated 270 degrees
+ // Rotate back.
+ return rotateMatrix902D(rotateMatrix902D(rotateMatrix902D(pixelData2D)));
+ }
+ }
+ /**
+ * compareArrays - Returns true if array1 and array2 are equal
+ * within a tolerance.
+ *
+ * @param {Number[]} array1 - An array.
+ * @param {Number[]} array2 - An array.
+ * @param {Number} tolerance.
+ * @return {Boolean} True if array1 and array2 are equal.
+ */
+
+
+ function compareArrays(array1, array2, tolerance) {
+ if (array1.length != array2.length) {
+ return false;
+ }
+
+ for (var _i4 = 0; _i4 < array1.length; ++_i4) {
+ if (!nearlyEqual(array1[_i4], array2[_i4], tolerance)) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ function getSegmentMetadata(multiframe, seriesInstanceUid) {
+ var segmentSequence = multiframe.SegmentSequence;
+ var data = [];
+
+ if (Array.isArray(segmentSequence)) {
+ data = [undefined].concat(_toConsumableArray(segmentSequence));
+ } else {
+ // Only one segment, will be stored as an object.
+ data = [undefined, segmentSequence];
+ }
+
+ return {
+ seriesInstanceUid: seriesInstanceUid,
+ data: data
+ };
+ }
+
+ var Segmentation$1 = {
+ generateSegmentation: generateSegmentation,
+ generateToolState: generateToolState,
+ fillSegmentation: fillSegmentation
+ };
+ /**
+ * generateSegmentation - Generates a DICOM Segmentation object given cornerstoneTools data.
+ *
+ * @param {object[]} images An array of the cornerstone image objects.
+ * @param {Object|Object[]} labelmaps3DorBrushData For 4.X: The cornerstone `Labelmap3D` object, or an array of objects.
+ * For 3.X: the BrushData.
+ * @param {number} cornerstoneToolsVersion The cornerstoneTools major version to map against.
+ * @returns {Object}
+ */
+
+ function generateSegmentation(images, labelmaps3DorBrushData) {
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
+ includeSliceSpacing: true
+ };
+ var cornerstoneToolsVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;
+
+ if (cornerstoneToolsVersion === 4) {
+ return Segmentation$2.generateSegmentation(images, labelmaps3DorBrushData, options);
+ }
+
+ if (cornerstoneToolsVersion === 3) {
+ return Segmentation$3.generateSegmentation(images, labelmaps3DorBrushData, options);
+ }
+
+ console.warn("No generateSegmentation adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
+ }
+ /**
+ * generateToolState - Given a set of cornrstoneTools imageIds and a Segmentation buffer,
+ * derive cornerstoneTools toolState and brush metadata.
+ *
+ * @param {string[]} imageIds An array of the imageIds.
+ * @param {ArrayBuffer} arrayBuffer The SEG arrayBuffer.
+ * @param {*} metadataProvider
+ * @param {bool} skipOverlapping - skip checks for overlapping segs, default value false.
+ * @param {number} tolerance - default value 1.e-3.
+ * @param {number} cornerstoneToolsVersion - default value 4.
+ *
+ * @returns {Object} The toolState and an object from which the
+ * segment metadata can be derived.
+ */
+
+
+ function generateToolState(imageIds, arrayBuffer, metadataProvider) {
+ var skipOverlapping = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
+ var tolerance = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 1e-3;
+ var cornerstoneToolsVersion = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 4;
+
+ if (cornerstoneToolsVersion === 4) {
+ return Segmentation$2.generateToolState(imageIds, arrayBuffer, metadataProvider, skipOverlapping, tolerance);
+ }
+
+ if (cornerstoneToolsVersion === 3) {
+ return Segmentation$3.generateToolState(imageIds, arrayBuffer, metadataProvider);
+ }
+
+ console.warn("No generateToolState adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
+ }
+ /**
+ * fillSegmentation - Fills a derived segmentation dataset with cornerstoneTools `LabelMap3D` data.
+ *
+ * @param {object[]} segmentation An empty segmentation derived dataset.
+ * @param {Object|Object[]} inputLabelmaps3D The cornerstone `Labelmap3D` object, or an array of objects.
+ * @param {Object} userOptions Options object to override default options.
+ * @returns {Blob} description
+ */
+
+
+ function fillSegmentation(segmentation, inputLabelmaps3D) {
+ var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
+ includeSliceSpacing: true
+ };
+ var cornerstoneToolsVersion = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 4;
+
+ if (cornerstoneToolsVersion === 4) {
+ return Segmentation$2.fillSegmentation(segmentation, inputLabelmaps3D, options);
+ }
+
+ console.warn("No generateSegmentation adapater for cornerstone version ".concat(cornerstoneToolsVersion, ", exiting."));
+ }
+
+ var CobbAngle$1 = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(CobbAngle, _TID300Measurement);
+
+ var _super = _createSuper(CobbAngle);
+
+ function CobbAngle() {
+ _classCallCheck(this, CobbAngle);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(CobbAngle, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ point1 = _this$props.point1,
+ point2 = _this$props.point2,
+ point3 = _this$props.point3,
+ point4 = _this$props.point4,
+ rAngle = _this$props.rAngle,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence;
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "285285000",
+ CodingSchemeDesignator: "SCT",
+ CodeMeaning: "Cobb angle"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: {
+ CodeValue: "deg",
+ CodingSchemeDesignator: "UCUM",
+ CodingSchemeVersion: "1.4",
+ CodeMeaning: "\xB0"
+ },
+ NumericValue: rAngle
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: "SCOORD",
+ GraphicType: "POLYLINE",
+ GraphicData: [point1.x, point1.y, point2.x, point2.y, point3.x, point3.y, point4.x, point4.y],
+ ContentSequence: {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return CobbAngle;
+ }(TID300Measurement);
+
+ var COBB_ANGLE = "CobbAngle";
+
+ var CobbAngle = /*#__PURE__*/function () {
+ function CobbAngle() {
+ _classCallCheck(this, CobbAngle);
+ } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
+
+
+ _createClass(CobbAngle, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
+ defaultState = _MeasurementReport$ge.defaultState,
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
+
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
+ rAngle: NUMGroup.MeasuredValueSequence.NumericValue,
+ toolType: CobbAngle.toolType,
+ handles: {
+ start: {},
+ end: {},
+ start2: {
+ highlight: true,
+ drawnIndependently: true
+ },
+ end2: {
+ highlight: true,
+ drawnIndependently: true
+ },
+ textBox: {
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ }
+ });
+
+ var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 8);
+
+ state.handles.start.x = _SCOORDGroup$GraphicD[0];
+ state.handles.start.y = _SCOORDGroup$GraphicD[1];
+ state.handles.end.x = _SCOORDGroup$GraphicD[2];
+ state.handles.end.y = _SCOORDGroup$GraphicD[3];
+ state.handles.start2.x = _SCOORDGroup$GraphicD[4];
+ state.handles.start2.y = _SCOORDGroup$GraphicD[5];
+ state.handles.end2.x = _SCOORDGroup$GraphicD[6];
+ state.handles.end2.y = _SCOORDGroup$GraphicD[7];
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var handles = tool.handles,
+ finding = tool.finding,
+ findingSites = tool.findingSites;
+ var point1 = handles.start;
+ var point2 = handles.end;
+ var point3 = handles.start2;
+ var point4 = handles.end2;
+ var rAngle = tool.rAngle;
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:CobbAngle";
+ return {
+ point1: point1,
+ point2: point2,
+ point3: point3,
+ point4: point4,
+ rAngle: rAngle,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return CobbAngle;
+ }();
+
+ CobbAngle.toolType = COBB_ANGLE;
+ CobbAngle.utilityToolType = COBB_ANGLE;
+ CobbAngle.TID300Representation = CobbAngle$1;
+
+ CobbAngle.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === COBB_ANGLE;
+ };
+
+ MeasurementReport$3.registerTool(CobbAngle);
+
+ var ANGLE = "Angle";
+
+ var Angle = /*#__PURE__*/function () {
+ function Angle() {
+ _classCallCheck(this, Angle);
+ }
+ /**
+ * Generate TID300 measurement data for a plane angle measurement - use a CobbAngle, but label it as Angle
+ * @param MeasurementGroup
+ * @returns
+ */
+
+
+ _createClass(Angle, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
+ defaultState = _MeasurementReport$ge.defaultState,
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup;
+
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
+ rAngle: NUMGroup.MeasuredValueSequence.NumericValue,
+ toolType: Angle.toolType,
+ handles: {
+ start: {},
+ middle: {},
+ end: {},
+ textBox: {
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ }
+ });
+
+ var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 8);
+
+ state.handles.start.x = _SCOORDGroup$GraphicD[0];
+ state.handles.start.y = _SCOORDGroup$GraphicD[1];
+ state.handles.middle.x = _SCOORDGroup$GraphicD[2];
+ state.handles.middle.y = _SCOORDGroup$GraphicD[3];
+ state.handles.middle.x = _SCOORDGroup$GraphicD[4];
+ state.handles.middle.y = _SCOORDGroup$GraphicD[5];
+ state.handles.end.x = _SCOORDGroup$GraphicD[6];
+ state.handles.end.y = _SCOORDGroup$GraphicD[7];
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var handles = tool.handles,
+ finding = tool.finding,
+ findingSites = tool.findingSites;
+ var point1 = handles.start;
+ var point2 = handles.middle;
+ var point3 = handles.middle;
+ var point4 = handles.end;
+ var rAngle = tool.rAngle;
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:Angle";
+ return {
+ point1: point1,
+ point2: point2,
+ point3: point3,
+ point4: point4,
+ rAngle: rAngle,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return Angle;
+ }();
+
+ Angle.toolType = ANGLE;
+ Angle.utilityToolType = ANGLE;
+ Angle.TID300Representation = CobbAngle$1;
+
+ Angle.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === ANGLE;
+ };
+
+ MeasurementReport$3.registerTool(Angle);
+
+ var RectangleRoi = /*#__PURE__*/function () {
+ function RectangleRoi() {
+ _classCallCheck(this, RectangleRoi);
+ }
+
+ _createClass(RectangleRoi, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup) {
+ var _MeasurementReport$ge = MeasurementReport$3.getSetupMeasurementData(MeasurementGroup),
+ defaultState = _MeasurementReport$ge.defaultState,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
+ NUMGroup = _MeasurementReport$ge.NUMGroup;
+
+ var state = _objectSpread2(_objectSpread2({}, defaultState), {}, {
+ toolType: RectangleRoi.toolType,
+ handles: {
+ start: {},
+ end: {},
+ textBox: {
+ active: false,
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ },
+ initialRotation: 0
+ },
+ cachedStats: {
+ area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
+ },
+ color: undefined,
+ invalidated: true
+ });
+
+ var _SCOORDGroup$GraphicD = _slicedToArray(SCOORDGroup.GraphicData, 6);
+
+ state.handles.start.x = _SCOORDGroup$GraphicD[0];
+ state.handles.start.y = _SCOORDGroup$GraphicD[1];
+ _SCOORDGroup$GraphicD[2];
+ _SCOORDGroup$GraphicD[3];
+ state.handles.end.x = _SCOORDGroup$GraphicD[4];
+ state.handles.end.y = _SCOORDGroup$GraphicD[5];
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool) {
+ var finding = tool.finding,
+ findingSites = tool.findingSites,
+ _tool$cachedStats = tool.cachedStats,
+ cachedStats = _tool$cachedStats === void 0 ? {} : _tool$cachedStats,
+ handles = tool.handles;
+ console.log("getTID300 Rectangle", tool, cachedStats, handles);
+ var start = handles.start,
+ end = handles.end;
+ var points = [start, {
+ x: start.x,
+ y: end.y
+ }, end, {
+ x: end.x,
+ y: start.y
+ }];
+ var area = cachedStats.area,
+ perimeter = cachedStats.perimeter;
+ console.log("Point=", points, "cachedStats=", cachedStats);
+ var trackingIdentifierTextValue = "cornerstoneTools@^4.0.0:RectangleRoi";
+ return {
+ points: points,
+ area: area,
+ perimeter: perimeter,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return RectangleRoi;
+ }();
+
+ RectangleRoi.toolType = "RectangleRoi";
+ RectangleRoi.utilityToolType = "RectangleRoi";
+ RectangleRoi.TID300Representation = Polyline$1;
+
+ RectangleRoi.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone4Tag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone4Tag !== CORNERSTONE_4_TAG) {
+ return false;
+ }
+
+ return toolType === RectangleRoi.toolType;
+ };
+
+ MeasurementReport$3.registerTool(RectangleRoi);
+
+ var Cornerstone = {
+ Length: Length$1,
+ FreehandRoi: FreehandRoi,
+ Bidirectional: Bidirectional$1,
+ EllipticalRoi: EllipticalRoi,
+ CircleRoi: CircleRoi,
+ ArrowAnnotate: ArrowAnnotate$1,
+ MeasurementReport: MeasurementReport$3,
+ Segmentation: Segmentation$1,
+ CobbAngle: CobbAngle,
+ Angle: Angle,
+ RectangleRoi: RectangleRoi
+ };
+
+ // This is a custom coding scheme defined to store some annotations from Cornerstone.
+ // Note: CodeMeaning is VR type LO, which means we only actually support 64 characters
+ // here this is fine for most labels, but may be problematic at some point.
+ var CORNERSTONEFREETEXT = "CORNERSTONEFREETEXT"; // Cornerstone specified coding scheme for storing findings
+
+ var CodingSchemeDesignator$1 = "CORNERSTONEJS";
+ var CodingScheme = {
+ CodingSchemeDesignator: CodingSchemeDesignator$1,
+ codeValues: {
+ CORNERSTONEFREETEXT: CORNERSTONEFREETEXT
+ }
+ };
+
+ var FINDING = {
+ CodingSchemeDesignator: "DCM",
+ CodeValue: "121071"
+ };
+ var FINDING_SITE = {
+ CodingSchemeDesignator: "SCT",
+ CodeValue: "363698007"
+ };
+ var FINDING_SITE_OLD = {
+ CodingSchemeDesignator: "SRT",
+ CodeValue: "G-C0E3"
+ };
+
+ var codeValueMatch = function codeValueMatch(group, code, oldCode) {
+ var ConceptNameCodeSequence = group.ConceptNameCodeSequence;
+ if (!ConceptNameCodeSequence) return;
+ var CodingSchemeDesignator = ConceptNameCodeSequence.CodingSchemeDesignator,
+ CodeValue = ConceptNameCodeSequence.CodeValue;
+ return CodingSchemeDesignator == code.CodingSchemeDesignator && CodeValue == code.CodeValue || oldCode && CodingSchemeDesignator == oldCode.CodingSchemeDesignator && CodeValue == oldCode.CodeValue;
+ };
+
+ function getTID300ContentItem$1(tool, toolType, ReferencedSOPSequence, toolClass, worldToImageCoords) {
+ var args = toolClass.getTID300RepresentationArguments(tool, worldToImageCoords);
+ args.ReferencedSOPSequence = ReferencedSOPSequence;
+ var TID300Measurement = new toolClass.TID300Representation(args);
+ return TID300Measurement;
+ }
+
+ function getMeasurementGroup$1(toolType, toolData, ReferencedSOPSequence, worldToImageCoords) {
+ var toolTypeData = toolData[toolType];
+ var toolClass = MeasurementReport$2.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolType];
+
+ if (!toolTypeData || !toolTypeData.data || !toolTypeData.data.length || !toolClass) {
+ return;
+ } // Loop through the array of tool instances
+ // for this tool
+
+
+ var Measurements = toolTypeData.data.map(function (tool) {
+ return getTID300ContentItem$1(tool, toolType, ReferencedSOPSequence, toolClass, worldToImageCoords);
+ });
+ return new TID1501MeasurementGroup(Measurements);
+ }
+
+ var MeasurementReport$2 = /*#__PURE__*/function () {
+ function MeasurementReport() {
+ _classCallCheck(this, MeasurementReport);
+ }
+
+ _createClass(MeasurementReport, null, [{
+ key: "getCornerstoneLabelFromDefaultState",
+ value: function getCornerstoneLabelFromDefaultState(defaultState) {
+ var _defaultState$finding = defaultState.findingSites,
+ findingSites = _defaultState$finding === void 0 ? [] : _defaultState$finding,
+ finding = defaultState.finding;
+ var cornersoneFreeTextCodingValue = CodingScheme.codeValues.CORNERSTONEFREETEXT;
+ var freeTextLabel = findingSites.find(function (fs) {
+ return fs.CodeValue === cornersoneFreeTextCodingValue;
+ });
+
+ if (freeTextLabel) {
+ return freeTextLabel.CodeMeaning;
+ }
+
+ if (finding && finding.CodeValue === cornersoneFreeTextCodingValue) {
+ return finding.CodeMeaning;
+ }
+ }
+ }, {
+ key: "generateDatasetMeta",
+ value: function generateDatasetMeta() {
+ // TODO: what is the correct metaheader
+ // http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html
+ // TODO: move meta creation to happen in derivations.js
+ var fileMetaInformationVersionArray = new Uint8Array(2);
+ fileMetaInformationVersionArray[1] = 1;
+ var _meta = {
+ FileMetaInformationVersion: {
+ Value: [fileMetaInformationVersionArray.buffer],
+ vr: "OB"
+ },
+ //MediaStorageSOPClassUID
+ //MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,
+ TransferSyntaxUID: {
+ Value: ["1.2.840.10008.1.2.1"],
+ vr: "UI"
+ },
+ ImplementationClassUID: {
+ Value: [DicomMetaDictionary.uid()],
+ // TODO: could be git hash or other valid id
+ vr: "UI"
+ },
+ ImplementationVersionName: {
+ Value: ["dcmjs"],
+ vr: "SH"
+ }
+ };
+ return _meta;
+ }
+ }, {
+ key: "generateDerivationSourceDataset",
+ value: function generateDerivationSourceDataset(StudyInstanceUID, SeriesInstanceUID) {
+ var _vrMap = {
+ PixelData: "OW"
+ };
+
+ var _meta = MeasurementReport.generateDatasetMeta();
+
+ var derivationSourceDataset = {
+ StudyInstanceUID: StudyInstanceUID,
+ SeriesInstanceUID: SeriesInstanceUID,
+ _meta: _meta,
+ _vrMap: _vrMap
+ };
+ return derivationSourceDataset;
+ }
+ }, {
+ key: "getSetupMeasurementData",
+ value: function getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, toolType) {
+ var ContentSequence = MeasurementGroup.ContentSequence;
+ var contentSequenceArr = toArray(ContentSequence);
+ var findingGroup = contentSequenceArr.find(function (group) {
+ return codeValueMatch(group, FINDING);
+ });
+ var findingSiteGroups = contentSequenceArr.filter(function (group) {
+ return codeValueMatch(group, FINDING_SITE, FINDING_SITE_OLD);
+ }) || [];
+ var NUMGroup = contentSequenceArr.find(function (group) {
+ return group.ValueType === "NUM";
+ });
+ var SCOORDGroup = toArray(NUMGroup.ContentSequence).find(function (group) {
+ return group.ValueType === "SCOORD";
+ });
+ var ReferencedSOPSequence = SCOORDGroup.ContentSequence.ReferencedSOPSequence;
+ var ReferencedSOPInstanceUID = ReferencedSOPSequence.ReferencedSOPInstanceUID,
+ ReferencedFrameNumber = ReferencedSOPSequence.ReferencedFrameNumber;
+ var referencedImageId = sopInstanceUIDToImageIdMap[ReferencedSOPInstanceUID];
+ var imagePlaneModule = metadata.get("imagePlaneModule", referencedImageId);
+ var finding = findingGroup ? addAccessors(findingGroup.ConceptCodeSequence) : undefined;
+ var findingSites = findingSiteGroups.map(function (fsg) {
+ return addAccessors(fsg.ConceptCodeSequence);
+ });
+ var defaultState = {
+ sopInstanceUid: ReferencedSOPInstanceUID,
+ annotation: {
+ annotationUID: DicomMetaDictionary.uid(),
+ metadata: {
+ toolName: toolType,
+ referencedImageId: referencedImageId,
+ FrameOfReferenceUID: imagePlaneModule.frameOfReferenceUID,
+ label: ""
+ }
+ },
+ finding: finding,
+ findingSites: findingSites
+ };
+
+ if (defaultState.finding) {
+ defaultState.description = defaultState.finding.CodeMeaning;
+ }
+
+ defaultState.annotation.metadata.label = MeasurementReport.getCornerstoneLabelFromDefaultState(defaultState);
+ return {
+ defaultState: defaultState,
+ NUMGroup: NUMGroup,
+ SCOORDGroup: SCOORDGroup,
+ ReferencedSOPSequence: ReferencedSOPSequence,
+ ReferencedSOPInstanceUID: ReferencedSOPInstanceUID,
+ ReferencedFrameNumber: ReferencedFrameNumber
+ };
+ }
+ }, {
+ key: "generateReport",
+ value: function generateReport(toolState, metadataProvider, worldToImageCoords, options) {
+ // ToolState for array of imageIDs to a Report
+ // Assume Cornerstone metadata provider has access to Study / Series / Sop Instance UID
+ var allMeasurementGroups = [];
+ /* Patient ID
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Patient ID
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Date
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study Time
+ Warning - Missing attribute or value that would be needed to build DICOMDIR - Study ID
+ */
+
+ var sopInstanceUIDsToSeriesInstanceUIDMap = {};
+ var derivationSourceDatasets = [];
+
+ var _meta = MeasurementReport.generateDatasetMeta(); // Loop through each image in the toolData
+
+
+ Object.keys(toolState).forEach(function (imageId) {
+ var sopCommonModule = metadataProvider.get("sopCommonModule", imageId);
+ var generalSeriesModule = metadataProvider.get("generalSeriesModule", imageId);
+ var sopInstanceUID = sopCommonModule.sopInstanceUID,
+ sopClassUID = sopCommonModule.sopClassUID;
+ var studyInstanceUID = generalSeriesModule.studyInstanceUID,
+ seriesInstanceUID = generalSeriesModule.seriesInstanceUID;
+ sopInstanceUIDsToSeriesInstanceUIDMap[sopInstanceUID] = seriesInstanceUID;
+
+ if (!derivationSourceDatasets.find(function (dsd) {
+ return dsd.SeriesInstanceUID === seriesInstanceUID;
+ })) {
+ // Entry not present for series, create one.
+ var derivationSourceDataset = MeasurementReport.generateDerivationSourceDataset(studyInstanceUID, seriesInstanceUID);
+ derivationSourceDatasets.push(derivationSourceDataset);
+ }
+
+ var frameNumber = metadataProvider.get("frameNumber", imageId);
+ var toolData = toolState[imageId];
+ var toolTypes = Object.keys(toolData);
+ var ReferencedSOPSequence = {
+ ReferencedSOPClassUID: sopClassUID,
+ ReferencedSOPInstanceUID: sopInstanceUID
+ };
+ var instance = metadataProvider.get("instance", imageId);
+
+ if (instance && instance.NumberOfFrames && instance.NumberOfFrames > 1 || Normalizer.isMultiframeSOPClassUID(sopClassUID)) {
+ ReferencedSOPSequence.ReferencedFrameNumber = frameNumber;
+ } // Loop through each tool type for the image
+
+
+ var measurementGroups = [];
+ toolTypes.forEach(function (toolType) {
+ var group = getMeasurementGroup$1(toolType, toolData, ReferencedSOPSequence, worldToImageCoords);
+
+ if (group) {
+ measurementGroups.push(group);
+ }
+ });
+ allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);
+ });
+ var tid1500MeasurementReport = new TID1500MeasurementReport({
+ TID1501MeasurementGroups: allMeasurementGroups
+ }, options);
+ var report = new StructuredReport(derivationSourceDatasets);
+ var contentItem = tid1500MeasurementReport.contentItem(derivationSourceDatasets, {
+ sopInstanceUIDsToSeriesInstanceUIDMap: sopInstanceUIDsToSeriesInstanceUIDMap
+ }); // Merge the derived dataset with the content from the Measurement Report
+
+ report.dataset = Object.assign(report.dataset, contentItem);
+ report.dataset._meta = _meta;
+ return report;
+ }
+ /**
+ * Generate Cornerstone tool state from dataset
+ * @param {object} dataset dataset
+ * @param {object} hooks
+ * @param {function} hooks.getToolClass Function to map dataset to a tool class
+ * @returns
+ */
+
+ }, {
+ key: "generateToolState",
+ value: function generateToolState(dataset, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
+ var hooks = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : {};
+
+ // For now, bail out if the dataset is not a TID1500 SR with length measurements
+ if (dataset.ContentTemplateSequence.TemplateIdentifier !== "1500") {
+ throw new Error("This package can currently only interpret DICOM SR TID 1500");
+ }
+
+ var REPORT = "Imaging Measurements";
+ var GROUP = "Measurement Group";
+ var TRACKING_IDENTIFIER = "Tracking Identifier"; // Identify the Imaging Measurements
+
+ var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves
+
+ var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // For each of the supported measurement types, compute the measurement data
+
+ var measurementData = {};
+ var cornerstoneToolClasses = MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE;
+ var registeredToolClasses = [];
+ Object.keys(cornerstoneToolClasses).forEach(function (key) {
+ registeredToolClasses.push(cornerstoneToolClasses[key]);
+ measurementData[key] = [];
+ });
+ measurementGroups.forEach(function (measurementGroup, index) {
+ var measurementGroupContentSequence = toArray(measurementGroup.ContentSequence);
+ var TrackingIdentifierGroup = measurementGroupContentSequence.find(function (contentItem) {
+ return contentItem.ConceptNameCodeSequence.CodeMeaning === TRACKING_IDENTIFIER;
+ });
+ var TrackingIdentifierValue = TrackingIdentifierGroup.TextValue;
+ var toolClass = hooks.getToolClass ? hooks.getToolClass(measurementGroup, dataset, registeredToolClasses) : registeredToolClasses.find(function (tc) {
+ return tc.isValidCornerstoneTrackingIdentifier(TrackingIdentifierValue);
+ });
+
+ if (toolClass) {
+ var measurement = toolClass.getMeasurementData(measurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata);
+ console.log("=== ".concat(toolClass.toolType, " ==="));
+ console.log(measurement);
+ measurementData[toolClass.toolType].push(measurement);
+ }
+ }); // NOTE: There is no way of knowing the cornerstone imageIds as that could be anything.
+ // That is up to the consumer to derive from the SOPInstanceUIDs.
+
+ return measurementData;
+ }
+ }, {
+ key: "registerTool",
+ value: function registerTool(toolClass) {
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;
+ MeasurementReport.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.toolType] = toolClass;
+ MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.toolType] = toolClass.utilityToolType;
+ }
+ }]);
+
+ return MeasurementReport;
+ }();
+ MeasurementReport$2.MEASUREMENT_BY_TOOLTYPE = {};
+ MeasurementReport$2.CORNERSTONE_TOOL_CLASSES_BY_UTILITY_TYPE = {};
+ MeasurementReport$2.CORNERSTONE_TOOL_CLASSES_BY_TOOL_TYPE = {};
+
+ var CORNERSTONE_3D_TAG = "Cornerstone3DTools@^0.1.0";
+
+ var LENGTH = "Length";
+ var trackingIdentifierTextValue$5 = "".concat(CORNERSTONE_3D_TAG, ":").concat(LENGTH);
+
+ var Length = /*#__PURE__*/function () {
+ function Length() {
+ _classCallCheck(this, Length);
+ } // TODO: this function is required for all Cornerstone Tool Adapters, since it is called by MeasurementReport.
+
+
+ _createClass(Length, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
+ var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Length.toolType),
+ defaultState = _MeasurementReport$ge.defaultState,
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
+
+ var referencedImageId = defaultState.annotation.metadata.referencedImageId;
+ var GraphicData = SCOORDGroup.GraphicData;
+ var worldCoords = [];
+
+ for (var i = 0; i < GraphicData.length; i += 2) {
+ var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
+ worldCoords.push(point);
+ }
+
+ var state = defaultState;
+ state.annotation.data = {
+ handles: {
+ points: [worldCoords[0], worldCoords[1]],
+ activeHandleIndex: 0,
+ textBox: {
+ hasMoved: false
+ }
+ },
+ cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
+ length: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
+ }),
+ frameNumber: ReferencedFrameNumber
+ };
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
+ var data = tool.data,
+ finding = tool.finding,
+ findingSites = tool.findingSites,
+ metadata = tool.metadata;
+ var _data$cachedStats = data.cachedStats,
+ cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
+ handles = data.handles;
+ var referencedImageId = metadata.referencedImageId;
+
+ if (!referencedImageId) {
+ throw new Error("Length.getTID300RepresentationArguments: referencedImageId is not defined");
+ }
+
+ var start = worldToImageCoords(referencedImageId, handles.points[0]);
+ var end = worldToImageCoords(referencedImageId, handles.points[1]);
+ var point1 = {
+ x: start[0],
+ y: start[1]
+ };
+ var point2 = {
+ x: end[0],
+ y: end[1]
+ };
+
+ var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
+ distance = _ref.length;
+
+ return {
+ point1: point1,
+ point2: point2,
+ distance: distance,
+ trackingIdentifierTextValue: trackingIdentifierTextValue$5,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return Length;
+ }();
+
+ Length.toolType = LENGTH;
+ Length.utilityToolType = LENGTH;
+ Length.TID300Representation = Length$2;
+
+ Length.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone3DTag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
+ return false;
+ }
+
+ return toolType === LENGTH;
+ };
+
+ MeasurementReport$2.registerTool(Length);
+
+ var BIDIRECTIONAL = "Bidirectional";
+ var LONG_AXIS = "Long Axis";
+ var SHORT_AXIS = "Short Axis";
+ var trackingIdentifierTextValue$4 = "".concat(CORNERSTONE_3D_TAG, ":").concat(BIDIRECTIONAL);
+
+ var Bidirectional = /*#__PURE__*/function () {
+ function Bidirectional() {
+ _classCallCheck(this, Bidirectional);
+ }
+
+ _createClass(Bidirectional, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
+ var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Bidirectional.toolType),
+ defaultState = _MeasurementReport$ge.defaultState,
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
+
+ var referencedImageId = defaultState.annotation.metadata.referencedImageId;
+ var ContentSequence = MeasurementGroup.ContentSequence;
+ var longAxisNUMGroup = toArray(ContentSequence).find(function (group) {
+ return group.ConceptNameCodeSequence.CodeMeaning === LONG_AXIS;
+ });
+ var longAxisSCOORDGroup = toArray(longAxisNUMGroup.ContentSequence).find(function (group) {
+ return group.ValueType === "SCOORD";
+ });
+ var shortAxisNUMGroup = toArray(ContentSequence).find(function (group) {
+ return group.ConceptNameCodeSequence.CodeMeaning === SHORT_AXIS;
+ });
+ var shortAxisSCOORDGroup = toArray(shortAxisNUMGroup.ContentSequence).find(function (group) {
+ return group.ValueType === "SCOORD";
+ });
+ var worldCoords = [];
+ [longAxisSCOORDGroup, shortAxisSCOORDGroup].forEach(function (group) {
+ var GraphicData = group.GraphicData;
+
+ for (var i = 0; i < GraphicData.length; i += 2) {
+ var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
+ worldCoords.push(point);
+ }
+ });
+ var state = defaultState;
+ state.annotation.data = {
+ handles: {
+ points: [worldCoords[0], worldCoords[1], worldCoords[2], worldCoords[3]],
+ activeHandleIndex: 0,
+ textBox: {
+ hasMoved: false
+ }
+ },
+ cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
+ length: longAxisNUMGroup.MeasuredValueSequence.NumericValue,
+ width: shortAxisNUMGroup.MeasuredValueSequence.NumericValue
+ }),
+ frameNumber: ReferencedFrameNumber
+ };
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
+ var data = tool.data,
+ finding = tool.finding,
+ findingSites = tool.findingSites,
+ metadata = tool.metadata;
+ var _data$cachedStats = data.cachedStats,
+ cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
+ handles = data.handles;
+ var referencedImageId = metadata.referencedImageId;
+
+ if (!referencedImageId) {
+ throw new Error("Bidirectional.getTID300RepresentationArguments: referencedImageId is not defined");
+ }
+
+ var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
+ length = _ref.length,
+ width = _ref.width;
+
+ var points = handles.points; // Find the length and width point pairs by comparing the distances of the points at 0,1 to points at 2,3
+
+ var firstPointPairs = [points[0], points[1]];
+ var secondPointPairs = [points[2], points[3]];
+ var firstPointPairsDistance = Math.sqrt(Math.pow(firstPointPairs[0][0] - firstPointPairs[1][0], 2) + Math.pow(firstPointPairs[0][1] - firstPointPairs[1][1], 2) + Math.pow(firstPointPairs[0][2] - firstPointPairs[1][2], 2));
+ var secondPointPairsDistance = Math.sqrt(Math.pow(secondPointPairs[0][0] - secondPointPairs[1][0], 2) + Math.pow(secondPointPairs[0][1] - secondPointPairs[1][1], 2) + Math.pow(secondPointPairs[0][2] - secondPointPairs[1][2], 2));
+ var shortAxisPoints;
+ var longAxisPoints;
+
+ if (firstPointPairsDistance > secondPointPairsDistance) {
+ shortAxisPoints = firstPointPairs;
+ longAxisPoints = secondPointPairs;
+ } else {
+ shortAxisPoints = secondPointPairs;
+ longAxisPoints = firstPointPairs;
+ }
+
+ var longAxisStartImage = worldToImageCoords(referencedImageId, shortAxisPoints[0]);
+ var longAxisEndImage = worldToImageCoords(referencedImageId, shortAxisPoints[1]);
+ var shortAxisStartImage = worldToImageCoords(referencedImageId, longAxisPoints[0]);
+ var shortAxisEndImage = worldToImageCoords(referencedImageId, longAxisPoints[1]);
+ return {
+ longAxis: {
+ point1: {
+ x: longAxisStartImage[0],
+ y: longAxisStartImage[1]
+ },
+ point2: {
+ x: longAxisEndImage[0],
+ y: longAxisEndImage[1]
+ }
+ },
+ shortAxis: {
+ point1: {
+ x: shortAxisStartImage[0],
+ y: shortAxisStartImage[1]
+ },
+ point2: {
+ x: shortAxisEndImage[0],
+ y: shortAxisEndImage[1]
+ }
+ },
+ longAxisLength: length,
+ shortAxisLength: width,
+ trackingIdentifierTextValue: trackingIdentifierTextValue$4,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return Bidirectional;
+ }();
+
+ Bidirectional.toolType = BIDIRECTIONAL;
+ Bidirectional.utilityToolType = BIDIRECTIONAL;
+ Bidirectional.TID300Representation = Bidirectional$2;
+
+ Bidirectional.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone3DTag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
+ return false;
+ }
+
+ return toolType === BIDIRECTIONAL;
+ };
+
+ MeasurementReport$2.registerTool(Bidirectional);
+
+ var ELLIPTICALROI = "EllipticalROI";
+ var EPSILON = 1e-4;
+ var trackingIdentifierTextValue$3 = "".concat(CORNERSTONE_3D_TAG, ":").concat(ELLIPTICALROI);
+
+ var EllipticalROI = /*#__PURE__*/function () {
+ function EllipticalROI() {
+ _classCallCheck(this, EllipticalROI);
+ }
+
+ _createClass(EllipticalROI, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
+ var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, EllipticalROI.toolType),
+ defaultState = _MeasurementReport$ge.defaultState,
+ NUMGroup = _MeasurementReport$ge.NUMGroup,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
+
+ var referencedImageId = defaultState.annotation.metadata.referencedImageId;
+ var GraphicData = SCOORDGroup.GraphicData; // GraphicData is ordered as [majorAxisStartX, majorAxisStartY, majorAxisEndX, majorAxisEndY, minorAxisStartX, minorAxisStartY, minorAxisEndX, minorAxisEndY]
+ // But Cornerstone3D points are ordered as top, bottom, left, right for the
+ // ellipse so we need to identify if the majorAxis is horizontal or vertical
+ // in the image plane and then choose the correct points to use for the ellipse.
+
+ var pointsWorld = [];
+
+ for (var i = 0; i < GraphicData.length; i += 2) {
+ var worldPos = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
+ pointsWorld.push(worldPos);
+ }
+
+ var majorAxisStart = fromValues.apply(vec3, _toConsumableArray(pointsWorld[0]));
+ var majorAxisEnd = fromValues.apply(vec3, _toConsumableArray(pointsWorld[1]));
+ var minorAxisStart = fromValues.apply(vec3, _toConsumableArray(pointsWorld[2]));
+ var minorAxisEnd = fromValues.apply(vec3, _toConsumableArray(pointsWorld[3]));
+ var majorAxisVec = create();
+ sub(majorAxisVec, majorAxisEnd, majorAxisStart); // normalize majorAxisVec to avoid scaling issues
+
+ normalize$1(majorAxisVec, majorAxisVec);
+ var minorAxisVec = create();
+ sub(minorAxisVec, minorAxisEnd, minorAxisStart);
+ normalize$1(minorAxisVec, minorAxisVec);
+ var imagePlaneModule = metadata.get("imagePlaneModule", referencedImageId);
+
+ if (!imagePlaneModule) {
+ throw new Error("imageId does not have imagePlaneModule metadata");
+ }
+
+ var columnCosines = imagePlaneModule.columnCosines; // find which axis is parallel to the columnCosines
+
+ var columnCosinesVec = fromValues.apply(vec3, _toConsumableArray(columnCosines));
+ var projectedMajorAxisOnColVec = dot(columnCosinesVec, majorAxisVec);
+ var projectedMinorAxisOnColVec = dot(columnCosinesVec, minorAxisVec);
+ var absoluteOfMajorDotProduct = Math.abs(projectedMajorAxisOnColVec);
+ var absoluteOfMinorDotProduct = Math.abs(projectedMinorAxisOnColVec);
+ var ellipsePoints = [];
+
+ if (Math.abs(absoluteOfMajorDotProduct - 1) < EPSILON) {
+ ellipsePoints = [pointsWorld[0], pointsWorld[1], pointsWorld[2], pointsWorld[3]];
+ } else if (Math.abs(absoluteOfMinorDotProduct - 1) < EPSILON) {
+ ellipsePoints = [pointsWorld[2], pointsWorld[3], pointsWorld[0], pointsWorld[1]];
+ } else {
+ console.warn("OBLIQUE ELLIPSE NOT YET SUPPORTED");
+ }
+
+ var state = defaultState;
+ state.annotation.data = {
+ handles: {
+ points: _toConsumableArray(ellipsePoints),
+ activeHandleIndex: 0,
+ textBox: {
+ hasMoved: false
+ }
+ },
+ cachedStats: _defineProperty({}, "imageId:".concat(referencedImageId), {
+ area: NUMGroup ? NUMGroup.MeasuredValueSequence.NumericValue : 0
+ }),
+ frameNumber: ReferencedFrameNumber
+ };
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
+ var data = tool.data,
+ finding = tool.finding,
+ findingSites = tool.findingSites,
+ metadata = tool.metadata;
+ var _data$cachedStats = data.cachedStats,
+ cachedStats = _data$cachedStats === void 0 ? {} : _data$cachedStats,
+ handles = data.handles;
+ var referencedImageId = metadata.referencedImageId;
+
+ if (!referencedImageId) {
+ throw new Error("EllipticalROI.getTID300RepresentationArguments: referencedImageId is not defined");
+ }
+
+ var top = worldToImageCoords(referencedImageId, handles.points[0]);
+ var bottom = worldToImageCoords(referencedImageId, handles.points[1]);
+ var left = worldToImageCoords(referencedImageId, handles.points[2]);
+ var right = worldToImageCoords(referencedImageId, handles.points[3]); // find the major axis and minor axis
+
+ var topBottomLength = Math.abs(top[1] - bottom[1]);
+ var leftRightLength = Math.abs(left[0] - right[0]);
+ var points = [];
+
+ if (topBottomLength > leftRightLength) {
+ // major axis is bottom to top
+ points.push({
+ x: top[0],
+ y: top[1]
+ });
+ points.push({
+ x: bottom[0],
+ y: bottom[1]
+ }); // minor axis is left to right
+
+ points.push({
+ x: left[0],
+ y: left[1]
+ });
+ points.push({
+ x: right[0],
+ y: right[1]
+ });
+ } else {
+ // major axis is left to right
+ points.push({
+ x: left[0],
+ y: left[1]
+ });
+ points.push({
+ x: right[0],
+ y: right[1]
+ }); // minor axis is bottom to top
+
+ points.push({
+ x: top[0],
+ y: top[1]
+ });
+ points.push({
+ x: bottom[0],
+ y: bottom[1]
+ });
+ }
+
+ var _ref = cachedStats["imageId:".concat(referencedImageId)] || {},
+ area = _ref.area;
+
+ return {
+ area: area,
+ points: points,
+ trackingIdentifierTextValue: trackingIdentifierTextValue$3,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return EllipticalROI;
+ }();
+
+ EllipticalROI.toolType = ELLIPTICALROI;
+ EllipticalROI.utilityToolType = ELLIPTICALROI;
+ EllipticalROI.TID300Representation = Ellipse$1;
+
+ EllipticalROI.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone3DTag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
+ return false;
+ } // The following is needed since the new cornerstone3D has changed
+ // the EllipticalRoi toolName (which was in the old cornerstone) to EllipticalROI
+
+
+ return toolType.toLowerCase() === ELLIPTICALROI.toLowerCase();
+ };
+
+ MeasurementReport$2.registerTool(EllipticalROI);
+
+ var ARROW_ANNOTATE = "ArrowAnnotate";
+ var trackingIdentifierTextValue$2 = "".concat(CORNERSTONE_3D_TAG, ":").concat(ARROW_ANNOTATE);
+ var codeValues = CodingScheme.codeValues,
+ CodingSchemeDesignator = CodingScheme.CodingSchemeDesignator;
+
+ var ArrowAnnotate = /*#__PURE__*/function () {
+ function ArrowAnnotate() {
+ _classCallCheck(this, ArrowAnnotate);
+ }
+
+ _createClass(ArrowAnnotate, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
+ var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, ArrowAnnotate.toolType),
+ defaultState = _MeasurementReport$ge.defaultState,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
+
+ var referencedImageId = defaultState.annotation.metadata.referencedImageId;
+ var text = defaultState.annotation.metadata.label;
+ var GraphicData = SCOORDGroup.GraphicData;
+ var worldCoords = [];
+
+ for (var i = 0; i < GraphicData.length; i += 2) {
+ var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
+ worldCoords.push(point);
+ } // Since the arrowAnnotate measurement is just a point, to generate the tool state
+ // we derive the second point based on the image size relative to the first point.
+
+
+ if (worldCoords.length === 1) {
+ var imagePixelModule = metadata.get("imagePixelModule", referencedImageId);
+ var xOffset = 10;
+ var yOffset = 10;
+
+ if (imagePixelModule) {
+ var columns = imagePixelModule.columns,
+ rows = imagePixelModule.rows;
+ xOffset = columns / 10;
+ yOffset = rows / 10;
+ }
+
+ var secondPoint = imageToWorldCoords(referencedImageId, [GraphicData[0] + xOffset, GraphicData[1] + yOffset]);
+ worldCoords.push(secondPoint);
+ }
+
+ var state = defaultState;
+ state.annotation.data = {
+ text: text,
+ handles: {
+ arrowFirst: true,
+ points: [worldCoords[0], worldCoords[1]],
+ activeHandleIndex: 0,
+ textBox: {
+ hasMoved: false
+ }
+ },
+ frameNumber: ReferencedFrameNumber
+ };
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
+ var data = tool.data,
+ metadata = tool.metadata;
+ var finding = tool.finding,
+ findingSites = tool.findingSites;
+ var referencedImageId = metadata.referencedImageId;
+
+ if (!referencedImageId) {
+ throw new Error("ArrowAnnotate.getTID300RepresentationArguments: referencedImageId is not defined");
+ }
+
+ var _data$handles = data.handles,
+ points = _data$handles.points,
+ arrowFirst = _data$handles.arrowFirst;
+ var point;
+
+ if (arrowFirst) {
+ point = points[0];
+ } else {
+ point = points[1];
+ }
+
+ var pointImage = worldToImageCoords(referencedImageId, point);
+ var TID300RepresentationArguments = {
+ points: [{
+ x: pointImage[0],
+ y: pointImage[1]
+ }],
+ trackingIdentifierTextValue: trackingIdentifierTextValue$2,
+ findingSites: findingSites || []
+ }; // If freetext finding isn't present, add it from the tool text.
+
+ if (!finding || finding.CodeValue !== codeValues.CORNERSTONEFREETEXT) {
+ finding = {
+ CodeValue: codeValues.CORNERSTONEFREETEXT,
+ CodingSchemeDesignator: CodingSchemeDesignator,
+ CodeMeaning: data.text
+ };
+ }
+
+ TID300RepresentationArguments.finding = finding;
+ return TID300RepresentationArguments;
+ }
+ }]);
+
+ return ArrowAnnotate;
+ }();
+
+ ArrowAnnotate.toolType = ARROW_ANNOTATE;
+ ArrowAnnotate.utilityToolType = ARROW_ANNOTATE;
+ ArrowAnnotate.TID300Representation = Point$1;
+
+ ArrowAnnotate.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone3DTag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
+ return false;
+ }
+
+ return toolType === ARROW_ANNOTATE;
+ };
+
+ MeasurementReport$2.registerTool(ArrowAnnotate);
+
+ var PROBE = "Probe";
+ var trackingIdentifierTextValue$1 = "".concat(CORNERSTONE_3D_TAG, ":").concat(PROBE);
+
+ var Probe = /*#__PURE__*/function () {
+ function Probe() {
+ _classCallCheck(this, Probe);
+ }
+
+ _createClass(Probe, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
+ var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, Probe.toolType),
+ defaultState = _MeasurementReport$ge.defaultState,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
+
+ var referencedImageId = defaultState.annotation.metadata.referencedImageId;
+ var GraphicData = SCOORDGroup.GraphicData;
+ var worldCoords = [];
+
+ for (var i = 0; i < GraphicData.length; i += 2) {
+ var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
+ worldCoords.push(point);
+ }
+
+ var state = defaultState;
+ state.annotation.data = {
+ handles: {
+ points: worldCoords,
+ activeHandleIndex: null,
+ textBox: {
+ hasMoved: false
+ }
+ },
+ frameNumber: ReferencedFrameNumber
+ };
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
+ var data = tool.data,
+ metadata = tool.metadata;
+ var finding = tool.finding,
+ findingSites = tool.findingSites;
+ var referencedImageId = metadata.referencedImageId;
+
+ if (!referencedImageId) {
+ throw new Error("Probe.getTID300RepresentationArguments: referencedImageId is not defined");
+ }
+
+ var points = data.handles.points;
+ var pointsImage = points.map(function (point) {
+ var pointImage = worldToImageCoords(referencedImageId, point);
+ return {
+ x: pointImage[0],
+ y: pointImage[1]
+ };
+ });
+ var TID300RepresentationArguments = {
+ points: pointsImage,
+ trackingIdentifierTextValue: trackingIdentifierTextValue$1,
+ findingSites: findingSites || [],
+ finding: finding
+ };
+ return TID300RepresentationArguments;
+ }
+ }]);
+
+ return Probe;
+ }();
+
+ Probe.toolType = PROBE;
+ Probe.utilityToolType = PROBE;
+ Probe.TID300Representation = Point$1;
+
+ Probe.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone3DTag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
+ return false;
+ }
+
+ return toolType === PROBE;
+ };
+
+ MeasurementReport$2.registerTool(Probe);
+
+ var PLANARFREEHANDROI = "PlanarFreehandROI";
+ var trackingIdentifierTextValue = "".concat(CORNERSTONE_3D_TAG, ":").concat(PLANARFREEHANDROI);
+ var closedContourThreshold = 1e-5;
+
+ var PlanarFreehandROI = /*#__PURE__*/function () {
+ function PlanarFreehandROI() {
+ _classCallCheck(this, PlanarFreehandROI);
+ }
+
+ _createClass(PlanarFreehandROI, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, imageToWorldCoords, metadata) {
+ var _MeasurementReport$ge = MeasurementReport$2.getSetupMeasurementData(MeasurementGroup, sopInstanceUIDToImageIdMap, metadata, PlanarFreehandROI.toolType),
+ defaultState = _MeasurementReport$ge.defaultState,
+ SCOORDGroup = _MeasurementReport$ge.SCOORDGroup,
+ ReferencedFrameNumber = _MeasurementReport$ge.ReferencedFrameNumber;
+
+ var referencedImageId = defaultState.annotation.metadata.referencedImageId;
+ var GraphicData = SCOORDGroup.GraphicData;
+ var worldCoords = [];
+
+ for (var i = 0; i < GraphicData.length; i += 2) {
+ var point = imageToWorldCoords(referencedImageId, [GraphicData[i], GraphicData[i + 1]]);
+ worldCoords.push(point);
+ }
+
+ var distanceBetweenFirstAndLastPoint = distance(worldCoords[worldCoords.length - 1], worldCoords[0]);
+ var isOpenContour = true; // If the contour is closed, this should have been encoded as exactly the same point, so check for a very small difference.
+
+ if (distanceBetweenFirstAndLastPoint < closedContourThreshold) {
+ worldCoords.pop(); // Remove the last element which is duplicated.
+
+ isOpenContour = false;
+ }
+
+ var points = [];
+
+ if (isOpenContour) {
+ points.push(worldCoords[0], worldCoords[worldCoords.length - 1]);
+ }
+
+ var state = defaultState;
+ state.annotation.data = {
+ polyline: worldCoords,
+ isOpenContour: isOpenContour,
+ handles: {
+ points: points,
+ activeHandleIndex: null,
+ textBox: {
+ hasMoved: false
+ }
+ },
+ frameNumber: ReferencedFrameNumber
+ };
+ return state;
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(tool, worldToImageCoords) {
+ var data = tool.data,
+ finding = tool.finding,
+ findingSites = tool.findingSites,
+ metadata = tool.metadata;
+ var isOpenContour = data.isOpenContour,
+ polyline = data.polyline;
+ var referencedImageId = metadata.referencedImageId;
+
+ if (!referencedImageId) {
+ throw new Error("PlanarFreehandROI.getTID300RepresentationArguments: referencedImageId is not defined");
+ }
+
+ var points = polyline.map(function (worldPos) {
+ return worldToImageCoords(referencedImageId, worldPos);
+ });
+
+ if (!isOpenContour) {
+ // Need to repeat the first point at the end of to have an explicitly closed contour.
+ var firstPoint = points[0]; // Explicitly expand to avoid ciruclar references.
+
+ points.push([firstPoint[0], firstPoint[1]]);
+ }
+
+ var area = 0; // TODO -> The tool doesn't have these stats yet.
+
+ var perimeter = 0;
+ return {
+ points: points,
+ area: area,
+ perimeter: perimeter,
+ trackingIdentifierTextValue: trackingIdentifierTextValue,
+ finding: finding,
+ findingSites: findingSites || []
+ };
+ }
+ }]);
+
+ return PlanarFreehandROI;
+ }();
+
+ PlanarFreehandROI.toolType = PLANARFREEHANDROI;
+ PlanarFreehandROI.utilityToolType = PLANARFREEHANDROI;
+ PlanarFreehandROI.TID300Representation = Polyline$1;
+
+ PlanarFreehandROI.isValidCornerstoneTrackingIdentifier = function (TrackingIdentifier) {
+ if (!TrackingIdentifier.includes(":")) {
+ return false;
+ }
+
+ var _TrackingIdentifier$s = TrackingIdentifier.split(":"),
+ _TrackingIdentifier$s2 = _slicedToArray(_TrackingIdentifier$s, 2),
+ cornerstone3DTag = _TrackingIdentifier$s2[0],
+ toolType = _TrackingIdentifier$s2[1];
+
+ if (cornerstone3DTag !== CORNERSTONE_3D_TAG) {
+ return false;
+ }
+
+ return toolType === PLANARFREEHANDROI;
+ };
+
+ MeasurementReport$2.registerTool(PlanarFreehandROI);
+
+ var Cornerstone3D = {
+ Length: Length,
+ Bidirectional: Bidirectional,
+ EllipticalROI: EllipticalROI,
+ ArrowAnnotate: ArrowAnnotate,
+ Probe: Probe,
+ PlanarFreehandROI: PlanarFreehandROI,
+ MeasurementReport: MeasurementReport$2,
+ CodeScheme: CodingScheme,
+ CORNERSTONE_3D_TAG: CORNERSTONE_3D_TAG
+ };
+
+ // Should we move it to Colors.js
+
+ function dicomlab2RGBA(cielab) {
+ var rgba = Colors.dicomlab2RGB(cielab).map(function (x) {
+ return Math.round(x * 255);
+ });
+ rgba.push(255);
+ return rgba;
+ } // TODO: Copied these functions in from VTK Math so we don't need a dependency.
+ // I guess we should put them somewhere
+ // https://github.com/Kitware/vtk-js/blob/master/Sources/Common/Core/Math/index.js
+
+
+ function cross(x, y, out) {
+ var Zx = x[1] * y[2] - x[2] * y[1];
+ var Zy = x[2] * y[0] - x[0] * y[2];
+ var Zz = x[0] * y[1] - x[1] * y[0];
+ out[0] = Zx;
+ out[1] = Zy;
+ out[2] = Zz;
+ }
+
+ function norm(x) {
+ var n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 3;
+
+ switch (n) {
+ case 1:
+ return Math.abs(x);
+
+ case 2:
+ return Math.sqrt(x[0] * x[0] + x[1] * x[1]);
+
+ case 3:
+ return Math.sqrt(x[0] * x[0] + x[1] * x[1] + x[2] * x[2]);
+
+ default:
+ {
+ var sum = 0;
+
+ for (var i = 0; i < n; i++) {
+ sum += x[i] * x[i];
+ }
+
+ return Math.sqrt(sum);
+ }
+ }
+ }
+
+ function normalize(x) {
+ var den = norm(x);
+
+ if (den !== 0.0) {
+ x[0] /= den;
+ x[1] /= den;
+ x[2] /= den;
+ }
+
+ return den;
+ }
+
+ function subtract(a, b, out) {
+ out[0] = a[0] - b[0];
+ out[1] = a[1] - b[1];
+ out[2] = a[2] - b[2];
+ } // TODO: This is a useful utility on its own. We should move it somewhere?
+ // dcmjs.adapters.vtk.Multiframe? dcmjs.utils?
+
+
+ function geometryFromFunctionalGroups(dataset, PerFrameFunctionalGroups) {
+ var geometry = {};
+ var pixelMeasures = dataset.SharedFunctionalGroupsSequence.PixelMeasuresSequence;
+ var planeOrientation = dataset.SharedFunctionalGroupsSequence.PlaneOrientationSequence; // Find the origin of the volume from the PerFrameFunctionalGroups' ImagePositionPatient values
+ //
+ // TODO: assumes sorted frames. This should read the ImagePositionPatient from each frame and
+ // sort them to obtain the first and last position along the acquisition axis.
+
+ var firstFunctionalGroup = PerFrameFunctionalGroups[0];
+ var lastFunctionalGroup = PerFrameFunctionalGroups[PerFrameFunctionalGroups.length - 1];
+ var firstPosition = firstFunctionalGroup.PlanePositionSequence.ImagePositionPatient.map(Number);
+ var lastPosition = lastFunctionalGroup.PlanePositionSequence.ImagePositionPatient.map(Number);
+ geometry.origin = firstPosition; // NB: DICOM PixelSpacing is defined as Row then Column,
+ // unlike ImageOrientationPatient
+
+ geometry.spacing = [pixelMeasures.PixelSpacing[1], pixelMeasures.PixelSpacing[0], pixelMeasures.SpacingBetweenSlices].map(Number);
+ geometry.dimensions = [dataset.Columns, dataset.Rows, PerFrameFunctionalGroups.length].map(Number);
+ var orientation = planeOrientation.ImageOrientationPatient.map(Number);
+ var columnStepToPatient = orientation.slice(0, 3);
+ var rowStepToPatient = orientation.slice(3, 6);
+ geometry.planeNormal = [];
+ cross(columnStepToPatient, rowStepToPatient, geometry.planeNormal);
+ geometry.sliceStep = [];
+ subtract(lastPosition, firstPosition, geometry.sliceStep);
+ normalize(geometry.sliceStep);
+ geometry.direction = columnStepToPatient.concat(rowStepToPatient).concat(geometry.sliceStep);
+ return geometry;
+ }
+
+ var Segmentation = /*#__PURE__*/function () {
+ function Segmentation() {
+ _classCallCheck(this, Segmentation);
+ }
+ /**
+ * Produces an array of Segments from an input DICOM Segmentation dataset
+ *
+ * Segments are returned with Geometry values that can be used to create
+ * VTK Image Data objects.
+ *
+ * @example Example usage to create VTK Volume actors from each segment:
+ *
+ * const actors = [];
+ * const segments = generateToolState(dataset);
+ * segments.forEach(segment => {
+ * // now make actors using the segment information
+ * const scalarArray = vtk.Common.Core.vtkDataArray.newInstance({
+ * name: "Scalars",
+ * numberOfComponents: 1,
+ * values: segment.pixelData,
+ * });
+ *
+ * const imageData = vtk.Common.DataModel.vtkImageData.newInstance();
+ * imageData.getPointData().setScalars(scalarArray);
+ * imageData.setDimensions(geometry.dimensions);
+ * imageData.setSpacing(geometry.spacing);
+ * imageData.setOrigin(geometry.origin);
+ * imageData.setDirection(geometry.direction);
+ *
+ * const mapper = vtk.Rendering.Core.vtkVolumeMapper.newInstance();
+ * mapper.setInputData(imageData);
+ * mapper.setSampleDistance(2.);
+ *
+ * const actor = vtk.Rendering.Core.vtkVolume.newInstance();
+ * actor.setMapper(mapper);
+ *
+ * actors.push(actor);
+ * });
+ *
+ * @param dataset
+ * @return {{}}
+ */
+
+
+ _createClass(Segmentation, null, [{
+ key: "generateSegments",
+ value: function generateSegments(dataset) {
+ if (dataset.SegmentSequence.constructor.name !== "Array") {
+ dataset.SegmentSequence = [dataset.SegmentSequence];
+ }
+
+ dataset.SegmentSequence.forEach(function (segment) {
+ // TODO: other interesting fields could be extracted from the segment
+ // TODO: Read SegmentsOverlay field
+ // http://dicom.nema.org/medical/dicom/current/output/chtml/part03/sect_C.8.20.2.html
+ // TODO: Looks like vtkColor only wants RGB in 0-1 values.
+ // Why was this example converting to RGBA with 0-255 values?
+ var color = dicomlab2RGBA(segment.RecommendedDisplayCIELabValue);
+ segments[segment.SegmentNumber] = {
+ color: color,
+ functionalGroups: [],
+ offset: null,
+ size: null,
+ pixelData: null
+ };
+ }); // make a list of functional groups per segment
+
+ dataset.PerFrameFunctionalGroupsSequence.forEach(function (functionalGroup) {
+ var segmentNumber = functionalGroup.SegmentIdentificationSequence.ReferencedSegmentNumber;
+ segments[segmentNumber].functionalGroups.push(functionalGroup);
+ }); // determine per-segment index into the pixel data
+ // TODO: only handles one-bit-per pixel
+
+ var frameSize = Math.ceil(dataset.Rows * dataset.Columns / 8);
+ var nextOffset = 0;
+ Object.keys(segments).forEach(function (segmentNumber) {
+ var segment = segments[segmentNumber];
+ segment.numberOfFrames = segment.functionalGroups.length;
+ segment.size = segment.numberOfFrames * frameSize;
+ segment.offset = nextOffset;
+ nextOffset = segment.offset + segment.size;
+ var packedSegment = dataset.PixelData.slice(segment.offset, nextOffset);
+ segment.pixelData = BitArray.unpack(packedSegment);
+ var geometry = geometryFromFunctionalGroups(dataset, segment.functionalGroups);
+ segment.geometry = geometry;
+ });
+ return segments;
+ }
+ }]);
+
+ return Segmentation;
+ }();
+
+ var VTKjs = {
+ Segmentation: Segmentation
+ };
+
+ function getTID300ContentItem(tool, toolClass) {
+ var args = toolClass.getTID300RepresentationArguments(tool);
+ args.use3DSpatialCoordinates = true;
+ return new toolClass.TID300Representation(args);
+ }
+
+ function getMeasurementGroup(graphicType, measurements) {
+ var toolClass = MeasurementReport$1.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE[graphicType]; // Loop through the array of tool instances
+ // for this tool
+
+ var Measurements = measurements.map(function (tool) {
+ return getTID300ContentItem(tool, toolClass);
+ });
+ return new TID1501MeasurementGroup(Measurements);
+ }
+
+ var MeasurementReport$1 = /*#__PURE__*/function () {
+ function MeasurementReport() {
+ _classCallCheck(this, MeasurementReport);
+ }
+
+ _createClass(MeasurementReport, null, [{
+ key: "generateReport",
+ value: function generateReport(rois, metadataProvider, options) {
+ // Input is all ROIS returned via viewer.getALLROIs()
+ // let report = MeasurementReport.generateReport(viewer.getAllROIs());
+ // Sort and split into arrays by scoord3d.graphicType
+ var measurementsByGraphicType = {};
+ rois.forEach(function (roi) {
+ var graphicType = roi.scoord3d.graphicType;
+
+ if (graphicType !== "POINT") {
+ // adding z coord as 0
+ roi.scoord3d.graphicData.map(function (coord) {
+ return coord.push(0);
+ });
+ }
+
+ if (!measurementsByGraphicType[graphicType]) {
+ measurementsByGraphicType[graphicType] = [];
+ }
+
+ measurementsByGraphicType[graphicType].push(roi.scoord3d);
+ }); // For each measurement, get the utility arguments using the adapter, and create TID300 Measurement
+ // Group these TID300 Measurements into a TID1501 Measurement Group (for each graphicType)
+ // Use TID1500MeasurementReport utility to create a single report from the created groups
+ // return report;
+
+ var allMeasurementGroups = [];
+ var measurementGroups = [];
+ Object.keys(measurementsByGraphicType).forEach(function (graphicType) {
+ var measurements = measurementsByGraphicType[graphicType];
+ var group = getMeasurementGroup(graphicType, measurements);
+
+ if (group) {
+ measurementGroups.push(group);
+ }
+
+ allMeasurementGroups = allMeasurementGroups.concat(measurementGroups);
+ });
+
+ var _MeasurementReport = new TID1500MeasurementReport({
+ TID1501MeasurementGroups: allMeasurementGroups
+ }, options); // TODO: what is the correct metaheader
+ // http://dicom.nema.org/medical/Dicom/current/output/chtml/part10/chapter_7.html
+ // TODO: move meta creation to happen in derivations.js
+
+
+ var fileMetaInformationVersionArray = new Uint8Array(2);
+ fileMetaInformationVersionArray[1] = 1; // TODO: Find out how to reference the data from dicom-microscopy-viewer
+
+ var studyInstanceUID = "12.4";
+ var seriesInstanceUID = "12.4";
+ var derivationSourceDataset = {
+ StudyInstanceUID: studyInstanceUID,
+ SeriesInstanceUID: seriesInstanceUID //SOPInstanceUID: sopInstanceUID, // TODO: Necessary?
+ //SOPClassUID: sopClassUID,
+
+ };
+ var _meta = {
+ FileMetaInformationVersion: {
+ Value: [fileMetaInformationVersionArray.buffer],
+ vr: "OB"
+ },
+ //MediaStorageSOPClassUID
+ //MediaStorageSOPInstanceUID: sopCommonModule.sopInstanceUID,
+ TransferSyntaxUID: {
+ Value: ["1.2.840.10008.1.2.1"],
+ vr: "UI"
+ },
+ ImplementationClassUID: {
+ Value: [DicomMetaDictionary.uid()],
+ // TODO: could be git hash or other valid id
+ vr: "UI"
+ },
+ ImplementationVersionName: {
+ Value: ["dcmjs"],
+ vr: "SH"
+ }
+ };
+ var _vrMap = {
+ PixelData: "OW"
+ };
+ derivationSourceDataset._meta = _meta;
+ derivationSourceDataset._vrMap = _vrMap;
+ var report = new StructuredReport([derivationSourceDataset]);
+
+ var contentItem = _MeasurementReport.contentItem(derivationSourceDataset); // Merge the derived dataset with the content from the Measurement Report
+
+
+ report.dataset = Object.assign(report.dataset, contentItem);
+ report.dataset._meta = _meta;
+ return report;
+ } //@ToDo
+
+ }, {
+ key: "generateToolState",
+ value: function generateToolState(dataset) {
+ // For now, bail out if the dataset is not a TID1500 SR with length measurements
+ if (dataset.ContentTemplateSequence.TemplateIdentifier !== "1500") {
+ throw new Error("This package can currently only interpret DICOM SR TID 1500");
+ }
+
+ var REPORT = "Imaging Measurements";
+ var GROUP = "Measurement Group"; // Split the imagingMeasurementContent into measurement groups by their code meaning
+
+ var imagingMeasurementContent = toArray(dataset.ContentSequence).find(codeMeaningEquals(REPORT)); // Retrieve the Measurements themselves
+
+ var measurementGroups = toArray(imagingMeasurementContent.ContentSequence).filter(codeMeaningEquals(GROUP)); // // For each of the supported measurement types, compute the measurement data
+
+ var measurementData = {};
+ measurementGroups.forEach(function (mg) {
+ Object.keys(MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE).forEach(function (measurementType) {
+ // Find supported measurement types in the Structured Report
+ var measurementGroupContentSequence = toArray(mg.ContentSequence);
+ var measurementContent = measurementGroupContentSequence.filter(graphicTypeEquals(measurementType.toUpperCase()));
+
+ if (!measurementContent || measurementContent.length === 0) {
+ return;
+ }
+
+ var toolClass = MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE[measurementType];
+ var toolType = toolClass.toolType;
+
+ if (!toolClass.getMeasurementData) {
+ throw new Error("MICROSCOPY Tool Adapters must define a getMeasurementData static method.");
+ }
+
+ if (!measurementData[toolType]) {
+ measurementData[toolType] = [];
+ }
+
+ measurementData[toolType] = [].concat(_toConsumableArray(measurementData[toolType]), _toConsumableArray(toolClass.getMeasurementData(measurementContent)));
+ });
+ });
+ return measurementData;
+ }
+ }, {
+ key: "registerTool",
+ value: function registerTool(toolClass) {
+ MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE[toolClass.utilityToolType] = toolClass;
+ MeasurementReport.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE[toolClass.graphicType] = toolClass;
+ MeasurementReport.MEASUREMENT_BY_TOOLTYPE[toolClass.graphicType] = toolClass.utilityToolType;
+ }
+ }]);
+
+ return MeasurementReport;
+ }();
+ MeasurementReport$1.MEASUREMENT_BY_TOOLTYPE = {};
+ MeasurementReport$1.MICROSCOPY_TOOL_CLASSES_BY_UTILITY_TYPE = {};
+ MeasurementReport$1.MICROSCOPY_TOOL_CLASSES_BY_TOOL_TYPE = {};
+
+ var Polyline = /*#__PURE__*/function () {
+ function Polyline() {
+ _classCallCheck(this, Polyline);
+ }
+
+ _createClass(Polyline, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(measurementContent) {
+ // removing duplication and Getting only the graphicData information
+ var measurement = measurementContent.map(function (item) {
+ return item.GraphicData;
+ }).filter(function (s) {
+ return function (a) {
+ return function (j) {
+ return !s.has(j) && s.add(j);
+ }(JSON.stringify(a));
+ };
+ }(new Set())); // Chunking the array into size of three
+
+ return measurement.map(function (measurement) {
+ return measurement.reduce(function (all, one, i) {
+ var ch = Math.floor(i / 3);
+ all[ch] = [].concat(all[ch] || [], one);
+ return all;
+ }, []);
+ });
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(scoord3d) {
+ if (scoord3d.graphicType !== "POLYLINE") {
+ throw new Error("We expected a POLYLINE graphicType");
+ }
+
+ var points = scoord3d.graphicData;
+ var lengths = 1;
+ return {
+ points: points,
+ lengths: lengths
+ };
+ }
+ }]);
+
+ return Polyline;
+ }();
+
+ Polyline.graphicType = "POLYLINE";
+ Polyline.toolType = "Polyline";
+ Polyline.utilityToolType = "Polyline";
+ Polyline.TID300Representation = Polyline$1;
+ MeasurementReport$1.registerTool(Polyline);
+
+ /**
+ * Expand an array of points stored as objects into
+ * a flattened array of points
+ *
+ * @param points [{x: 0, y: 1}, {x: 1, y: 2}] or [{x: 0, y: 1, z: 0}, {x: 1, y: 2, z: 0}]
+ * @return {Array} [point1x, point1y, point2x, point2y] or [point1x, point1y, point1z, point2x, point2y, point2z]
+ */
+
+ function expandPoints(points) {
+ var allPoints = [];
+ points.forEach(function (point) {
+ allPoints.push(point[0]);
+ allPoints.push(point[1]);
+
+ if (point[2] !== undefined) {
+ allPoints.push(point[2]);
+ }
+ });
+ return allPoints;
+ }
+
+ var Polygon$1 = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(Polygon, _TID300Measurement);
+
+ var _super = _createSuper(Polygon);
+
+ function Polygon() {
+ _classCallCheck(this, Polygon);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Polygon, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ points = _this$props.points,
+ perimeter = _this$props.perimeter,
+ _this$props$unit = _this$props.unit,
+ unit = _this$props$unit === void 0 ? "mm" : _this$props$unit,
+ area = _this$props.area,
+ areaUnit = _this$props.areaUnit,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence,
+ _this$props$use3DSpat = _this$props.use3DSpatialCoordinates,
+ use3DSpatialCoordinates = _this$props$use3DSpat === void 0 ? false : _this$props$use3DSpat;
+ var GraphicData = expandPoints(points);
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-A197",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Perimeter"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(unit),
+ NumericValue: perimeter
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
+ GraphicType: "POLYGON",
+ GraphicData: GraphicData,
+ ContentSequence: use3DSpatialCoordinates ? undefined : {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }, {
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "G-A166",
+ CodingSchemeDesignator: "SRT",
+ CodeMeaning: "Area"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(areaUnit),
+ NumericValue: area
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: use3DSpatialCoordinates ? "SCOORD3D" : "SCOORD",
+ GraphicType: "POLYGON",
+ GraphicData: GraphicData,
+ ContentSequence: use3DSpatialCoordinates ? undefined : {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return Polygon;
+ }(TID300Measurement);
+
+ var Polygon = /*#__PURE__*/function () {
+ function Polygon() {
+ _classCallCheck(this, Polygon);
+ }
+
+ _createClass(Polygon, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(measurementContent) {
+ // removing duplication and Getting only the graphicData information
+ var measurement = measurementContent.map(function (item) {
+ return item.GraphicData;
+ }).filter(function (s) {
+ return function (a) {
+ return function (j) {
+ return !s.has(j) && s.add(j);
+ }(JSON.stringify(a));
+ };
+ }(new Set())); // Chunking the array into size of three
+
+ return measurement.map(function (measurement) {
+ return measurement.reduce(function (all, one, i) {
+ var ch = Math.floor(i / 3);
+ all[ch] = [].concat(all[ch] || [], one);
+ return all;
+ }, []);
+ });
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(scoord3d) {
+ if (scoord3d.graphicType !== "POLYGON") {
+ throw new Error("We expected a POLYGON graphicType");
+ }
+
+ var points = scoord3d.graphicData;
+ var lengths = 1;
+ return {
+ points: points,
+ lengths: lengths
+ };
+ }
+ }]);
+
+ return Polygon;
+ }();
+
+ Polygon.graphicType = "POLYGON";
+ Polygon.toolType = "Polygon";
+ Polygon.utilityToolType = "Polygon";
+ Polygon.TID300Representation = Polygon$1;
+ MeasurementReport$1.registerTool(Polygon);
+
+ var Point = /*#__PURE__*/function () {
+ function Point() {
+ _classCallCheck(this, Point);
+ }
+
+ _createClass(Point, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(measurementContent) {
+ var measurement = measurementContent.map(function (item) {
+ return item.GraphicData;
+ });
+ return measurement.filter(function (s) {
+ return function (a) {
+ return function (j) {
+ return !s.has(j) && s.add(j);
+ }(JSON.stringify(a));
+ };
+ }(new Set()));
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(scoord3d) {
+ if (scoord3d.graphicType !== "POINT") {
+ throw new Error("We expected a POINT graphicType");
+ }
+
+ var points = [scoord3d.graphicData];
+ var lengths = 1;
+ return {
+ points: points,
+ lengths: lengths
+ };
+ }
+ }]);
+
+ return Point;
+ }();
+
+ Point.graphicType = "POINT";
+ Point.toolType = "Point";
+ Point.utilityToolType = "Point";
+ Point.TID300Representation = Point$1;
+ MeasurementReport$1.registerTool(Point);
+
+ var Circle = /*#__PURE__*/function () {
+ function Circle() {
+ _classCallCheck(this, Circle);
+ }
+
+ _createClass(Circle, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(measurementContent) {
+ // removing duplication and Getting only the graphicData information
+ var measurement = measurementContent.map(function (item) {
+ return item.GraphicData;
+ }).filter(function (s) {
+ return function (a) {
+ return function (j) {
+ return !s.has(j) && s.add(j);
+ }(JSON.stringify(a));
+ };
+ }(new Set())); // Chunking the array into size of three
+
+ return measurement.map(function (measurement) {
+ return measurement.reduce(function (all, one, i) {
+ var ch = Math.floor(i / 3);
+ all[ch] = [].concat(all[ch] || [], one);
+ return all;
+ }, []);
+ });
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(scoord3d) {
+ if (scoord3d.graphicType !== "CIRCLE") {
+ throw new Error("We expected a CIRCLE graphicType");
+ }
+
+ var points = scoord3d.graphicData;
+ var lengths = 1;
+ return {
+ points: points,
+ lengths: lengths
+ };
+ }
+ }]);
+
+ return Circle;
+ }();
+
+ Circle.graphicType = "CIRCLE";
+ Circle.toolType = "Circle";
+ Circle.utilityToolType = "Circle";
+ Circle.TID300Representation = Circle$1;
+ MeasurementReport$1.registerTool(Circle);
+
+ var Ellipse = /*#__PURE__*/function () {
+ function Ellipse() {
+ _classCallCheck(this, Ellipse);
+ }
+
+ _createClass(Ellipse, null, [{
+ key: "getMeasurementData",
+ value: function getMeasurementData(measurementContent) {
+ // removing duplication and Getting only the graphicData information
+ var measurement = measurementContent.map(function (item) {
+ return item.GraphicData;
+ }).filter(function (s) {
+ return function (a) {
+ return function (j) {
+ return !s.has(j) && s.add(j);
+ }(JSON.stringify(a));
+ };
+ }(new Set())); // Chunking the array into size of three
+
+ return measurement.map(function (measurement) {
+ return measurement.reduce(function (all, one, i) {
+ var ch = Math.floor(i / 3);
+ all[ch] = [].concat(all[ch] || [], one);
+ return all;
+ }, []);
+ });
+ }
+ }, {
+ key: "getTID300RepresentationArguments",
+ value: function getTID300RepresentationArguments(scoord3d) {
+ if (scoord3d.graphicType !== "Ellipse") {
+ throw new Error("We expected a Ellipse graphicType");
+ }
+
+ var points = scoord3d.graphicData;
+ var lengths = 1;
+ return {
+ points: points,
+ lengths: lengths
+ };
+ }
+ }]);
+
+ return Ellipse;
+ }();
+
+ Ellipse.graphicType = "ELLIPSE";
+ Ellipse.toolType = "Ellipse";
+ Ellipse.utilityToolType = "Ellipse";
+ Ellipse.TID300Representation = Ellipse$1;
+ MeasurementReport$1.registerTool(Ellipse);
+
+ var DICOMMicroscopyViewer = {
+ Polyline: Polyline,
+ Polygon: Polygon,
+ Point: Point,
+ Circle: Circle,
+ Ellipse: Ellipse,
+ MeasurementReport: MeasurementReport$1
+ };
+
+ var adapters = {
+ Cornerstone: Cornerstone,
+ Cornerstone3D: Cornerstone3D,
+ VTKjs: VTKjs,
+ DICOMMicroscopyViewer: DICOMMicroscopyViewer
+ };
+
+ var TID1500 = {
+ TID1500MeasurementReport: TID1500MeasurementReport,
+ TID1501MeasurementGroup: TID1501MeasurementGroup
+ };
+
+ var Calibration = /*#__PURE__*/function (_TID300Measurement) {
+ _inherits(Calibration, _TID300Measurement);
+
+ var _super = _createSuper(Calibration);
+
+ function Calibration() {
+ _classCallCheck(this, Calibration);
+
+ return _super.apply(this, arguments);
+ }
+
+ _createClass(Calibration, [{
+ key: "contentItem",
+ value: function contentItem() {
+ var _this$props = this.props,
+ point1 = _this$props.point1,
+ point2 = _this$props.point2,
+ _this$props$unit = _this$props.unit,
+ unit = _this$props$unit === void 0 ? "mm" : _this$props$unit,
+ distance = _this$props.distance,
+ ReferencedSOPSequence = _this$props.ReferencedSOPSequence;
+ return this.getMeasurement([{
+ RelationshipType: "CONTAINS",
+ ValueType: "NUM",
+ ConceptNameCodeSequence: {
+ CodeValue: "102304005",
+ CodingSchemeDesignator: "SCT",
+ CodeMeaning: "Calibration Ruler"
+ },
+ MeasuredValueSequence: {
+ MeasurementUnitsCodeSequence: unit2CodingValue(unit),
+ NumericValue: distance
+ },
+ ContentSequence: {
+ RelationshipType: "INFERRED FROM",
+ ValueType: "SCOORD",
+ GraphicType: "POLYLINE",
+ GraphicData: [point1.x, point1.y, point2.x, point2.y],
+ ContentSequence: {
+ RelationshipType: "SELECTED FROM",
+ ValueType: "IMAGE",
+ ReferencedSOPSequence: ReferencedSOPSequence
+ }
+ }
+ }]);
+ }
+ }]);
+
+ return Calibration;
+ }(TID300Measurement);
+
+ // - Cornerstone Probe
+ // Note: OHIF currently uses Cornerstone's 'dragProbe'. We need to add the regular Probe tool, which drops a single point.
+ //
+ // Hierarchy
+ // TID 1500 MeasurementReport
+ // --TID 1501 Measurement Group
+ // ---Measurement Group (DCM 125007)
+ // ----TID 300 Measurement
+ // ------SCOORD. Graphic Type: POINT
+ //
+ //
+ // - Cornerstone Ellipse:
+ //
+ // Should specify the Mean Modality Pixel Value measured in whatever units the image is in
+ // Should specify the Standard Deviation Modality Pixel Value measured in whatever units the image is in
+ //
+ //
+ // - Cornerstone Rectangle ROI
+ //
+ // Hierarchy
+ // TID 1500 MeasurementReport
+ // --TID 1501 Measurement Group
+ // ---Measurement Group (DCM 125007)
+ // ----TID 300 Measurement
+ // ------SCOORD. Graphic Type: POLYLINE
+ // ------ Use concept corresponding to Rectangle measurement
+ //
+ // http://dicom.nema.org/medical/dicom/current/output/html/part16.html#sect_TID_4019
+ //
+ // OR
+ // Note: This should be the same as a Freehand ROI, more or less. We add a TID 4019: Algorithm Identification flag to specify that this was created (and should be rehydrated) into a Rectangle ROI.
+ // TODO: Should we use a Derivation instead? http://dicom.nema.org/medical/dicom/current/output/html/part16.html#DCM_121401
+ // Should specify the Area measured in mmˆ2, including the units in UCUM
+ // Should specify the Mean Modality Pixel Value measured in whatever units the image is in
+ // Should specify the Standard Deviation Modality Pixel Value measured in whatever units the image is in
+ //
+ //
+ // - Cornerstone Simple Angle tool
+ //
+ // Hierarchy
+ // TID 1500 MeasurementReport
+ // --TID 1501 Measurement Group
+ // ---Measurement Group (DCM 125007)
+ // ----TID 300 Measurement
+ // ------SCOORD. Graphic Type: POLYLINE
+ // (ftp://dicom.nema.org/MEDICAL/dicom/current/output/chtml/part03/sect_C.10.5.html)
+ // ----TID 300 Measurement
+ // ------SCOORD. Graphic Type: POLYLINE
+ // (ftp://dicom.nema.org/MEDICAL/dicom/current/output/chtml/part03/sect_C.10.5.html)
+ //
+ // ------ Use concept corresponding to Angle measurement
+ //
+ // Two lines specify the angle
+ // Should specify the Angle measured in Degrees, including the units in UCUM
+ //
+
+ var TID300 = {
+ TID300Measurement: TID300Measurement,
+ Point: Point$1,
+ Length: Length$2,
+ CobbAngle: CobbAngle$1,
+ Bidirectional: Bidirectional$2,
+ Polyline: Polyline$1,
+ Polygon: Polygon$1,
+ Ellipse: Ellipse$1,
+ Circle: Circle$1,
+ Calibration: Calibration,
+ unit2CodingValue: unit2CodingValue
+ };
+
+ /**
+ * Converts a Uint8Array to a String.
+ * @param {Uint8Array} array that should be converted
+ * @param {Number} offset array offset in case only subset of array items should be extracted (default: 0)
+ * @param {Number} limit maximum number of array items that should be extracted (defaults to length of array)
+ * @returns {String}
+ */
+ function uint8ArrayToString(arr, offset, limit) {
+ offset = offset || 0;
+ limit = limit || arr.length - offset;
+ var str = "";
+
+ for (var i = offset; i < offset + limit; i++) {
+ str += String.fromCharCode(arr[i]);
+ }
+
+ return str;
+ }
+ /**
+ * Converts a String to a Uint8Array.
+ * @param {String} str string that should be converted
+ * @returns {Uint8Array}
+ */
+
+
+ function stringToUint8Array(str) {
+ var arr = new Uint8Array(str.length);
+
+ for (var i = 0, j = str.length; i < j; i++) {
+ arr[i] = str.charCodeAt(i);
+ }
+
+ return arr;
+ }
+ /**
+ * Identifies the boundary in a multipart/related message header.
+ * @param {String} header message header
+ * @returns {String} boundary
+ */
+
+
+ function identifyBoundary(header) {
+ var parts = header.split("\r\n");
+
+ for (var i = 0; i < parts.length; i++) {
+ if (parts[i].substr(0, 2) === "--") {
+ return parts[i];
+ }
+ }
+ }
+ /**
+ * Checks whether a given token is contained by a message at a given offset.
+ * @param {Uint8Array} message message content
+ * @param {Uint8Array} token substring that should be present
+ * @param {Number} offset offset in message content from where search should start
+ * @returns {Boolean} whether message contains token at offset
+ */
+
+
+ function containsToken(message, token) {
+ var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+
+ if (offset + token.length > message.length) {
+ return false;
+ }
+
+ var index = offset;
+
+ for (var i = 0; i < token.length; i++) {
+ if (token[i] !== message[index++]) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+ /**
+ * Finds a given token in a message at a given offset.
+ * @param {Uint8Array} message message content
+ * @param {Uint8Array} token substring that should be found
+ * @param {Number} offset message body offset from where search should start
+ * @returns {Boolean} whether message has a part at given offset or not
+ */
+
+
+ function findToken(message, token) {
+ var offset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
+ var maxSearchLength = arguments.length > 3 ? arguments[3] : undefined;
+ var searchLength = message.length;
+
+ if (maxSearchLength) {
+ searchLength = Math.min(offset + maxSearchLength, message.length);
+ }
+
+ for (var i = offset; i < searchLength; i++) {
+ // If the first value of the message matches
+ // the first value of the token, check if
+ // this is the full token.
+ if (message[i] === token[0]) {
+ if (containsToken(message, token, i)) {
+ return i;
+ }
+ }
+ }
+
+ return -1;
+ }
+ /**
+ * @typedef {Object} MultipartEncodedData
+ * @property {ArrayBuffer} data The encoded Multipart Data
+ * @property {String} boundary The boundary used to divide pieces of the encoded data
+ */
+
+ /**
+ * Encode one or more DICOM datasets into a single body so it can be
+ * sent using the Multipart Content-Type.
+ *
+ * @param {ArrayBuffer[]} datasets Array containing each file to be encoded in the multipart body, passed as ArrayBuffers.
+ * @param {String} [boundary] Optional string to define a boundary between each part of the multipart body. If this is not specified, a random GUID will be generated.
+ * @return {MultipartEncodedData} The Multipart encoded data returned as an Object. This contains both the data itself, and the boundary string used to divide it.
+ */
+
+
+ function multipartEncode(datasets) {
+ var boundary = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : guid();
+ var contentType = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : "application/dicom";
+ var contentTypeString = "Content-Type: ".concat(contentType);
+ var header = "\r\n--".concat(boundary, "\r\n").concat(contentTypeString, "\r\n\r\n");
+ var footer = "\r\n--".concat(boundary, "--");
+ var headerArray = stringToUint8Array(header);
+ var footerArray = stringToUint8Array(footer);
+ var headerLength = headerArray.length;
+ var footerLength = footerArray.length;
+ var length = 0; // Calculate the total length for the final array
+
+ var contentArrays = datasets.map(function (datasetBuffer) {
+ var contentArray = new Uint8Array(datasetBuffer);
+ var contentLength = contentArray.length;
+ length += headerLength + contentLength + footerLength;
+ return contentArray;
+ }); // Allocate the array
+
+ var multipartArray = new Uint8Array(length); // Set the initial header
+
+ multipartArray.set(headerArray, 0); // Write each dataset into the multipart array
+
+ var position = 0;
+ contentArrays.forEach(function (contentArray) {
+ contentArray.length;
+ multipartArray.set(headerArray, position);
+ multipartArray.set(contentArray, position + headerLength);
+ position += headerLength + contentArray.length;
+ });
+ multipartArray.set(footerArray, position);
+ return {
+ data: multipartArray.buffer,
+ boundary: boundary
+ };
+ }
+ /**
+ * Decode a Multipart encoded ArrayBuffer and return the components as an Array.
+ *
+ * @param {ArrayBuffer} response Data encoded as a 'multipart/related' message
+ * @returns {Array} The content
+ */
+
+
+ function multipartDecode(response) {
+ var message = new Uint8Array(response);
+ /* Set a maximum length to search for the header boundaries, otherwise
+ findToken can run for a long time
+ */
+
+ var maxSearchLength = 1000; // First look for the multipart mime header
+
+ var separator = stringToUint8Array("\r\n\r\n");
+ var headerIndex = findToken(message, separator, 0, maxSearchLength);
+
+ if (headerIndex === -1) {
+ throw new Error("Response message has no multipart mime header");
+ }
+
+ var header = uint8ArrayToString(message, 0, headerIndex);
+ var boundaryString = identifyBoundary(header);
+
+ if (!boundaryString) {
+ throw new Error("Header of response message does not specify boundary");
+ }
+
+ var boundary = stringToUint8Array(boundaryString);
+ boundary.length;
+ var components = [];
+ var offset = headerIndex + separator.length; // Loop until we cannot find any more boundaries
+
+ var boundaryIndex;
+
+ while (boundaryIndex !== -1) {
+ // Search for the next boundary in the message, starting
+ // from the current offset position
+ boundaryIndex = findToken(message, boundary, offset); // If no further boundaries are found, stop here.
+
+ if (boundaryIndex === -1) {
+ break;
+ } // Extract data from response message, excluding "\r\n"
+
+
+ var spacingLength = 2;
+ var length = boundaryIndex - offset - spacingLength;
+ var data = response.slice(offset, offset + length); // Add the data to the array of results
+
+ components.push(data); // find the end of the boundary
+
+ var boundaryEnd = findToken(message, separator, boundaryIndex + 1, maxSearchLength);
+ if (boundaryEnd === -1) break; // Move the offset to the end of the identified boundary
+
+ offset = boundaryEnd + separator.length;
+ }
+
+ return components;
+ }
+ /**
+ * Create a random GUID
+ *
+ * @return {string}
+ */
+
+
+ function guid() {
+ function s4() {
+ return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1);
+ }
+
+ return s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + s4() + s4() + s4();
+ }
+
+ var message = {
+ containsToken: containsToken,
+ findToken: findToken,
+ identifyBoundary: identifyBoundary,
+ uint8ArrayToString: uint8ArrayToString,
+ stringToUint8Array: stringToUint8Array,
+ multipartEncode: multipartEncode,
+ multipartDecode: multipartDecode,
+ guid: guid
+ };
+
+ var utilities = {
+ TID1500: TID1500,
+ TID300: TID300,
+ message: message,
+ addAccessors: addAccessors,
+ orientation: orientation,
+ compression: compression
+ };
+
+ var Code = /*#__PURE__*/function () {
+ function Code(options) {
+ _classCallCheck(this, Code);
+
+ this[_value] = options.value;
+ this[_meaning] = options.meaning;
+ this[_schemeDesignator] = options.schemeDesignator;
+ this[_schemeVersion] = options.schemeVersion || null;
+ }
+
+ _createClass(Code, [{
+ key: "value",
+ get: function get() {
+ return this[_value];
+ }
+ }, {
+ key: "meaning",
+ get: function get() {
+ return this[_meaning];
+ }
+ }, {
+ key: "schemeDesignator",
+ get: function get() {
+ return this[_schemeDesignator];
+ }
+ }, {
+ key: "schemeVersion",
+ get: function get() {
+ return this[_schemeVersion];
+ }
+ }]);
+
+ return Code;
+ }();
+
+ var CodedConcept = /*#__PURE__*/function () {
+ function CodedConcept(options) {
+ _classCallCheck(this, CodedConcept);
+
+ if (options.value === undefined) {
+ throw new Error("Option 'value' is required for CodedConcept.");
+ }
+
+ if (options.meaning === undefined) {
+ throw new Error("Option 'meaning' is required for CodedConcept.");
+ }
+
+ if (options.schemeDesignator === undefined) {
+ throw new Error("Option 'schemeDesignator' is required for CodedConcept.");
+ }
+
+ this.CodeValue = options.value;
+ this.CodeMeaning = options.meaning;
+ this.CodingSchemeDesignator = options.schemeDesignator;
+
+ if ("schemeVersion" in options) {
+ this.CodingSchemeVersion = options.schemeVersion;
+ }
+ }
+
+ _createClass(CodedConcept, [{
+ key: "equals",
+ value: function equals(other) {
+ if (other.value === this.value && other.schemeDesignator === this.schemeDesignator) {
+ if (other.schemeVersion && this.schemeVersion) {
+ return other.schemeVersion === this.schemeVersion;
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+ }, {
+ key: "value",
+ get: function get() {
+ return this.CodeValue;
+ }
+ }, {
+ key: "meaning",
+ get: function get() {
+ return this.CodeMeaning;
+ }
+ }, {
+ key: "schemeDesignator",
+ get: function get() {
+ return this.CodingSchemeDesignator;
+ }
+ }, {
+ key: "schemeVersion",
+ get: function get() {
+ return this.CodingSchemeVersion;
+ }
+ }]);
+
+ return CodedConcept;
+ }();
+
+ var coding = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ Code: Code,
+ CodedConcept: CodedConcept
+ });
+
+ var ValueTypes = {
+ CODE: "CODE",
+ COMPOSITE: "COMPOSITE",
+ CONTAINER: "CONTAINER",
+ DATE: "DATE",
+ DATETIME: "DATETIME",
+ IMAGE: "IMAGE",
+ NUM: "NUM",
+ PNAME: "PNAME",
+ SCOORD: "SCOORD",
+ SCOORD3D: "SCOORD3D",
+ TCOORD: "TCOORD",
+ TEXT: "TEXT",
+ TIME: "TIME",
+ UIDREF: "UIDREF",
+ WAVEFORM: "WAVEFORM"
+ };
+ Object.freeze(ValueTypes);
+ var GraphicTypes = {
+ CIRCLE: "CIRCLE",
+ ELLIPSE: "ELLIPSE",
+ ELLIPSOID: "ELLIPSOID",
+ MULTIPOINT: "MULTIPOINT",
+ POINT: "POINT",
+ POLYLINE: "POLYLINE"
+ };
+ Object.freeze(GraphicTypes);
+ var GraphicTypes3D = {
+ ELLIPSE: "ELLIPSE",
+ ELLIPSOID: "ELLIPSOID",
+ MULTIPOINT: "MULTIPOINT",
+ POINT: "POINT",
+ POLYLINE: "POLYLINE",
+ POLYGON: "POLYGON"
+ };
+ Object.freeze(GraphicTypes3D);
+ var TemporalRangeTypes = {
+ BEGIN: "BEGIN",
+ END: "END",
+ MULTIPOINT: "MULTIPOINT",
+ MULTISEGMENT: "MULTISEGMENT",
+ POINT: "POINT",
+ SEGMENT: "SEGMENT"
+ };
+ Object.freeze(TemporalRangeTypes);
+ var RelationshipTypes = {
+ CONTAINS: "CONTAINS",
+ HAS_ACQ_CONTENT: "HAS ACQ CONTENT",
+ HAS_CONCEPT_MOD: "HAS CONCEPT MOD",
+ HAS_OBS_CONTEXT: "HAS OBS CONTEXT",
+ HAS_PROPERTIES: "HAS PROPERTIES",
+ INFERRED_FROM: "INFERRED FROM",
+ SELECTED_FROM: "SELECTED FROM"
+ };
+ Object.freeze(RelationshipTypes);
+ var PixelOriginInterpretations = {
+ FRAME: "FRAME",
+ VOLUME: "VOLUME"
+ };
+ Object.freeze(RelationshipTypes);
+
+ function isFloat(n) {
+ return n === +n && n !== (n | 0);
+ }
+
+ function zeroPad(value) {
+ return (value > 9 ? "" : "0") + value;
+ }
+
+ function TM(date) {
+ // %H%M%S.%f
+ var hours = date.getHours();
+ var minutes = date.getMinutes();
+ var seconds = date.getSeconds();
+ var milliseconds = date.getMilliseconds();
+ return zeroPad(hours) + zeroPad(minutes) + zeroPad(seconds) + milliseconds;
+ }
+
+ function DA(date) {
+ var year = date.getFullYear();
+ var month = date.getMonth() + 1;
+ var day = date.getDate();
+ return year + zeroPad(month) + zeroPad(day);
+ }
+
+ function DT(date) {
+ return DA(date) + TM(date);
+ }
+
+ var ContentSequence$1 = /*#__PURE__*/function (_Array) {
+ _inherits(ContentSequence, _Array);
+
+ var _super = _createSuper(ContentSequence);
+
+ function ContentSequence() {
+ _classCallCheck(this, ContentSequence);
+
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ return _super.call.apply(_super, [this].concat(args));
+ } // filterBy(options) {
+ // }
+
+
+ return _createClass(ContentSequence);
+ }( /*#__PURE__*/_wrapNativeSuper(Array));
+
+ var ContentItem = /*#__PURE__*/_createClass(function ContentItem(options) {
+ _classCallCheck(this, ContentItem);
+
+ if (options.name === undefined) {
+ throw new Error("Option 'name' is required for ContentItem.");
+ }
+
+ if (options.name.constructor !== CodedConcept) {
+ throw new Error("Option 'name' must have type CodedConcept.");
+ }
+
+ this.ConceptNameCodeSequence = [options.name];
+
+ if (options.valueType === undefined) {
+ throw new Error("Option 'valueType' is required for ContentItem.");
+ }
+
+ if (!(Object.values(ValueTypes).indexOf(options.valueType) !== -1)) {
+ throw new Error("Invalid value type ".concat(options.valueType));
+ }
+
+ this.ValueType = options.valueType;
+
+ if (options.relationshipType !== undefined) {
+ if (!(Object.values(RelationshipTypes).indexOf(options.relationshipType) !== -1)) {
+ throw new Error("Invalid relationship type ".concat(options.relationshipTypes));
+ }
+
+ this.RelationshipType = options.relationshipType;
+ } // TODO: relationship type is required
+
+ } // getContentItems(options) {
+ // // TODO: filter by name, value type and relationship type
+ // return this.ContentSequence;
+ // }
+ );
+
+ var CodeContentItem = /*#__PURE__*/function (_ContentItem) {
+ _inherits(CodeContentItem, _ContentItem);
+
+ var _super2 = _createSuper(CodeContentItem);
+
+ function CodeContentItem(options) {
+ var _this;
+
+ _classCallCheck(this, CodeContentItem);
+
+ _this = _super2.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.CODE
+ });
+
+ if (options.value === undefined) {
+ throw new Error("Option 'value' is required for CodeContentItem.");
+ }
+
+ if (!(options.value || options.value.constructor === CodedConcept)) {
+ throw new Error("Option 'value' must have type CodedConcept.");
+ }
+
+ _this.ConceptCodeSequence = [options.value];
+ return _this;
+ }
+
+ return _createClass(CodeContentItem);
+ }(ContentItem);
+
+ var TextContentItem = /*#__PURE__*/function (_ContentItem2) {
+ _inherits(TextContentItem, _ContentItem2);
+
+ var _super3 = _createSuper(TextContentItem);
+
+ function TextContentItem(options) {
+ var _this2;
+
+ _classCallCheck(this, TextContentItem);
+
+ _this2 = _super3.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.TEXT
+ });
+
+ if (options.value === undefined) {
+ throw new Error("Option 'value' is required for TextContentItem.");
+ }
+
+ if (!(typeof options.value === "string" || options.value instanceof String)) {
+ throw new Error("Option 'value' must have type String.");
+ }
+
+ _this2.TextValue = options.value;
+ return _this2;
+ }
+
+ return _createClass(TextContentItem);
+ }(ContentItem);
+
+ var PNameContentItem = /*#__PURE__*/function (_ContentItem3) {
+ _inherits(PNameContentItem, _ContentItem3);
+
+ var _super4 = _createSuper(PNameContentItem);
+
+ function PNameContentItem(options) {
+ var _this3;
+
+ _classCallCheck(this, PNameContentItem);
+
+ _this3 = _super4.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.PNAME
+ });
+
+ if (options.value === undefined) {
+ throw new Error("Option 'value' is required for PNameContentItem.");
+ }
+
+ if (!(typeof options.value === "string" || options.value instanceof String)) {
+ throw new Error("Option 'value' must have type String.");
+ }
+
+ _this3.PersonName = options.value;
+ return _this3;
+ }
+
+ return _createClass(PNameContentItem);
+ }(ContentItem);
+
+ var TimeContentItem = /*#__PURE__*/function (_ContentItem4) {
+ _inherits(TimeContentItem, _ContentItem4);
+
+ var _super5 = _createSuper(TimeContentItem);
+
+ function TimeContentItem(options) {
+ var _this4;
+
+ _classCallCheck(this, TimeContentItem);
+
+ _this4 = _super5.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.TIME
+ });
+
+ if (options.value === undefined) {
+ throw new Error("Option 'value' is required for TimeContentItem.");
+ }
+
+ if (!(_typeof(options.value) === "object" || options.value instanceof Date)) {
+ throw new Error("Option 'value' must have type Date.");
+ }
+
+ _this4.Time = TM(options.value);
+ return _this4;
+ }
+
+ return _createClass(TimeContentItem);
+ }(ContentItem);
+
+ var DateContentItem = /*#__PURE__*/function (_ContentItem5) {
+ _inherits(DateContentItem, _ContentItem5);
+
+ var _super6 = _createSuper(DateContentItem);
+
+ function DateContentItem(options) {
+ var _this5;
+
+ _classCallCheck(this, DateContentItem);
+
+ _this5 = _super6.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.DATE
+ });
+
+ if (options.value === undefined) {
+ throw new Error("Option 'value' is required for DateContentItem.");
+ }
+
+ if (!(_typeof(options.value) === "object" || options.value instanceof Date)) {
+ throw new Error("Option 'value' must have type Date.");
+ }
+
+ _this5.Date = DA(options.value);
+ return _this5;
+ }
+
+ return _createClass(DateContentItem);
+ }(ContentItem);
+
+ var DateTimeContentItem = /*#__PURE__*/function (_ContentItem6) {
+ _inherits(DateTimeContentItem, _ContentItem6);
+
+ var _super7 = _createSuper(DateTimeContentItem);
+
+ function DateTimeContentItem(options) {
+ var _this6;
+
+ _classCallCheck(this, DateTimeContentItem);
+
+ _this6 = _super7.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.DATETIME
+ });
+
+ if (options.value === undefined) {
+ throw new Error("Option 'value' is required for DateTimeContentItem.");
+ }
+
+ if (!(_typeof(options.value) === "object" || options.value instanceof Date)) {
+ throw new Error("Option 'value' must have type Date.");
+ }
+
+ _this6.DateTime = DT(otions.value);
+ return _this6;
+ }
+
+ return _createClass(DateTimeContentItem);
+ }(ContentItem);
+
+ var UIDRefContentItem = /*#__PURE__*/function (_ContentItem7) {
+ _inherits(UIDRefContentItem, _ContentItem7);
+
+ var _super8 = _createSuper(UIDRefContentItem);
+
+ function UIDRefContentItem(options) {
+ var _this7;
+
+ _classCallCheck(this, UIDRefContentItem);
+
+ _this7 = _super8.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.UIDREF
+ });
+
+ if (options.value === undefined) {
+ throw new Error("Option 'value' is required for UIDRefContentItem.");
+ }
+
+ if (!(typeof options.value === "string" || options.value instanceof String)) {
+ throw new Error("Option 'value' must have type String.");
+ }
+
+ _this7.UID = options.value;
+ return _this7;
+ }
+
+ return _createClass(UIDRefContentItem);
+ }(ContentItem);
+
+ var NumContentItem = /*#__PURE__*/function (_ContentItem8) {
+ _inherits(NumContentItem, _ContentItem8);
+
+ var _super9 = _createSuper(NumContentItem);
+
+ function NumContentItem(options) {
+ var _this8;
+
+ _classCallCheck(this, NumContentItem);
+
+ _this8 = _super9.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.NUM
+ });
+
+ if (options.value !== undefined) {
+ if (!(typeof options.value === "number" || options.value instanceof Number)) {
+ throw new Error("Option 'value' must have type Number.");
+ }
+
+ if (options.unit === undefined) {
+ throw new Error("Option 'unit' is required for NumContentItem with 'value'.");
+ }
+
+ if (options.unit.constructor !== CodedConcept) {
+ throw new Error("Option 'unit' must have type CodedConcept.");
+ }
+
+ var item = {};
+ item.NumericValue = options.value;
+
+ if (isFloat(options.value)) {
+ item.FloatingPointValue = options.value;
+ }
+
+ item.MeasurementUnitsCodeSequence = [options.unit];
+ _this8.MeasuredValueSequence = [item];
+ } else if (options.qualifier !== undefined) {
+ if (!(options.qualifier || options.qualifier.constructor === CodedConcept)) {
+ throw new Error("Option 'qualifier' must have type CodedConcept.");
+ }
+
+ _this8.NumericValueQualifierCodeSequence = [options.qualifier];
+ } else {
+ throw new Error("Either option 'value' or 'qualifier' is required for NumContentItem.");
+ }
+
+ return _this8;
+ }
+
+ return _createClass(NumContentItem);
+ }(ContentItem);
+
+ var ContainerContentItem = /*#__PURE__*/function (_ContentItem9) {
+ _inherits(ContainerContentItem, _ContentItem9);
+
+ var _super10 = _createSuper(ContainerContentItem);
+
+ function ContainerContentItem(options) {
+ var _this9;
+
+ _classCallCheck(this, ContainerContentItem);
+
+ _this9 = _super10.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.CONTAINER
+ });
+
+ if (options.isContentContinuous !== undefined) {
+ _this9.ContinuityOfContent = "CONTINUOUS";
+ } else {
+ _this9.ContinuityOfContent = "SEPARATE";
+ }
+
+ if (options.templateID !== undefined) {
+ if (!(typeof options.templateID === "string" || options.templateID instanceof String)) {
+ throw new Error("Option 'templateID' must have type String.");
+ }
+
+ var item = {};
+ item.MappingResource = "DCMR";
+ item.TemplateIdentifier = options.templateID;
+ _this9.ContentTemplateSequence = [item];
+ }
+
+ return _this9;
+ }
+
+ return _createClass(ContainerContentItem);
+ }(ContentItem);
+
+ var CompositeContentItem = /*#__PURE__*/function (_ContentItem10) {
+ _inherits(CompositeContentItem, _ContentItem10);
+
+ var _super11 = _createSuper(CompositeContentItem);
+
+ function CompositeContentItem(options) {
+ var _this10;
+
+ _classCallCheck(this, CompositeContentItem);
+
+ _this10 = _super11.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.COMPOSITE
+ });
+
+ if (options.referencedSOPClassUID === undefined) {
+ throw new Error("Option 'referencedSOPClassUID' is required for CompositeContentItem.");
+ }
+
+ if (options.referencedSOPInstanceUID === undefined) {
+ throw new Error("Option 'referencedSOPInstanceUID' is required for CompositeContentItem.");
+ }
+
+ if (!(typeof options.referencedSOPClassUID === "string" || options.referencedSOPClassUID instanceof String)) {
+ throw new Error("Option 'referencedSOPClassUID' must have type String.");
+ }
+
+ if (!(typeof options.referencedSOPInstanceUID === "string" || options.referencedSOPInstanceUID instanceof String)) {
+ throw new Error("Option 'referencedSOPInstanceUID' must have type String.");
+ }
+
+ var item = {};
+ item.ReferencedSOPClassUID = options.referencedSOPClassUID;
+ item.ReferencedSOPInstanceUID = options.referencedSOPInstanceUID;
+ _this10.ReferenceSOPSequence = [item];
+ return _this10;
+ }
+
+ return _createClass(CompositeContentItem);
+ }(ContentItem);
+
+ var ImageContentItem = /*#__PURE__*/function (_ContentItem11) {
+ _inherits(ImageContentItem, _ContentItem11);
+
+ var _super12 = _createSuper(ImageContentItem);
+
+ function ImageContentItem(options) {
+ var _this11;
+
+ _classCallCheck(this, ImageContentItem);
+
+ _this11 = _super12.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.IMAGE
+ });
+
+ if (options.referencedSOPClassUID === undefined) {
+ throw new Error("Option 'referencedSOPClassUID' is required for ImageContentItem.");
+ }
+
+ if (options.referencedSOPInstanceUID === undefined) {
+ throw new Error("Option 'referencedSOPInstanceUID' is required for ImageContentItem.");
+ }
+
+ if (!(typeof options.referencedSOPClassUID === "string" || options.referencedSOPClassUID instanceof String)) {
+ throw new Error("Option 'referencedSOPClassUID' must have type String.");
+ }
+
+ if (!(typeof options.referencedSOPInstanceUID === "string" || options.referencedSOPInstanceUID instanceof String)) {
+ throw new Error("Option 'referencedSOPInstanceUID' must have type String.");
+ }
+
+ var item = {};
+ item.ReferencedSOPClassUID = options.referencedSOPClassUID;
+ item.ReferencedSOPInstanceUID = options.referencedSOPInstanceUID;
+
+ if (options.referencedFrameNumbers !== undefined) {
+ if (!(_typeof(options.referencedFrameNumbers) === "object" || options.referencedFrameNumbers instanceof Array)) {
+ throw new Error("Option 'referencedFrameNumbers' must have type Array.");
+ } // FIXME: value multiplicity
+
+
+ item.ReferencedFrameNumber = options.referencedFrameNumbers;
+ }
+
+ if (options.referencedFrameSegmentNumber !== undefined) {
+ if (!(_typeof(options.referencedSegmentNumbers) === "object" || options.referencedSegmentNumbers instanceof Array)) {
+ throw new Error("Option 'referencedSegmentNumbers' must have type Array.");
+ } // FIXME: value multiplicity
+
+
+ item.ReferencedSegmentNumber = options.referencedSegmentNumbers;
+ }
+
+ _this11.ReferencedSOPSequence = [item];
+ return _this11;
+ }
+
+ return _createClass(ImageContentItem);
+ }(ContentItem);
+
+ var ScoordContentItem = /*#__PURE__*/function (_ContentItem12) {
+ _inherits(ScoordContentItem, _ContentItem12);
+
+ var _super13 = _createSuper(ScoordContentItem);
+
+ function ScoordContentItem(options) {
+ var _this12;
+
+ _classCallCheck(this, ScoordContentItem);
+
+ _this12 = _super13.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.SCOORD
+ });
+
+ if (options.graphicType === undefined) {
+ throw new Error("Option 'graphicType' is required for ScoordContentItem.");
+ }
+
+ if (!(typeof options.graphicType === "string" || options.graphicType instanceof String)) {
+ throw new Error("Option 'graphicType' of ScoordContentItem must have type String.");
+ }
+
+ if (options.graphicData === undefined) {
+ throw new Error("Option 'graphicData' is required for ScoordContentItem.");
+ }
+
+ if (!(_typeof(options.graphicData) === "object" || options.graphicData instanceof Array)) {
+ throw new Error("Option 'graphicData' of ScoordContentItem must have type Array.");
+ }
+
+ if (Object.values(GraphicTypes).indexOf(options.graphicType) === -1) {
+ throw new Error("Invalid graphic type '".concat(options.graphicType, "'."));
+ }
+
+ if (options.graphicData[0] instanceof Array) {
+ options.graphicData = [].concat.apply([], options.graphicData);
+ }
+
+ _this12.GraphicData = options.graphicData;
+ options.pixelOriginInterpretation = options.pixelOriginInterpretation || PixelOriginInterpretations.VOLUME;
+
+ if (!(typeof options.pixelOriginInterpretation === "string" || options.pixelOriginInterpretation instanceof String)) {
+ throw new Error("Option 'pixelOriginInterpretation' must have type String.");
+ }
+
+ if (Object.values(PixelOriginInterpretations).indexOf(options.pixelOriginInterpretation) === -1) {
+ throw new Error("Invalid pixel origin interpretation '".concat(options.pixelOriginInterpretation, "'."));
+ }
+
+ if (options.fiducialUID !== undefined) {
+ if (!(typeof options.fiducialUID === "string" || options.fiducialUID instanceof String)) {
+ throw new Error("Option 'fiducialUID' must have type String.");
+ }
+
+ _this12.FiducialUID = options.fiducialUID;
+ }
+
+ return _this12;
+ }
+
+ return _createClass(ScoordContentItem);
+ }(ContentItem);
+
+ var Scoord3DContentItem = /*#__PURE__*/function (_ContentItem13) {
+ _inherits(Scoord3DContentItem, _ContentItem13);
+
+ var _super14 = _createSuper(Scoord3DContentItem);
+
+ function Scoord3DContentItem(options) {
+ var _this13;
+
+ _classCallCheck(this, Scoord3DContentItem);
+
+ _this13 = _super14.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.SCOORD3D
+ });
+
+ if (options.graphicType === undefined) {
+ throw new Error("Option 'graphicType' is required for Scoord3DContentItem.");
+ }
+
+ if (!(typeof options.graphicType === "string" || options.graphicType instanceof String)) {
+ throw new Error("Option 'graphicType' must have type String.");
+ }
+
+ if (options.graphicData === undefined) {
+ throw new Error("Option 'graphicData' is required for Scoord3DContentItem.");
+ }
+
+ if (!(_typeof(options.graphicData) === "object" || options.graphicData instanceof Array)) {
+ throw new Error("Option 'graphicData' must have type Array.");
+ }
+
+ if (Object.values(GraphicTypes3D).indexOf(options.graphicType) === -1) {
+ throw new Error("Invalid graphic type '".concat(options.graphicType, "'."));
+ }
+
+ if (options.graphicData[0] instanceof Array) {
+ options.graphicData = [].concat.apply([], options.graphicData);
+ }
+
+ _this13.GraphicType = options.graphicType;
+ _this13.GraphicData = options.graphicData;
+
+ if (options.frameOfReferenceUID === undefined) {
+ throw new Error("Option 'frameOfReferenceUID' is required for Scoord3DContentItem.");
+ }
+
+ if (!(typeof options.frameOfReferenceUID === "string" || options.frameOfReferenceUID instanceof String)) {
+ throw new Error("Option 'frameOfReferenceUID' must have type String.");
+ }
+
+ _this13.ReferencedFrameOfReferenceUID = options.frameOfReferenceUID;
+
+ if ("fiducialUID" in options) {
+ if (!(typeof options.fiducialUID === "string" || options.fiducialUID instanceof String)) {
+ throw new Error("Option 'fiducialUID' must have type String.");
+ }
+
+ _this13.FiducialUID = fiducialUID;
+ }
+
+ return _this13;
+ }
+
+ return _createClass(Scoord3DContentItem);
+ }(ContentItem);
+
+ var TcoordContentItem = /*#__PURE__*/function (_ContentItem14) {
+ _inherits(TcoordContentItem, _ContentItem14);
+
+ var _super15 = _createSuper(TcoordContentItem);
+
+ function TcoordContentItem(options) {
+ var _this14;
+
+ _classCallCheck(this, TcoordContentItem);
+
+ _this14 = _super15.call(this, {
+ name: options.name,
+ relationshipType: options.relationshipType,
+ valueType: ValueTypes.TCOORD
+ });
+
+ if (options.temporalRangeType === undefined) {
+ throw new Error("Option 'temporalRangeType' is required for TcoordContentItem.");
+ }
+
+ if (Object.values(TemporalRangeTypes).indexOf(options.temporalRangeType) === -1) {
+ throw new Error("Invalid temporal range type '".concat(options.temporalRangeType, "'."));
+ }
+
+ if (options.referencedSamplePositions === undefined) {
+ if (!(_typeof(options.referencedSamplePositions) === "object" || options.referencedSamplePositions instanceof Array)) {
+ throw new Error("Option 'referencedSamplePositions' must have type Array.");
+ } // TODO: ensure values are integers
+
+
+ _this14.ReferencedSamplePositions = options.referencedSamplePositions;
+ } else if (options.referencedTimeOffsets === undefined) {
+ if (!(_typeof(options.referencedTimeOffsets) === "object" || options.referencedTimeOffsets instanceof Array)) {
+ throw new Error("Option 'referencedTimeOffsets' must have type Array.");
+ } // TODO: ensure values are floats
+
+
+ _this14.ReferencedTimeOffsets = options.referencedTimeOffsets;
+ } else if (options.referencedDateTime === undefined) {
+ if (!(_typeof(options.referencedDateTime) === "object" || options.referencedDateTime instanceof Array)) {
+ throw new Error("Option 'referencedDateTime' must have type Array.");
+ }
+
+ _this14.ReferencedDateTime = options.referencedDateTime;
+ } else {
+ throw new Error("One of the following options is required for TcoordContentItem: " + "'referencedSamplePositions', 'referencedTimeOffsets', or " + "'referencedDateTime'.");
+ }
+
+ return _this14;
+ }
+
+ return _createClass(TcoordContentItem);
+ }(ContentItem);
+
+ var valueTypes = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ CodeContentItem: CodeContentItem,
+ CompositeContentItem: CompositeContentItem,
+ ContainerContentItem: ContainerContentItem,
+ ContentSequence: ContentSequence$1,
+ DateContentItem: DateContentItem,
+ DateTimeContentItem: DateTimeContentItem,
+ GraphicTypes: GraphicTypes,
+ GraphicTypes3D: GraphicTypes3D,
+ ImageContentItem: ImageContentItem,
+ NumContentItem: NumContentItem,
+ PNameContentItem: PNameContentItem,
+ PixelOriginInterpretations: PixelOriginInterpretations,
+ RelationshipTypes: RelationshipTypes,
+ Scoord3DContentItem: Scoord3DContentItem,
+ ScoordContentItem: ScoordContentItem,
+ TcoordContentItem: TcoordContentItem,
+ TemporalRangeTypes: TemporalRangeTypes,
+ TextContentItem: TextContentItem,
+ TimeContentItem: TimeContentItem,
+ UIDRefContentItem: UIDRefContentItem,
+ ValueTypes: ValueTypes
+ });
+
+ var LongitudinalTemporalOffsetFromEvent = /*#__PURE__*/function (_NumContentItem) {
+ _inherits(LongitudinalTemporalOffsetFromEvent, _NumContentItem);
+
+ var _super = _createSuper(LongitudinalTemporalOffsetFromEvent);
+
+ function LongitudinalTemporalOffsetFromEvent(options) {
+ var _this;
+
+ _classCallCheck(this, LongitudinalTemporalOffsetFromEvent);
+
+ _this = _super.call(this, {
+ name: new CodedConcept({
+ value: "128740",
+ meaning: "Longitudinal Temporal Offset from Event",
+ schemeDesignator: "DCM"
+ }),
+ value: options.value,
+ unit: options.unit,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+ _this.ContentSequence = new ContentSequence$1();
+ var item = new CodeContentItem({
+ name: new CodedConcept({
+ value: "128741",
+ meaning: "Longitudinal Temporal Event Type",
+ schemeDesignator: "DCM"
+ }),
+ value: options.eventType,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+
+ _this.ContentSequence.push(item);
+
+ return _this;
+ }
+
+ return _createClass(LongitudinalTemporalOffsetFromEvent);
+ }(NumContentItem);
+
+ var SourceImageForRegion = /*#__PURE__*/function (_ImageContentItem) {
+ _inherits(SourceImageForRegion, _ImageContentItem);
+
+ var _super2 = _createSuper(SourceImageForRegion);
+
+ function SourceImageForRegion(options) {
+ _classCallCheck(this, SourceImageForRegion);
+
+ return _super2.call(this, {
+ name: new CodedConcept({
+ value: "121324",
+ meaning: "Source Image",
+ schemeDesignator: "DCM"
+ }),
+ referencedSOPClassUID: options.referencedSOPClassUID,
+ referencedSOPInstanceUID: options.referencedSOPInstanceUID,
+ referencedFrameNumbers: options.referencedFrameNumbers,
+ relationshipType: RelationshipTypes.SELECTED_FROM
+ });
+ }
+
+ return _createClass(SourceImageForRegion);
+ }(ImageContentItem);
+
+ var SourceImageForSegmentation = /*#__PURE__*/function (_ImageContentItem2) {
+ _inherits(SourceImageForSegmentation, _ImageContentItem2);
+
+ var _super3 = _createSuper(SourceImageForSegmentation);
+
+ function SourceImageForSegmentation(options) {
+ _classCallCheck(this, SourceImageForSegmentation);
+
+ return _super3.call(this, {
+ name: new CodedConcept({
+ value: "121233",
+ meaning: "Source Image for Segmentation",
+ schemeDesignator: "DCM"
+ }),
+ referencedSOPClassUID: options.referencedSOPClassUID,
+ referencedSOPInstanceUID: options.referencedSOPInstanceUID,
+ referencedFrameNumbers: options.referencedFrameNumbers,
+ relationshipType: RelationshipTypes.SELECTED_FROM
+ });
+ }
+
+ return _createClass(SourceImageForSegmentation);
+ }(ImageContentItem);
+
+ var SourceSeriesForSegmentation = /*#__PURE__*/function (_UIDRefContentItem) {
+ _inherits(SourceSeriesForSegmentation, _UIDRefContentItem);
+
+ var _super4 = _createSuper(SourceSeriesForSegmentation);
+
+ function SourceSeriesForSegmentation(options) {
+ _classCallCheck(this, SourceSeriesForSegmentation);
+
+ return _super4.call(this, {
+ name: new CodedConcept({
+ value: "121232",
+ meaning: "Source Series for Segmentation",
+ schemeDesignator: "DCM"
+ }),
+ value: options.referencedSeriesInstanceUID,
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+ }
+
+ return _createClass(SourceSeriesForSegmentation);
+ }(UIDRefContentItem);
+
+ var ImageRegion = /*#__PURE__*/function (_ScoordContentItem) {
+ _inherits(ImageRegion, _ScoordContentItem);
+
+ var _super5 = _createSuper(ImageRegion);
+
+ function ImageRegion(options) {
+ var _this2;
+
+ _classCallCheck(this, ImageRegion);
+
+ _this2 = _super5.call(this, {
+ name: new CodedConcept({
+ value: "111030",
+ meaning: "Image Region",
+ schemeDesignator: "DCM"
+ }),
+ graphicType: options.graphicType,
+ graphicData: options.graphicData,
+ pixelOriginInterpretation: options.pixelOriginInterpretation,
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+
+ if (options.graphicType === GraphicTypes.MULTIPOINT) {
+ throw new Error("Graphic type 'MULTIPOINT' is not valid for region.");
+ }
+
+ if (options.sourceImage === undefined) {
+ throw Error("Option 'sourceImage' is required for ImageRegion.");
+ }
+
+ if (!(options.sourceImage || options.sourceImage.constructor === SourceImageForRegion)) {
+ throw new Error("Option 'sourceImage' of ImageRegion must have type " + "SourceImageForRegion.");
+ }
+
+ _this2.ContentSequence = new ContentSequence$1();
+
+ _this2.ContentSequence.push(options.sourceImage);
+
+ return _this2;
+ }
+
+ return _createClass(ImageRegion);
+ }(ScoordContentItem);
+
+ var ImageRegion3D = /*#__PURE__*/function (_Scoord3DContentItem) {
+ _inherits(ImageRegion3D, _Scoord3DContentItem);
+
+ var _super6 = _createSuper(ImageRegion3D);
+
+ function ImageRegion3D(options) {
+ var _this3;
+
+ _classCallCheck(this, ImageRegion3D);
+
+ _this3 = _super6.call(this, {
+ name: new CodedConcept({
+ value: "111030",
+ meaning: "Image Region",
+ schemeDesignator: "DCM"
+ }),
+ graphicType: options.graphicType,
+ graphicData: options.graphicData,
+ frameOfReferenceUID: options.frameOfReferenceUID,
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+
+ if (options.graphicType === GraphicTypes3D.MULTIPOINT) {
+ throw new Error("Graphic type 'MULTIPOINT' is not valid for region.");
+ }
+
+ if (options.graphicType === GraphicTypes3D.ELLIPSOID) {
+ throw new Error("Graphic type 'ELLIPSOID' is not valid for region.");
+ }
+
+ return _this3;
+ }
+
+ return _createClass(ImageRegion3D);
+ }(Scoord3DContentItem);
+
+ var VolumeSurface = /*#__PURE__*/function (_Scoord3DContentItem2) {
+ _inherits(VolumeSurface, _Scoord3DContentItem2);
+
+ var _super7 = _createSuper(VolumeSurface);
+
+ function VolumeSurface(options) {
+ var _this4;
+
+ _classCallCheck(this, VolumeSurface);
+
+ _this4 = _super7.call(this, {
+ name: new CodedConcept({
+ value: "121231",
+ meaning: "Volume Surface",
+ schemeDesignator: "DCM"
+ }),
+ graphicType: options.graphicType,
+ graphicData: options.graphicData,
+ frameOfFeferenceUID: options.frameOfFeferenceUID,
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+
+ if (options.graphicType !== GraphicTypes3D.ELLIPSOID) {
+ throw new Error("Graphic type for volume surface must be 'ELLIPSOID'.");
+ }
+
+ _this4.ContentSequence = new ContentSequence$1();
+
+ if (options.sourceImages) {
+ options.sourceImages.forEach(function (image) {
+ if (!(image || image.constructor === SourceImageForRegion)) {
+ throw new Error("Items of option 'sourceImages' of VolumeSurface " + "must have type SourceImageForRegion.");
+ }
+
+ _this4.ContentSequence.push(image);
+ });
+ } else if (options.sourceSeries) {
+ if (!(options.sourceSeries || options.sourceSeries.constructor === SourceSeriesForRegion)) {
+ throw new Error("Option 'sourceSeries' of VolumeSurface " + "must have type SourceSeriesForRegion.");
+ }
+
+ _this4.ContentSequence.push(options.sourceSeries);
+ } else {
+ throw new Error("One of the following two options must be provided: " + "'sourceImage' or 'sourceSeries'.");
+ }
+
+ return _this4;
+ }
+
+ return _createClass(VolumeSurface);
+ }(Scoord3DContentItem);
+
+ var ReferencedRealWorldValueMap = /*#__PURE__*/function (_CompositeContentItem) {
+ _inherits(ReferencedRealWorldValueMap, _CompositeContentItem);
+
+ var _super8 = _createSuper(ReferencedRealWorldValueMap);
+
+ function ReferencedRealWorldValueMap(options) {
+ _classCallCheck(this, ReferencedRealWorldValueMap);
+
+ return _super8.call(this, {
+ name: new CodedConcept({
+ value: "126100",
+ meaning: "Real World Value Map used for measurement",
+ schemeDesignator: "DCM"
+ }),
+ referencedSOPClassUID: option.referencedSOPClassUID,
+ referencedSOPInstanceUID: options.referencedSOPInstanceUID,
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+ }
+
+ return _createClass(ReferencedRealWorldValueMap);
+ }(CompositeContentItem);
+
+ var FindingSite = /*#__PURE__*/function (_CodeContentItem) {
+ _inherits(FindingSite, _CodeContentItem);
+
+ var _super9 = _createSuper(FindingSite);
+
+ function FindingSite(options) {
+ var _this5;
+
+ _classCallCheck(this, FindingSite);
+
+ _this5 = _super9.call(this, {
+ name: new CodedConcept({
+ value: "363698007",
+ meaning: "Finding Site",
+ schemeDesignator: "SCT"
+ }),
+ value: options.anatomicLocation,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+ _this5.ContentSequence = new ContentSequence$1();
+
+ if (options.laterality) {
+ var item = new CodeContentItem({
+ name: new CodedConcept({
+ value: "272741003",
+ meaning: "Laterality",
+ schemeDesignator: "SCT"
+ }),
+ value: options.laterality,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+
+ _this5.ContentSequence.push(item);
+ }
+
+ if (options.topographicalModifier) {
+ var _item = new CodeContentItem({
+ name: new CodedConcept({
+ value: "106233006",
+ meaning: "Topographical Modifier",
+ schemeDesignator: "SCT"
+ }),
+ value: options.topographicalModifier,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+
+ _this5.ContentSequence.push(_item);
+ }
+
+ return _this5;
+ }
+
+ return _createClass(FindingSite);
+ }(CodeContentItem);
+
+ var ReferencedSegmentationFrame = /*#__PURE__*/function (_ContentSequence) {
+ _inherits(ReferencedSegmentationFrame, _ContentSequence);
+
+ var _super10 = _createSuper(ReferencedSegmentationFrame);
+
+ function ReferencedSegmentationFrame(options) {
+ var _this6;
+
+ _classCallCheck(this, ReferencedSegmentationFrame);
+
+ if (options.sopClassUID === undefined) {
+ throw new Error("Option 'sopClassUID' is required for ReferencedSegmentationFrame.");
+ }
+
+ if (options.sopInstanceUID === undefined) {
+ throw new Error("Option 'sopInstanceUID' is required for ReferencedSegmentationFrame.");
+ }
+
+ if (options.frameNumber === undefined) {
+ throw new Error("Option 'frameNumber' is required for ReferencedSegmentationFrame.");
+ }
+
+ if (options.segmentNumber === undefined) {
+ throw new Error("Option 'segmentNumber' is required for ReferencedSegmentationFrame.");
+ }
+
+ if (options.sourceImage === undefined) {
+ throw new Error("Option 'sourceImage' is required for ReferencedSegmentationFrame.");
+ }
+
+ _this6 = _super10.call(this);
+ var segmentationItem = ImageContentItem({
+ name: new CodedConcept({
+ value: "121214",
+ meaning: "Referenced Segmentation Frame",
+ schemeDesignator: "DCM"
+ }),
+ referencedSOPClassUid: options.sopClassUid,
+ referencedSOPInstanceUid: options.sopInstanceUid,
+ referencedFrameNumber: options.frameNumber,
+ referencedSegmentNumber: options.segmentNumber
+ });
+
+ _this6.push(segmentationItem);
+
+ if (options.sourceImage.constructor !== SourceImageForSegmentation) {
+ throw new Error("Option 'sourceImage' must have type SourceImageForSegmentation.");
+ }
+
+ _this6.push(sourceImage);
+
+ return _this6;
+ }
+
+ return _createClass(ReferencedSegmentationFrame);
+ }(ContentSequence$1);
+
+ var ReferencedSegmentation = /*#__PURE__*/function (_ContentSequence2) {
+ _inherits(ReferencedSegmentation, _ContentSequence2);
+
+ var _super11 = _createSuper(ReferencedSegmentation);
+
+ function ReferencedSegmentation(options) {
+ var _this7;
+
+ _classCallCheck(this, ReferencedSegmentation);
+
+ if (options.sopClassUID === undefined) {
+ throw new Error("Option 'sopClassUID' is required for ReferencedSegmentation.");
+ }
+
+ if (options.sopInstanceUID === undefined) {
+ throw new Error("Option 'sopInstanceUID' is required for ReferencedSegmentation.");
+ }
+
+ if (options.frameNumbers === undefined) {
+ throw new Error("Option 'frameNumbers' is required for ReferencedSegmentation.");
+ }
+
+ if (options.segmentNumber === undefined) {
+ throw new Error("Option 'segmentNumber' is required for ReferencedSegmentation.");
+ }
+
+ _this7 = _super11.call(this);
+ var segmentationItem = new ImageContentItem({
+ name: new CodedConcept({
+ value: "121191",
+ meaning: "Referenced Segment",
+ schemeDesignator: "DCM"
+ }),
+ referencedSOPClassUid: options.sopClassUid,
+ referencedSOPInstanceUid: options.sopInstanceUid,
+ referencedFrameNumber: options.frameNumbers,
+ referencedSegmentNumber: options.segmentNumber
+ });
+
+ _this7.push(segmentationItem);
+
+ if (options.sourceImages !== undefined) {
+ options.sourceImages.forEach(function (image) {
+ if (!image || image.constructor !== SourceImageForSegmentation) {
+ throw new Error("Items of option 'sourceImages' must have type " + "SourceImageForSegmentation.");
+ }
+
+ _this7.push(image);
+ });
+ } else if (options.sourceSeries !== undefined) {
+ if (options.sourceSeries.constructor !== SourceSeriesForSegmentation) {
+ throw new Error("Option 'sourceSeries' must have type SourceSeriesForSegmentation.");
+ }
+
+ _this7.push(sourceSeries);
+ } else {
+ throw new Error("One of the following two options must be provided: " + "'sourceImages' or 'sourceSeries'.");
+ }
+
+ return _this7;
+ }
+
+ return _createClass(ReferencedSegmentation);
+ }(ContentSequence$1);
+
+ var contentItems = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ FindingSite: FindingSite,
+ ImageRegion: ImageRegion,
+ ImageRegion3D: ImageRegion3D,
+ LongitudinalTemporalOffsetFromEvent: LongitudinalTemporalOffsetFromEvent,
+ ReferencedRealWorldValueMap: ReferencedRealWorldValueMap,
+ ReferencedSegmentation: ReferencedSegmentation,
+ ReferencedSegmentationFrame: ReferencedSegmentationFrame,
+ SourceImageForRegion: SourceImageForRegion,
+ SourceImageForSegmentation: SourceImageForSegmentation,
+ SourceSeriesForSegmentation: SourceSeriesForSegmentation,
+ VolumeSurface: VolumeSurface
+ });
+
+ var Template = /*#__PURE__*/function (_ContentSequence) {
+ _inherits(Template, _ContentSequence);
+
+ var _super = _createSuper(Template);
+
+ function Template() {
+ _classCallCheck(this, Template);
+
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
+ args[_key] = arguments[_key];
+ }
+
+ return _super.call.apply(_super, [this].concat(args));
+ }
+
+ return _createClass(Template);
+ }(ContentSequence$1);
+
+ var Measurement = /*#__PURE__*/function (_Template) {
+ _inherits(Measurement, _Template);
+
+ var _super2 = _createSuper(Measurement);
+
+ function Measurement(options) {
+ var _valueItem$ContentSeq;
+
+ var _this;
+
+ _classCallCheck(this, Measurement);
+
+ _this = _super2.call(this);
+ var valueItem = new NumContentItem({
+ name: options.name,
+ value: options.value,
+ unit: options.unit,
+ qualifier: options.qualifier,
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+ valueItem.ContentSequence = new ContentSequence$1();
+
+ if (options.trackingIdentifier === undefined) {
+ throw new Error("Option 'trackingIdentifier' is required for Measurement.");
+ }
+
+ if (options.trackingIdentifier.constructor === TrackingIdentifier) {
+ throw new Error("Option 'trackingIdentifier' must have type TrackingIdentifier.");
+ }
+
+ (_valueItem$ContentSeq = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq, _toConsumableArray(options.trackingIdentifier));
+
+ if (options.method !== undefined) {
+ var methodItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "370129005",
+ meaning: "Measurement Method",
+ schemeDesignator: "SCT"
+ }),
+ value: options.method,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+ valueItem.ContentSequence.push(methodItem);
+ }
+
+ if (options.derivation !== undefined) {
+ var derivationItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121401",
+ meaning: "Derivation",
+ schemeDesignator: "DCM"
+ }),
+ value: options.derivation,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+ valueItem.ContentSequence.push(derivationItem);
+ }
+
+ if (options.findingSites !== undefined) {
+ if (!(_typeof(options.findingSites) === "object" || options.findingSites instanceof Array)) {
+ throw new Error("Option 'findingSites' must have type Array.");
+ }
+
+ options.findingSites.forEach(function (site) {
+ if (!site || site.constructor !== FindingSite) {
+ throw new Error("Items of option 'findingSites' must have type FindingSite.");
+ }
+
+ valueItem.ContentSequence.push(site);
+ });
+ }
+
+ if (options.properties !== undefined) {
+ var _valueItem$ContentSeq2;
+
+ if (options.properties.constructor !== MeasurementProperties) {
+ throw new Error("Option 'properties' must have type MeasurementProperties.");
+ }
+
+ (_valueItem$ContentSeq2 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq2, _toConsumableArray(options.properties));
+ }
+
+ if (options.referencedRegions !== undefined) {
+ if (!(_typeof(options.referencedRegions) === "object" || options.referencedRegions instanceof Array)) {
+ throw new Error("Option 'referencedRegions' must have type Array.");
+ }
+
+ options.referencedRegions.forEach(function (region) {
+ if (!region || region.constructor !== ImageRegion && region.constructor !== ImageRegion3D) {
+ throw new Error("Items of option 'referencedRegion' must have type " + "ImageRegion or ImageRegion3D.");
+ }
+
+ valueItem.ContentSequence.push(region);
+ });
+ } else if (options.referencedVolume !== undefined) {
+ if (options.referencedVolume.constructor !== VolumeSurface) {
+ throw new Error("Option 'referencedVolume' must have type VolumeSurface.");
+ }
+
+ valueItem.ContentSequence.push(options.referencedVolume);
+ } else if (options.referencedSegmentation !== undefined) {
+ if (options.referencedSegmentation.constructor !== ReferencedSegmentation && options.referencedSegmentation.constructor !== ReferencedSegmentationFrame) {
+ throw new Error("Option 'referencedSegmentation' must have type " + "ReferencedSegmentation or ReferencedSegmentationFrame.");
+ }
+
+ valueItem.ContentSequence.push(options.referencedSegmentation);
+ }
+
+ if (options.referencedRealWorldValueMap !== undefined) {
+ if (options.referencedRealWorldValueMap.constructor !== ReferencedRealWorldValueMap) {
+ throw new Error("Option 'referencedRealWorldValueMap' must have type " + "ReferencedRealWorldValueMap.");
+ }
+
+ valueItem.ContentSequence.push(options.referencedRealWorldValueMap);
+ }
+
+ if (options.algorithmId !== undefined) {
+ var _valueItem$ContentSeq3;
+
+ if (options.algorithmId.constructor !== AlgorithmIdentification) {
+ throw new Error("Option 'algorithmId' must have type AlgorithmIdentification.");
+ }
+
+ (_valueItem$ContentSeq3 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq3, _toConsumableArray(options.algorithmId));
+ }
+
+ _this.push(valueItem);
+
+ return _this;
+ }
+
+ return _createClass(Measurement);
+ }(Template);
+
+ var MeasurementProperties = /*#__PURE__*/function (_Template2) {
+ _inherits(MeasurementProperties, _Template2);
+
+ var _super3 = _createSuper(MeasurementProperties);
+
+ function MeasurementProperties(options) {
+ var _this2;
+
+ _classCallCheck(this, MeasurementProperties);
+
+ _this2 = _super3.call(this);
+
+ if (options.normality !== undefined) {
+ var normalityItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121402",
+ schemeDesignator: "DCM",
+ meaning: "Normality"
+ }),
+ value: options.normality,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this2.push(normalityItem);
+ }
+
+ if (options.measurementStatisticalProperties !== undefined) {
+ var _this3;
+
+ if (options.measurementStatisticalProperties.constructor !== MeasurementStatisticalProperties) {
+ throw new Error("Option 'measurmentStatisticalProperties' must have type " + "MeasurementStatisticalProperties.");
+ }
+
+ (_this3 = _this2).push.apply(_this3, _toConsumableArray(measurementStatisticalProperties));
+ }
+
+ if (options.normalRangeProperties !== undefined) {
+ var _this4;
+
+ if (options.normalRangeProperties.constructor !== NormalRangeProperties) {
+ throw new Error("Option 'normalRangeProperties' must have type NormalRangeProperties.");
+ }
+
+ (_this4 = _this2).push.apply(_this4, _toConsumableArray(normalRangeProperties));
+ }
+
+ if (options.levelOfSignificance !== undefined) {
+ var levelOfSignificanceItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121403",
+ schemeDesignator: "DCM",
+ meaning: "Level of Significance"
+ }),
+ value: options.levelOfSignificance,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this2.push(levelOfSignificanceItem);
+ }
+
+ if (options.selectionStatus !== undefined) {
+ var selectionStatusItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121404",
+ schemeDesignator: "DCM",
+ meaning: "Selection Status"
+ }),
+ value: options.selectionStatus,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this2.push(selectionStatusItem);
+ }
+
+ if (options.upperMeasurementUncertainty !== undefined) {
+ var upperMeasurementUncertaintyItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "R-00364",
+ schemeDesignator: "SRT",
+ meaning: "Range of Upper Measurement Uncertainty"
+ }),
+ value: options.upperMeasurementUncertainty,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this2.push(upperMeasurementUncertaintyItem);
+ }
+
+ if (options.lowerMeasurementUncertainty !== undefined) {
+ var lowerMeasurementUncertaintyItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "R-00362",
+ schemeDesignator: "SRT",
+ meaning: "Range of Lower Measurement Uncertainty"
+ }),
+ value: options.lowerMeasurementUncertainty,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this2.push(lowerMeasurementUncertaintyItem);
+ }
+
+ return _this2;
+ }
+
+ return _createClass(MeasurementProperties);
+ }(Template);
+
+ var MeasurementStatisticalProperties = /*#__PURE__*/function (_Template3) {
+ _inherits(MeasurementStatisticalProperties, _Template3);
+
+ var _super4 = _createSuper(MeasurementStatisticalProperties);
+
+ function MeasurementStatisticalProperties(options) {
+ var _this5;
+
+ _classCallCheck(this, MeasurementStatisticalProperties);
+
+ _this5 = _super4.call(this);
+
+ if (options.values === undefined) {
+ throw new Error("Option 'values' is required for MeasurementStatisticalProperties.");
+ }
+
+ if (!(_typeof(options.values) === "object" || options.values instanceof Array)) {
+ throw new Error("Option 'values' must have type Array.");
+ }
+
+ options.values.forEach(function (value) {
+ if (!options.concept || options.concept.constructor !== NumContentItem) {
+ throw new Error("Items of option 'values' must have type NumContentItem.");
+ }
+
+ _this5.push(value);
+ });
+
+ if (options.description !== undefined) {
+ new TextContentItem({
+ name: new CodedConcept({
+ value: "121405",
+ schemeDesignator: "DCM",
+ meaning: "Population Description"
+ }),
+ value: options.authority,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this5.push(authorityItem);
+ }
+
+ if (options.authority !== undefined) {
+ var _authorityItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121406",
+ schemeDesignator: "DCM",
+ meaning: "Population Authority"
+ }),
+ value: options.authority,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this5.push(_authorityItem);
+ }
+
+ return _this5;
+ }
+
+ return _createClass(MeasurementStatisticalProperties);
+ }(Template);
+
+ var NormalRangeProperties = /*#__PURE__*/function (_Template4) {
+ _inherits(NormalRangeProperties, _Template4);
+
+ var _super5 = _createSuper(NormalRangeProperties);
+
+ function NormalRangeProperties(options) {
+ var _this6;
+
+ _classCallCheck(this, NormalRangeProperties);
+
+ _this6 = _super5.call(this);
+
+ if (options.values === undefined) {
+ throw new Error("Option 'values' is required for NormalRangeProperties.");
+ }
+
+ if (!(_typeof(options.values) === "object" || options.values instanceof Array)) {
+ throw new Error("Option 'values' must have type Array.");
+ }
+
+ options.values.forEach(function (value) {
+ if (!options.concept || options.concept.constructor !== NumContentItem) {
+ throw new Error("Items of option 'values' must have type NumContentItem.");
+ }
+
+ _this6.push(value);
+ });
+
+ if (options.description !== undefined) {
+ new TextContentItem({
+ name: new CodedConcept({
+ value: "121407",
+ schemeDesignator: "DCM",
+ meaning: "Normal Range Description"
+ }),
+ value: options.authority,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this6.push(authorityItem);
+ }
+
+ if (options.authority !== undefined) {
+ var _authorityItem2 = new TextContentItem({
+ name: new CodedConcept({
+ value: "121408",
+ schemeDesignator: "DCM",
+ meaning: "Normal Range Authority"
+ }),
+ value: options.authority,
+ relationshipType: RelationshipTypes.HAS_PROPERTIES
+ });
+
+ _this6.push(_authorityItem2);
+ }
+
+ return _this6;
+ }
+
+ return _createClass(NormalRangeProperties);
+ }(Template);
+
+ var ObservationContext = /*#__PURE__*/function (_Template5) {
+ _inherits(ObservationContext, _Template5);
+
+ var _super6 = _createSuper(ObservationContext);
+
+ function ObservationContext(options) {
+ var _this8;
+
+ var _this7;
+
+ _classCallCheck(this, ObservationContext);
+
+ _this7 = _super6.call(this);
+
+ if (options.observerPersonContext === undefined) {
+ throw new Error("Option 'observerPersonContext' is required for ObservationContext.");
+ }
+
+ if (options.observerPersonContext.constructor !== ObserverContext) {
+ throw new Error("Option 'observerPersonContext' must have type ObserverContext");
+ }
+
+ (_this8 = _this7).push.apply(_this8, _toConsumableArray(options.observerPersonContext));
+
+ if (options.observerDeviceContext !== undefined) {
+ var _this9;
+
+ if (options.observerDeviceContext.constructor !== ObserverContext) {
+ throw new Error("Option 'observerDeviceContext' must have type ObserverContext");
+ }
+
+ (_this9 = _this7).push.apply(_this9, _toConsumableArray(options.observerDeviceContext));
+ }
+
+ if (options.subjectContext !== undefined) {
+ var _this10;
+
+ if (options.subjectContext.constructor !== SubjectContext) {
+ throw new Error("Option 'subjectContext' must have type SubjectContext");
+ }
+
+ (_this10 = _this7).push.apply(_this10, _toConsumableArray(options.subjectContext));
+ }
+
+ return _this7;
+ }
+
+ return _createClass(ObservationContext);
+ }(Template);
+
+ var ObserverContext = /*#__PURE__*/function (_Template6) {
+ _inherits(ObserverContext, _Template6);
+
+ var _super7 = _createSuper(ObserverContext);
+
+ function ObserverContext(options) {
+ var _this12;
+
+ var _this11;
+
+ _classCallCheck(this, ObserverContext);
+
+ _this11 = _super7.call(this);
+
+ if (options.observerType === undefined) {
+ throw new Error("Option 'observerType' is required for ObserverContext.");
+ } else {
+ if (options.observerType.constructor !== Code && options.observerType.constructor !== CodedConcept) {
+ throw new Error("Option 'observerType' must have type Code or CodedConcept.");
+ }
+ }
+
+ var observerTypeItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121005",
+ meaning: "Observer Type",
+ schemeDesignator: "DCM"
+ }),
+ value: options.observerType,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this11.push(observerTypeItem);
+
+ if (options.observerIdentifyingAttributes === undefined) {
+ throw new Error("Option 'observerIdentifyingAttributes' is required for ObserverContext.");
+ } // FIXME
+
+
+ var person = new CodedConcept({
+ value: "121006",
+ schemeDesignator: "DCM",
+ meaning: "Person"
+ });
+ var device = new CodedConcept({
+ value: "121007",
+ schemeDesignator: "DCM",
+ meaning: "Device"
+ });
+
+ if (person.equals(options.observerType)) {
+ if (options.observerIdentifyingAttributes.constructor !== PersonObserverIdentifyingAttributes) {
+ throw new Error("Option 'observerIdentifyingAttributes' must have type " + "PersonObserverIdentifyingAttributes for 'Person' observer type.");
+ }
+ } else if (device.equals(options.observerType)) {
+ if (options.observerIdentifyingAttributes.constructor !== DeviceObserverIdentifyingAttributes) {
+ throw new Error("Option 'observerIdentifyingAttributes' must have type " + "DeviceObserverIdentifyingAttributes for 'Device' observer type.");
+ }
+ } else {
+ throw new Error("Option 'oberverType' must be either 'Person' or 'Device'.");
+ }
+
+ (_this12 = _this11).push.apply(_this12, _toConsumableArray(options.observerIdentifyingAttributes));
+
+ return _this11;
+ }
+
+ return _createClass(ObserverContext);
+ }(Template);
+
+ var PersonObserverIdentifyingAttributes = /*#__PURE__*/function (_Template7) {
+ _inherits(PersonObserverIdentifyingAttributes, _Template7);
+
+ var _super8 = _createSuper(PersonObserverIdentifyingAttributes);
+
+ function PersonObserverIdentifyingAttributes(options) {
+ var _this13;
+
+ _classCallCheck(this, PersonObserverIdentifyingAttributes);
+
+ _this13 = _super8.call(this);
+
+ if (options.name === undefined) {
+ throw new Error("Option 'name' is required for PersonObserverIdentifyingAttributes.");
+ }
+
+ var nameItem = new PNameContentItem({
+ name: new CodedConcept({
+ value: "121008",
+ meaning: "Person Observer Name",
+ schemeDesignator: "DCM"
+ }),
+ value: options.name,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this13.push(nameItem);
+
+ if (options.loginName !== undefined) {
+ var loginNameItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "128774",
+ meaning: "Person Observer's Login Name",
+ schemeDesignator: "DCM"
+ }),
+ value: options.loginName,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this13.push(loginNameItem);
+ }
+
+ if (options.organizationName !== undefined) {
+ var organizationNameItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121009",
+ meaning: "Person Observer's Organization Name",
+ schemeDesignator: "DCM"
+ }),
+ value: options.organizationName,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this13.push(organizationNameItem);
+ }
+
+ if (options.roleInOrganization !== undefined) {
+ var roleInOrganizationItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121010",
+ meaning: "Person Observer's Role in the Organization",
+ schemeDesignator: "DCM"
+ }),
+ value: options.roleInOrganization,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this13.push(roleInOrganizationItem);
+ }
+
+ if (options.roleInProcedure !== undefined) {
+ var roleInProcedureItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121011",
+ meaning: "Person Observer's Role in this Procedure",
+ schemeDesignator: "DCM"
+ }),
+ value: options.roleInProcedure,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this13.push(roleInProcedureItem);
+ }
+
+ return _this13;
+ }
+
+ return _createClass(PersonObserverIdentifyingAttributes);
+ }(Template);
+
+ var DeviceObserverIdentifyingAttributes = /*#__PURE__*/function (_Template8) {
+ _inherits(DeviceObserverIdentifyingAttributes, _Template8);
+
+ var _super9 = _createSuper(DeviceObserverIdentifyingAttributes);
+
+ function DeviceObserverIdentifyingAttributes(options) {
+ var _this14;
+
+ _classCallCheck(this, DeviceObserverIdentifyingAttributes);
+
+ _this14 = _super9.call(this);
+
+ if (options.uid === undefined) {
+ throw new Error("Option 'uid' is required for DeviceObserverIdentifyingAttributes.");
+ }
+
+ var deviceObserverItem = new UIDRefContentItem({
+ name: new CodedConcept({
+ value: "121012",
+ meaning: "Device Observer UID",
+ schemeDesignator: "DCM"
+ }),
+ value: options.uid,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this14.push(deviceObserverItem);
+
+ if (options.manufacturerName !== undefined) {
+ var manufacturerNameItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121013",
+ meaning: "Device Observer Manufacturer",
+ schemeDesignator: "DCM"
+ }),
+ value: options.manufacturerName,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this14.push(manufacturerNameItem);
+ }
+
+ if (options.modelName !== undefined) {
+ var modelNameItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121015",
+ meaning: "Device Observer Model Name",
+ schemeDesignator: "DCM"
+ }),
+ value: options.modelName,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this14.push(modelNameItem);
+ }
+
+ if (options.serialNumber !== undefined) {
+ var serialNumberItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121016",
+ meaning: "Device Observer Serial Number",
+ schemeDesignator: "DCM"
+ }),
+ value: options.serialNumber,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this14.push(serialNumberItem);
+ }
+
+ if (options.physicalLocation !== undefined) {
+ var physicalLocationItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121017",
+ meaning: "Device Observer Physical Location During Observation",
+ schemeDesignator: "DCM"
+ }),
+ value: options.physicalLocation,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this14.push(physicalLocationItem);
+ }
+
+ if (options.roleInProcedure !== undefined) {
+ var roleInProcedureItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "113876",
+ meaning: "Device Role in Procedure",
+ schemeDesignator: "DCM"
+ }),
+ value: options.roleInProcedure,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this14.push(roleInProcedureItem);
+ }
+
+ return _this14;
+ }
+
+ return _createClass(DeviceObserverIdentifyingAttributes);
+ }(Template);
+
+ var SubjectContext = /*#__PURE__*/function (_Template9) {
+ _inherits(SubjectContext, _Template9);
+
+ var _super10 = _createSuper(SubjectContext);
+
+ function SubjectContext(options) {
+ var _this16;
+
+ var _this15;
+
+ _classCallCheck(this, SubjectContext);
+
+ _this15 = _super10.call(this);
+
+ if (options.subjectClass === undefined) {
+ throw new Error("Option 'subjectClass' is required for SubjectContext.");
+ }
+
+ if (options.subjectClassSpecificContext === undefined) {
+ throw new Error("Option 'subjectClassSpecificContext' is required for SubjectContext.");
+ }
+
+ var subjectClassItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121024",
+ meaning: "Subject Class",
+ schemeDesignator: "DCM"
+ }),
+ value: options.subjectClass,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this15.push(subjectClassItem);
+
+ var fetus = new CodedConcept({
+ value: "121026 ",
+ schemeDesignator: "DCM",
+ meaning: "Fetus"
+ });
+ var specimen = new CodedConcept({
+ value: "121027",
+ schemeDesignator: "DCM",
+ meaning: "Specimen"
+ });
+ var device = new CodedConcept({
+ value: "121192",
+ schemeDesignator: "DCM",
+ meaning: "Device Subject"
+ });
+
+ if (fetus.equals(options.subjectClass)) {
+ if (options.subjectClassSpecificContext.constructor !== SubjectContextFetus) {
+ throw new Error("Option 'subjectClass' must have type " + "SubjectContextFetus for 'Fetus' subject class.");
+ }
+ } else if (specimen.equals(options.subjectClass)) {
+ if (options.subjectClassSpecificContext.constructor !== SubjectContextSpecimen) {
+ throw new Error("Option 'subjectClass' must have type " + "SubjectContextSpecimen for 'Specimen' subject class.");
+ }
+ } else if (device.equals(options.subjectClass)) {
+ if (options.subjectClassSpecificContext.constructor !== SubjectContextDevice) {
+ throw new Error("Option 'subjectClass' must have type " + "SubjectContextDevice for 'Device' subject class.");
+ }
+ } else {
+ throw new Error("Option 'subjectClass' must be either 'Fetus', 'Specimen', or 'Device'.");
+ }
+
+ (_this16 = _this15).push.apply(_this16, _toConsumableArray(options.subjectClassSpecificContext));
+
+ return _this15;
+ }
+
+ return _createClass(SubjectContext);
+ }(Template);
+
+ var SubjectContextFetus = /*#__PURE__*/function (_Template10) {
+ _inherits(SubjectContextFetus, _Template10);
+
+ var _super11 = _createSuper(SubjectContextFetus);
+
+ function SubjectContextFetus(options) {
+ var _this17;
+
+ _classCallCheck(this, SubjectContextFetus);
+
+ _this17 = _super11.call(this);
+
+ if (options.subjectID === undefined) {
+ throw new Error("Option 'subjectID' is required for SubjectContextFetus.");
+ }
+
+ var subjectIdItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121030",
+ meaning: "Subject ID",
+ schemeDesignator: "DCM"
+ }),
+ value: options.subjectID,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this17.push(subjectIdItem);
+
+ return _this17;
+ }
+
+ return _createClass(SubjectContextFetus);
+ }(Template);
+
+ var SubjectContextSpecimen = /*#__PURE__*/function (_Template11) {
+ _inherits(SubjectContextSpecimen, _Template11);
+
+ var _super12 = _createSuper(SubjectContextSpecimen);
+
+ function SubjectContextSpecimen(options) {
+ var _this18;
+
+ _classCallCheck(this, SubjectContextSpecimen);
+
+ _this18 = _super12.call(this);
+
+ if (options.uid === undefined) {
+ throw new Error("Option 'uid' is required for SubjectContextSpecimen.");
+ }
+
+ var specimenUidItem = new UIDRefContentItem({
+ name: new CodedConcept({
+ value: "121039",
+ meaning: "Specimen UID",
+ schemeDesignator: "DCM"
+ }),
+ value: options.uid,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this18.push(specimenUidItem);
+
+ if (options.identifier !== undefined) {
+ var specimenIdentifierItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121041",
+ meaning: "Specimen Identifier",
+ schemeDesignator: "DCM"
+ }),
+ value: options.identifier,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this18.push(specimenIdentifierItem);
+ }
+
+ if (options.containerIdentifier !== undefined) {
+ var containerIdentifierItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "111700",
+ meaning: "Specimen Container Identifier",
+ schemeDesignator: "DCM"
+ }),
+ value: options.containerIdentifier,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this18.push(containerIdentifierItem);
+ }
+
+ if (options.specimenType !== undefined) {
+ var specimenTypeItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "R-00254",
+ meaning: "Specimen Type",
+ schemeDesignator: "DCM"
+ }),
+ value: options.specimenType,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this18.push(specimenTypeItem);
+ }
+
+ return _this18;
+ }
+
+ return _createClass(SubjectContextSpecimen);
+ }(Template);
+
+ var SubjectContextDevice = /*#__PURE__*/function (_Template12) {
+ _inherits(SubjectContextDevice, _Template12);
+
+ _createSuper(SubjectContextDevice);
+
+ function SubjectContextDevice(options) {
+ var _this19;
+
+ _classCallCheck(this, SubjectContextDevice);
+
+ if (options.name === undefined) {
+ throw new Error("Option 'name' is required for SubjectContextDevice.");
+ }
+
+ var deviceNameItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121193",
+ meaning: "Device Subject Name",
+ schemeDesignator: "DCM"
+ }),
+ value: options.name,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this19.push(deviceNameItem);
+
+ if (options.uid !== undefined) {
+ var deviceUidItem = new UIDRefContentItem({
+ name: new CodedConcept({
+ value: "121198",
+ meaning: "Device Subject UID",
+ schemeDesignator: "DCM"
+ }),
+ value: options.uid,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this19.push(deviceUidItem);
+ }
+
+ if (options.manufacturerName !== undefined) {
+ var manufacturerNameItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121194",
+ meaning: "Device Subject Manufacturer",
+ schemeDesignator: "DCM"
+ }),
+ value: options.manufacturerName,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this19.push(manufacturerNameItem);
+ }
+
+ if (options.modelName !== undefined) {
+ var modelNameItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121195",
+ meaning: "Device Subject Model Name",
+ schemeDesignator: "DCM"
+ }),
+ value: options.modelName,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this19.push(modelNameItem);
+ }
+
+ if (options.serialNumber !== undefined) {
+ var serialNumberItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121196",
+ meaning: "Device Subject Serial Number",
+ schemeDesignator: "DCM"
+ }),
+ value: options.serialNumber,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this19.push(serialNumberItem);
+ }
+
+ if (options.physicalLocation !== undefined) {
+ var physicalLocationItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "121197",
+ meaning: "Device Subject Physical Location During Observation",
+ schemeDesignator: "DCM"
+ }),
+ value: options.physicalLocation,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this19.push(physicalLocationItem);
+ }
+
+ return _possibleConstructorReturn(_this19);
+ }
+
+ return _createClass(SubjectContextDevice);
+ }(Template);
+
+ var LanguageOfContentItemAndDescendants = /*#__PURE__*/function (_Template13) {
+ _inherits(LanguageOfContentItemAndDescendants, _Template13);
+
+ var _super14 = _createSuper(LanguageOfContentItemAndDescendants);
+
+ function LanguageOfContentItemAndDescendants(options) {
+ var _this20;
+
+ _classCallCheck(this, LanguageOfContentItemAndDescendants);
+
+ _this20 = _super14.call(this);
+
+ if (options.language === undefined) {
+ options.language = new CodedConcept({
+ value: "en-US",
+ schemeDesignator: "RFC5646",
+ meaning: "English (United States)"
+ });
+ }
+
+ var languageItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121049",
+ meaning: "Language of Content Item and Descendants",
+ schemeDesignator: "DCM"
+ }),
+ value: options.language,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+
+ _this20.push(languageItem);
+
+ return _this20;
+ }
+
+ return _createClass(LanguageOfContentItemAndDescendants);
+ }(Template);
+
+ var _MeasurementsAndQualitatitiveEvaluations = /*#__PURE__*/function (_Template14) {
+ _inherits(_MeasurementsAndQualitatitiveEvaluations, _Template14);
+
+ var _super15 = _createSuper(_MeasurementsAndQualitatitiveEvaluations);
+
+ function _MeasurementsAndQualitatitiveEvaluations(options) {
+ var _groupItem$ContentSeq;
+
+ var _this21;
+
+ _classCallCheck(this, _MeasurementsAndQualitatitiveEvaluations);
+
+ _this21 = _super15.call(this);
+ var groupItem = new ContainerContentItem({
+ name: new CodedConcept({
+ value: "125007",
+ meaning: "Measurement Group",
+ schemeDesignator: "DCM"
+ }),
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+ groupItem.ContentSequence = new ContentSequence$1();
+
+ if (options.trackingIdentifier === undefined) {
+ throw new Error("Option 'trackingIdentifier' is required for measurements group.");
+ }
+
+ if (options.trackingIdentifier.constructor !== TrackingIdentifier) {
+ throw new Error("Option 'trackingIdentifier' must have type TrackingIdentifier.");
+ }
+
+ if (options.trackingIdentifier.length !== 2) {
+ throw new Error("Option 'trackingIdentifier' must include a human readable tracking " + "identifier and a tracking unique identifier.");
+ }
+
+ (_groupItem$ContentSeq = groupItem.ContentSequence).push.apply(_groupItem$ContentSeq, _toConsumableArray(options.trackingIdentifier));
+
+ if (options.session !== undefined) {
+ var sessionItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "C67447",
+ meaning: "Activity Session",
+ schemeDesignator: "NCIt"
+ }),
+ value: options.session,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+ groupItem.ContentSequence.push(sessionItem);
+ }
+
+ if (options.findingType !== undefined) {
+ var findingTypeItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121071",
+ meaning: "Finding",
+ schemeDesignator: "DCM"
+ }),
+ value: options.findingType,
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+ groupItem.ContentSequence.push(findingTypeItem);
+ }
+
+ if (options.timePointContext !== undefined) {
+ var _groupItem$ContentSeq2;
+
+ if (options.timePointContext.constructor !== TimePointContext) {
+ throw new Error("Option 'timePointContext' must have type TimePointContext.");
+ }
+
+ (_groupItem$ContentSeq2 = groupItem.ContentSequence).push.apply(_groupItem$ContentSeq2, _toConsumableArray(timePointContext));
+ }
+
+ if (options.referencedRealWorldValueMap !== undefined) {
+ if (options.referencedRealWorldValueMap.constructor !== ReferencedRealWorldValueMap) {
+ throw new Error("Option 'referencedRealWorldValleMap' must have type " + "ReferencedRealWorldValueMap.");
+ }
+
+ groupItem.ContentSequence.push(options.referencedRealWorldValueMap);
+ }
+
+ if (options.measurements !== undefined) {
+ if (!(_typeof(options.measurements) === "object" || options.measurements instanceof Array)) {
+ throw new Error("Option 'measurements' must have type Array.");
+ }
+
+ options.measurements.forEach(function (measurement) {
+ console.log(measurement);
+
+ if (!measurement || measurement.constructor !== NumContentItem) {
+ throw new Error("Items of option 'measurement' must have type NumContentItem.");
+ }
+
+ groupItem.ContentSequence.push(measurement);
+ });
+ }
+
+ if (options.qualitativeEvaluations !== undefined) {
+ if (!(_typeof(options.qualitativeEvaluations) === "object" || options.qualitativeEvaluations instanceof Array)) {
+ throw new Error("Option 'qualitativeEvaluations' must have type Array.");
+ }
+
+ options.qualitativeEvaluations.forEach(function (evaluation) {
+ if (!evaluation || evaluation.constructor !== CodeContentItem && evaluation.constructor !== TextContentItem) {
+ throw new Error("Items of option 'qualitativeEvaluations' must have type " + "CodeContentItem or TextContentItem.");
+ }
+
+ groupItem.ContentSequence.push(evaluation);
+ });
+ }
+
+ _this21.push(groupItem);
+
+ return _this21;
+ }
+
+ return _createClass(_MeasurementsAndQualitatitiveEvaluations);
+ }(Template);
+
+ var _ROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_MeasurementsAndQuali) {
+ _inherits(_ROIMeasurementsAndQualitativeEvaluations, _MeasurementsAndQuali);
+
+ var _super16 = _createSuper(_ROIMeasurementsAndQualitativeEvaluations);
+
+ function _ROIMeasurementsAndQualitativeEvaluations(options) {
+ var _this22;
+
+ _classCallCheck(this, _ROIMeasurementsAndQualitativeEvaluations);
+
+ _this22 = _super16.call(this, {
+ trackingIdentifier: options.trackingIdentifier,
+ timePointContext: options.timePointContext,
+ findingType: options.findingType,
+ session: options.session,
+ measurements: options.measurements,
+ qualitativeEvaluations: options.qualitativeEvaluations
+ });
+ var groupItem = _this22[0];
+ var wereReferencesProvided = [options.referencedRegions !== undefined, options.referencedVolume !== undefined, options.referencedSegmentation !== undefined];
+ var numReferences = wereReferencesProvided.reduce(function (a, b) {
+ return a + b;
+ });
+
+ if (numReferences === 0) {
+ throw new Error("One of the following options must be provided: " + "'referencedRegions', 'referencedVolume', or " + "'referencedSegmentation'.");
+ } else if (numReferences > 1) {
+ throw new Error("Only one of the following options should be provided: " + "'referencedRegions', 'referencedVolume', or " + "'referencedSegmentation'.");
+ }
+
+ if (options.referencedRegions !== undefined) {
+ if (!(_typeof(options.referencedRegions) === "object" || options.referencedRegions instanceof Array)) {
+ throw new Error("Option 'referencedRegions' must have type Array.");
+ }
+
+ if (options.referencedRegions.length === 0) {
+ throw new Error("Option 'referencedRegion' must have non-zero length.");
+ }
+
+ options.referencedRegions.forEach(function (region) {
+ if (region === undefined || region.constructor !== ImageRegion && region.constructor !== ImageRegion3D) {
+ throw new Error("Items of option 'referencedRegion' must have type " + "ImageRegion or ImageRegion3D.");
+ }
+
+ groupItem.ContentSequence.push(region);
+ });
+ } else if (options.referencedVolume !== undefined) {
+ if (options.referencedVolume.constructor !== VolumeSurface) {
+ throw new Error("Items of option 'referencedVolume' must have type VolumeSurface.");
+ }
+
+ groupItem.ContentSequence.push(referencedVolume);
+ } else if (options.referencedSegmentation !== undefined) {
+ if (options.referencedSegmentation.constructor !== ReferencedSegmentation && options.referencedSegmentation.constructor !== ReferencedSegmentationFrame) {
+ throw new Error("Option 'referencedSegmentation' must have type " + "ReferencedSegmentation or ReferencedSegmentationFrame.");
+ }
+
+ groupItem.ContentSequence.push(referencedSegmentation);
+ }
+
+ _this22[0] = groupItem;
+ return _this22;
+ }
+
+ return _createClass(_ROIMeasurementsAndQualitativeEvaluations);
+ }(_MeasurementsAndQualitatitiveEvaluations);
+
+ var PlanarROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_ROIMeasurementsAndQu) {
+ _inherits(PlanarROIMeasurementsAndQualitativeEvaluations, _ROIMeasurementsAndQu);
+
+ var _super17 = _createSuper(PlanarROIMeasurementsAndQualitativeEvaluations);
+
+ function PlanarROIMeasurementsAndQualitativeEvaluations(options) {
+ _classCallCheck(this, PlanarROIMeasurementsAndQualitativeEvaluations);
+
+ var wereReferencesProvided = [options.referencedRegion !== undefined, options.referencedSegmentation !== undefined];
+ var numReferences = wereReferencesProvided.reduce(function (a, b) {
+ return a + b;
+ });
+
+ if (numReferences === 0) {
+ throw new Error("One of the following options must be provided: " + "'referencedRegion', 'referencedSegmentation'.");
+ } else if (numReferences > 1) {
+ throw new Error("Only one of the following options should be provided: " + "'referencedRegion', 'referencedSegmentation'.");
+ }
+
+ return _super17.call(this, {
+ trackingIdentifier: options.trackingIdentifier,
+ referencedRegions: [options.referencedRegion],
+ referencedSegmentation: options.referencedSegmentation,
+ referencedRealWorldValueMap: options.referencedRealWorldValueMap,
+ timePointContext: options.timePointContext,
+ findingType: options.findingType,
+ session: options.session,
+ measurements: options.measurements,
+ qualitativeEvaluations: options.qualitativeEvaluations
+ });
+ }
+
+ return _createClass(PlanarROIMeasurementsAndQualitativeEvaluations);
+ }(_ROIMeasurementsAndQualitativeEvaluations);
+
+ var VolumetricROIMeasurementsAndQualitativeEvaluations = /*#__PURE__*/function (_ROIMeasurementsAndQu2) {
+ _inherits(VolumetricROIMeasurementsAndQualitativeEvaluations, _ROIMeasurementsAndQu2);
+
+ var _super18 = _createSuper(VolumetricROIMeasurementsAndQualitativeEvaluations);
+
+ function VolumetricROIMeasurementsAndQualitativeEvaluations(options) {
+ _classCallCheck(this, VolumetricROIMeasurementsAndQualitativeEvaluations);
+
+ return _super18.call(this, {
+ trackingIdentifier: options.trackingIdentifier,
+ referencedRegions: options.referencedRegions,
+ referencedSegmentation: options.referencedSegmentation,
+ referencedRealWorldValueMap: options.referencedRealWorldValueMap,
+ timePointContext: options.timePointContext,
+ findingType: options.findingType,
+ session: options.session,
+ measurements: options.measurements,
+ qualitativeEvaluations: options.qualitativeEvaluations
+ });
+ }
+
+ return _createClass(VolumetricROIMeasurementsAndQualitativeEvaluations);
+ }(_ROIMeasurementsAndQualitativeEvaluations);
+
+ var MeasurementsDerivedFromMultipleROIMeasurements = /*#__PURE__*/function (_Template15) {
+ _inherits(MeasurementsDerivedFromMultipleROIMeasurements, _Template15);
+
+ _createSuper(MeasurementsDerivedFromMultipleROIMeasurements);
+
+ function MeasurementsDerivedFromMultipleROIMeasurements(options) {
+ var _this23;
+
+ _classCallCheck(this, MeasurementsDerivedFromMultipleROIMeasurements);
+
+ if (options.derivation === undefined) {
+ throw new Error("Option 'derivation' is required for " + "MeasurementsDerivedFromMultipleROIMeasurements.");
+ } // FIXME
+
+
+ var valueItem = new NumContentItem({
+ name: options.derivation
+ });
+ valueItem.ContentSequence = new ContentSequence$1();
+
+ if (options.measurementGroups === undefined) {
+ throw new Error("Option 'measurementGroups' is required for " + "MeasurementsDerivedFromMultipleROIMeasurements.");
+ }
+
+ if (!(_typeof(options.measurementGroups) === "object" || options.measurementGroups instanceof Array)) {
+ throw new Error("Option 'measurementGroups' must have type Array.");
+ }
+
+ options.measurementGroups.forEach(function (group) {
+ var _valueItem$ContentSeq4;
+
+ if (!group || group.constructor !== PlanarROIMeasurementsAndQualitativeEvaluations && group.constructor !== VolumetricROIMeasurementsAndQualitativeEvaluations) {
+ throw new Error("Items of option 'measurementGroups' must have type " + "PlanarROIMeasurementsAndQualitativeEvaluations or " + "VolumetricROIMeasurementsAndQualitativeEvaluations.");
+ }
+
+ group[0].RelationshipType = "R-INFERRED FROM";
+
+ (_valueItem$ContentSeq4 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq4, _toConsumableArray(group));
+ });
+
+ if (options.measurementProperties !== undefined) {
+ var _valueItem$ContentSeq5;
+
+ if (options.measurementProperties.constructor !== MeasurementProperties) {
+ throw new Error("Option 'measurementProperties' must have type MeasurementProperties.");
+ }
+
+ (_valueItem$ContentSeq5 = valueItem.ContentSequence).push.apply(_valueItem$ContentSeq5, _toConsumableArray(options.measurementProperties));
+ }
+
+ _this23.push(valueItem);
+
+ return _possibleConstructorReturn(_this23);
+ }
+
+ return _createClass(MeasurementsDerivedFromMultipleROIMeasurements);
+ }(Template);
+
+ var MeasurementAndQualitativeEvaluationGroup = /*#__PURE__*/function (_MeasurementsAndQuali2) {
+ _inherits(MeasurementAndQualitativeEvaluationGroup, _MeasurementsAndQuali2);
+
+ var _super20 = _createSuper(MeasurementAndQualitativeEvaluationGroup);
+
+ function MeasurementAndQualitativeEvaluationGroup(options) {
+ _classCallCheck(this, MeasurementAndQualitativeEvaluationGroup);
+
+ return _super20.call(this, {
+ trackingIdentifier: options.trackingIdentifier,
+ referencedRealWorldValueMap: options.referencedRealWorldValueMap,
+ timePointContext: options.timePointContext,
+ findingType: options.findingType,
+ session: options.session,
+ measurements: options.measurements,
+ qualitativeEvaluations: options.qualitativeEvaluations
+ });
+ }
+
+ return _createClass(MeasurementAndQualitativeEvaluationGroup);
+ }(_MeasurementsAndQualitatitiveEvaluations);
+
+ var ROIMeasurements = /*#__PURE__*/function (_Template16) {
+ _inherits(ROIMeasurements, _Template16);
+
+ var _super21 = _createSuper(ROIMeasurements);
+
+ function ROIMeasurements(options) {
+ var _this24;
+
+ _classCallCheck(this, ROIMeasurements);
+
+ _this24 = _super21.call(this);
+
+ if (options.method !== undefined) {
+ var methodItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "370129005",
+ meaning: "Measurement Method",
+ schemeDesignator: "SCT"
+ }),
+ value: options.method,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+
+ _this24.push(methodItem);
+ }
+
+ if (options.findingSites !== undefined) {
+ if (!(_typeof(options.findingSites) === "object" || options.findingSites instanceof Array)) {
+ throw new Error("Option 'findingSites' must have type Array.");
+ }
+
+ options.findingSites.forEach(function (site) {
+ if (!site || site.constructor !== FindingSite) {
+ throw new Error("Items of option 'findingSites' must have type FindingSite.");
+ }
+
+ _this24.push(site);
+ });
+ }
+
+ if (options.measurements === undefined) {
+ throw new Error("Options 'measurements' is required ROIMeasurements.");
+ }
+
+ if (!(_typeof(options.measurements) === "object" || options.measurements instanceof Array)) {
+ throw new Error("Option 'measurements' must have type Array.");
+ }
+
+ if (options.measurements.length === 0) {
+ throw new Error("Option 'measurements' must have non-zero length.");
+ }
+
+ options.measurements.forEach(function (measurement) {
+ if (!measurement || measurement.constructor !== Measurement) {
+ throw new Error("Items of option 'measurements' must have type Measurement.");
+ }
+
+ _this24.push(measurement);
+ });
+ return _this24;
+ }
+
+ return _createClass(ROIMeasurements);
+ }(Template);
+
+ var MeasurementReport = /*#__PURE__*/function (_Template17) {
+ _inherits(MeasurementReport, _Template17);
+
+ var _super22 = _createSuper(MeasurementReport);
+
+ function MeasurementReport(options) {
+ var _item$ContentSequence, _item$ContentSequence2, _item$ContentSequence3;
+
+ var _this25;
+
+ _classCallCheck(this, MeasurementReport);
+
+ _this25 = _super22.call(this);
+
+ if (options.observationContext === undefined) {
+ throw new Error("Option 'observationContext' is required for MeasurementReport.");
+ }
+
+ if (options.procedureReported === undefined) {
+ throw new Error("Option 'procedureReported' is required for MeasurementReport.");
+ }
+
+ var item = new ContainerContentItem({
+ name: new CodedConcept({
+ value: "126000",
+ schemeDesignator: "DCM",
+ meaning: "Imaging Measurement Report"
+ }),
+ templateID: "1500"
+ });
+ item.ContentSequence = new ContentSequence$1();
+
+ if (options.languageOfContentItemAndDescendants === undefined) {
+ throw new Error("Option 'languageOfContentItemAndDescendants' is required for " + "MeasurementReport.");
+ }
+
+ if (options.languageOfContentItemAndDescendants.constructor !== LanguageOfContentItemAndDescendants) {
+ throw new Error("Option 'languageOfContentItemAndDescendants' must have type " + "LanguageOfContentItemAndDescendants.");
+ }
+
+ (_item$ContentSequence = item.ContentSequence).push.apply(_item$ContentSequence, _toConsumableArray(options.languageOfContentItemAndDescendants));
+
+ (_item$ContentSequence2 = item.ContentSequence).push.apply(_item$ContentSequence2, _toConsumableArray(options.observationContext));
+
+ if (options.procedureReported.constructor === CodedConcept || options.procedureReported.constructor === Code) {
+ options.procedureReported = [options.procedureReported];
+ }
+
+ if (!(_typeof(options.procedureReported) === "object" || options.procedureReported instanceof Array)) {
+ throw new Error("Option 'procedureReported' must have type Array.");
+ }
+
+ options.procedureReported.forEach(function (procedure) {
+ var procedureItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "121058",
+ meaning: "Procedure reported",
+ schemeDesignator: "DCM"
+ }),
+ value: procedure,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+ item.ContentSequence.push(procedureItem);
+ });
+ var imageLibraryItem = new ImageLibrary();
+
+ (_item$ContentSequence3 = item.ContentSequence).push.apply(_item$ContentSequence3, _toConsumableArray(imageLibraryItem));
+
+ var wereOptionsProvided = [options.imagingMeasurements !== undefined, options.derivedImagingMeasurements !== undefined, options.qualitativeEvaluations !== undefined];
+ var numOptionsProvided = wereOptionsProvided.reduce(function (a, b) {
+ return a + b;
+ });
+
+ if (numOptionsProvided > 1) {
+ throw new Error("Only one of the following options should be provided: " + "'imagingMeasurements', 'derivedImagingMeasurement', " + "'qualitativeEvaluations'.");
+ }
+
+ if (options.imagingMeasurements !== undefined) {
+ var containerItem = new ContainerContentItem({
+ name: new CodedConcept({
+ value: "126010",
+ meaning: "Imaging Measurements",
+ schemeDesignator: "DCM"
+ }),
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+ containerItem.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.imagingMeasurements));
+ item.ContentSequence.push(containerItem);
+ } else if (options.derivedImagingMeasurements !== undefined) {
+ var _containerItem = new ContainerContentItem({
+ name: new CodedConcept({
+ value: "126011",
+ meaning: "Derived Imaging Measurements",
+ schemeDesignator: "DCM"
+ }),
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+
+ _containerItem.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.derivedImagingMeasurements));
+ item.ContentSequence.push(_containerItem);
+ } else if (options.qualitativeEvaluations !== undefined) {
+ var _containerItem2 = new ContainerContentItem({
+ name: new CodedConcept({
+ value: "C0034375",
+ meaning: "Qualitative Evaluations",
+ schemeDesignator: "UMLS"
+ }),
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+
+ _containerItem2.ContentSequence = _construct(ContentSequence$1, _toConsumableArray(options.qualitativeEvaluations));
+ item.ContentSequence.push(_containerItem2);
+ }
+
+ _this25.push(item);
+
+ return _this25;
+ }
+
+ return _createClass(MeasurementReport);
+ }(Template);
+
+ var TimePointContext = /*#__PURE__*/function (_Template18) {
+ _inherits(TimePointContext, _Template18);
+
+ _createSuper(TimePointContext);
+
+ function TimePointContext(options) {
+ var _this26;
+
+ _classCallCheck(this, TimePointContext);
+
+ if (options.timePoint === undefined) {
+ throw new Error("Option 'timePoint' is required for TimePointContext.");
+ }
+
+ var timePointItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "C2348792",
+ meaning: "Time Point",
+ schemeDesignator: "UMLS"
+ }),
+ value: options.timePoint,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this26.push(timePointItem);
+
+ if (options.timePointType !== undefined) {
+ var timePointTypeItem = new CodeContentItem({
+ name: new CodedConcept({
+ value: "126072",
+ meaning: "Time Point Type",
+ schemeDesignator: "DCM"
+ }),
+ value: options.timePointType,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this26.push(timePointTypeItem);
+ }
+
+ if (options.timePointOrder !== undefined) {
+ var timePointOrderItem = new NumContentItem({
+ name: new CodedConcept({
+ value: "126073",
+ meaning: "Time Point Order",
+ schemeDesignator: "DCM"
+ }),
+ value: options.timePointOrder,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this26.push(timePointOrderItem);
+ }
+
+ if (options.subjectTimePointIdentifier !== undefined) {
+ var subjectTimePointIdentifierItem = new NumContentItem({
+ name: new CodedConcept({
+ value: "126070",
+ meaning: "Subject Time Point Identifier",
+ schemeDesignator: "DCM"
+ }),
+ value: options.subjectTimePointIdentifier,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this26.push(subjectTimePointIdentifierItem);
+ }
+
+ if (options.protocolTimePointIdentifier !== undefined) {
+ var protocolTimePointIdentifierItem = new NumContentItem({
+ name: new CodedConcept({
+ value: "126071",
+ meaning: "Protocol Time Point Identifier",
+ schemeDesignator: "DCM"
+ }),
+ value: options.protocolTimePointIdentifier,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this26.push(protocolTimePointIdentifierItem);
+ }
+
+ if (options.temporalOffsetFromEvent !== undefined) {
+ if (options.temporalOffsetFromEvent.constructor !== LongitudinalTemporalOffsetFromEventContentItem) {
+ throw new Error("Option 'temporalOffsetFromEvent' must have type " + "LongitudinalTemporalOffsetFromEventContentItem.");
+ }
+
+ _this26.push(temporalOffsetFromEvent);
+ }
+
+ return _possibleConstructorReturn(_this26);
+ }
+
+ return _createClass(TimePointContext);
+ }(Template);
+
+ var ImageLibrary = /*#__PURE__*/function (_Template19) {
+ _inherits(ImageLibrary, _Template19);
+
+ var _super24 = _createSuper(ImageLibrary);
+
+ function ImageLibrary(options) {
+ var _this27;
+
+ _classCallCheck(this, ImageLibrary);
+
+ _this27 = _super24.call(this);
+ var libraryItem = new ContainerContentItem({
+ name: new CodedConcept({
+ value: "111028",
+ meaning: "Image Library",
+ schemeDesignator: "DCM"
+ }),
+ relationshipType: RelationshipTypes.CONTAINS
+ });
+
+ _this27.push(libraryItem);
+
+ return _this27;
+ }
+
+ return _createClass(ImageLibrary);
+ }(Template);
+
+ var AlgorithmIdentification = /*#__PURE__*/function (_Template20) {
+ _inherits(AlgorithmIdentification, _Template20);
+
+ var _super25 = _createSuper(AlgorithmIdentification);
+
+ function AlgorithmIdentification(options) {
+ var _this28;
+
+ _classCallCheck(this, AlgorithmIdentification);
+
+ _this28 = _super25.call(this);
+
+ if (options.name === undefined) {
+ throw new Error("Option 'name' is required for AlgorithmIdentification.");
+ }
+
+ if (options.version === undefined) {
+ throw new Error("Option 'version' is required for AlgorithmIdentification.");
+ }
+
+ var nameItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "111001",
+ meaning: "Algorithm Name",
+ schemeDesignator: "DCM"
+ }),
+ value: options.name,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+
+ _this28.push(nameItem);
+
+ var versionItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "111003",
+ meaning: "Algorithm Version",
+ schemeDesignator: "DCM"
+ }),
+ value: options.version,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+
+ _this28.push(versionItem);
+
+ if (options.parameters !== undefined) {
+ if (!(_typeof(options.parameters) === "object" || options.parameters instanceof Array)) {
+ throw new Error("Option 'parameters' must have type Array.");
+ }
+
+ options.parameters.forEach(function (parameter) {
+ var parameterItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "111002",
+ meaning: "Algorithm Parameter",
+ schemeDesignator: "DCM"
+ }),
+ value: param,
+ relationshipType: RelationshipTypes.HAS_CONCEPT_MOD
+ });
+
+ _this28.push(parameterItem);
+ });
+ }
+
+ return _this28;
+ }
+
+ return _createClass(AlgorithmIdentification);
+ }(Template);
+
+ var TrackingIdentifier = /*#__PURE__*/function (_Template21) {
+ _inherits(TrackingIdentifier, _Template21);
+
+ var _super26 = _createSuper(TrackingIdentifier);
+
+ function TrackingIdentifier(options) {
+ var _this29;
+
+ _classCallCheck(this, TrackingIdentifier);
+
+ _this29 = _super26.call(this);
+
+ if (options.uid === undefined) {
+ throw new Error("Option 'uid' is required for TrackingIdentifier.");
+ }
+
+ if (options.identifier !== undefined) {
+ var trackingIdentifierItem = new TextContentItem({
+ name: new CodedConcept({
+ value: "112039",
+ meaning: "Tracking Identifier",
+ schemeDesignator: "DCM"
+ }),
+ value: options.identifier,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this29.push(trackingIdentifierItem);
+ }
+
+ var trackingUIDItem = new UIDRefContentItem({
+ name: new CodedConcept({
+ value: "112040",
+ meaning: "Tracking Unique Identifier",
+ schemeDesignator: "DCM"
+ }),
+ value: options.uid,
+ relationshipType: RelationshipTypes.HAS_OBS_CONTEXT
+ });
+
+ _this29.push(trackingUIDItem);
+
+ return _this29;
+ }
+
+ return _createClass(TrackingIdentifier);
+ }(Template);
+
+ var templates = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ AlgorithmIdentification: AlgorithmIdentification,
+ DeviceObserverIdentifyingAttributes: DeviceObserverIdentifyingAttributes,
+ ImageLibrary: ImageLibrary,
+ LanguageOfContentItemAndDescendants: LanguageOfContentItemAndDescendants,
+ Measurement: Measurement,
+ MeasurementAndQualitativeEvaluationGroup: MeasurementAndQualitativeEvaluationGroup,
+ MeasurementReport: MeasurementReport,
+ MeasurementsDerivedFromMultipleROIMeasurements: MeasurementsDerivedFromMultipleROIMeasurements,
+ ObservationContext: ObservationContext,
+ ObserverContext: ObserverContext,
+ PersonObserverIdentifyingAttributes: PersonObserverIdentifyingAttributes,
+ PlanarROIMeasurementsAndQualitativeEvaluations: PlanarROIMeasurementsAndQualitativeEvaluations,
+ ROIMeasurements: ROIMeasurements,
+ SubjectContext: SubjectContext,
+ SubjectContextDevice: SubjectContextDevice,
+ SubjectContextFetus: SubjectContextFetus,
+ SubjectContextSpecimen: SubjectContextSpecimen,
+ TimePointContext: TimePointContext,
+ TrackingIdentifier: TrackingIdentifier,
+ VolumetricROIMeasurementsAndQualitativeEvaluations: VolumetricROIMeasurementsAndQualitativeEvaluations
+ });
+
+ var _attributesToInclude = [// Patient
+ "00080054", "00080100", "00080102", "00080103", "00080104", "00080105", "00080106", "00080107", "0008010B", "0008010D", "0008010F", "00080117", "00080118", "00080119", "00080120", "00080121", "00080122", "00081120", "00081150", "00081155", "00081160", "00081190", "00081199", "00100010", "00100020", "00100021", "00100022", "00100024", "00100026", "00100027", "00100028", "00100030", "00100032", "00100033", "00100034", "00100035", "00100040", "00100200", "00100212", "00100213", "00100214", "00100215", "00100216", "00100217", "00100218", "00100219", "00100221", "00100222", "00100223", "00100229", "00101001", "00101002", "00101100", "00102160", "00102201", "00102202", "00102292", "00102293", "00102294", "00102295", "00102296", "00102297", "00102298", "00102299", "00104000", "00120062", "00120063", "00120064", "0020000D", "00400031", "00400032", "00400033", "00400035", "00400036", "00400039", "0040003A", "0040E001", "0040E010", "0040E020", "0040E021", "0040E022", "0040E023", "0040E024", "0040E025", "0040E030", "0040E031", "0062000B", "00880130", "00880140", // Patient Study
+ "00080100", "00080102", "00080103", "00080104", "00080105", "00080106", "00080107", "0008010B", "0008010D", "0008010F", "00080117", "00080118", "00080119", "00080120", "00080121", "00080122", "00081080", "00081084", "00101010", "00101020", "00101021", "00101022", "00101023", "00101024", "00101030", "00102000", "00102110", "00102180", "001021A0", "001021B0", "001021C0", "001021D0", "00102203", "00380010", "00380014", "00380060", "00380062", "00380064", "00380500", "00400031", "00400032", "00400033", // General Study
+ "00080020", "00080030", "00080050", "00080051", "00080080", "00080081", "00080082", "00080090", "00080096", "0008009C", "0008009D", "00080100", "00080102", "00080103", "00080104", "00080105", "00080106", "00080107", "0008010B", "0008010D", "0008010F", "00080117", "00080118", "00080119", "00080120", "00080121", "00080122", "00081030", "00081032", "00081048", "00081049", "00081060", "00081062", "00081110", "00081150", "00081155", "0020000D", "00200010", "00321034", "00400031", "00400032", "00400033", "00401012", "00401101", "00401102", "00401103", "00401104", // Clinical Trial Subject
+ "00120010", "00120020", "00120021", "00120030", "00120031", "00120040", "00120042", "00120081", "00120082", // Clinical Trial Study
+ "00120020", "00120050", "00120051", "00120052", "00120053", "00120083", "00120084", "00120085"];
+
+ var Comprehensive3DSR = /*#__PURE__*/_createClass(function Comprehensive3DSR(options) {
+ var _this = this;
+
+ _classCallCheck(this, Comprehensive3DSR);
+
+ if (options.evidence === undefined) {
+ throw new Error("Option 'evidence' is required for Comprehensive3DSR.");
+ }
+
+ if (!(_typeof(options.evidence) === "object" || options.evidence instanceof Array)) {
+ throw new Error("Option 'evidence' must have type Array.");
+ }
+
+ if (options.evidence.length === 0) {
+ throw new Error("Option 'evidence' must have non-zero length.");
+ }
+
+ if (options.content === undefined) {
+ throw new Error("Option 'content' is required for Comprehensive3DSR.");
+ }
+
+ if (options.seriesInstanceUID === undefined) {
+ throw new Error("Option 'seriesInstanceUID' is required for Comprehensive3DSR.");
+ }
+
+ if (options.seriesNumber === undefined) {
+ throw new Error("Option 'seriesNumber' is required for Comprehensive3DSR.");
+ }
+
+ if (options.seriesDescription === undefined) {
+ throw new Error("Option 'seriesDescription' is required for Comprehensive3DSR.");
+ }
+
+ if (options.sopInstanceUID === undefined) {
+ throw new Error("Option 'sopInstanceUID' is required for Comprehensive3DSR.");
+ }
+
+ if (options.instanceNumber === undefined) {
+ throw new Error("Option 'instanceNumber' is required for Comprehensive3DSR.");
+ }
+
+ if (options.manufacturer === undefined) {
+ throw new Error("Option 'manufacturer' is required for Comprehensive3DSR.");
+ }
+
+ this.SOPClassUID = "1.2.840.10008.5.1.4.1.1.88.34";
+ this.SOPInstanceUID = options.sopInstanceUID;
+ this.Modality = "SR";
+ this.SeriesDescription = options.seriesDescription;
+ this.SeriesInstanceUID = options.seriesInstanceUID;
+ this.SeriesNumber = options.seriesNumber;
+ this.InstanceNumber = options.instanceNumber;
+ this.Manufacturer = options.manufacturer;
+
+ if (options.institutionName !== undefined) {
+ this.InstitutionName = options.institutionName;
+
+ if (options.institutionalDepartmentName !== undefined) {
+ this.InstitutionalDepartmentName = options.institutionDepartmentName;
+ }
+ }
+
+ if (options.isComplete) {
+ this.CompletionFlag = "COMPLETE";
+ } else {
+ this.CompletionFlag = "PARTIAL";
+ }
+
+ if (options.isVerified) {
+ if (options.verifyingObserverName === undefined) {
+ throw new Error("Verifying Observer Name must be specified if SR document " + "has been verified.");
+ }
+
+ if (options.verifyingOrganization === undefined) {
+ throw new Error("Verifying Organization must be specified if SR document " + "has been verified.");
+ }
+
+ this.VerificationFlag = "VERIFIED";
+ var ovserver_item = {};
+ ovserver_item.VerifyingObserverName = options.verifyingObserverName;
+ ovserver_item.VerifyingOrganization = options.verifyingOrganization;
+ ovserver_item.VerificationDateTime = DicomMetaDictionary.dateTime();
+ this.VerifyingObserverSequence = [observer_item];
+ } else {
+ this.VerificationFlag = "UNVERIFIED";
+ }
+
+ if (options.isFinal) {
+ this.PreliminaryFlag = "FINAL";
+ } else {
+ this.PreliminaryFlag = "PRELIMINARY";
+ }
+
+ this.ContentDate = DicomMetaDictionary.date();
+ this.ContentTime = DicomMetaDictionary.time();
+ Object.keys(options.content).forEach(function (keyword) {
+ _this[keyword] = options.content[keyword];
+ });
+ var evidenceCollection = {};
+ options.evidence.forEach(function (evidence) {
+ if (evidence.StudyInstanceUID !== options.evidence[0].StudyInstanceUID) {
+ throw new Error("Referenced data sets must all belong to the same study.");
+ }
+
+ if (!(evidence.SeriesInstanceUID in evidenceCollection)) {
+ evidenceCollection[evidence.SeriesInstanceUID] = [];
+ }
+
+ var instanceItem = {};
+ instanceItem.ReferencedSOPClassUID = evidence.SOPClassUID;
+ instanceItem.ReferencedSOPInstanceUID = evidence.SOPInstanceUID;
+ evidenceCollection[evidence.SeriesInstanceUID].push(instanceItem);
+ });
+ var evidenceStudyItem = {};
+ evidenceStudyItem.StudyInstanceUID = options.evidence[0].StudyInstanceUID;
+ evidenceStudyItem.ReferencedSeriesSequence = [];
+ Object.keys(evidenceCollection).forEach(function (seriesInstanceUID) {
+ var seriesItem = {};
+ seriesItem.SeriesInstanceUID = seriesInstanceUID;
+ seriesItem.ReferencedSOPSequence = evidenceCollection[seriesInstanceUID];
+ evidenceStudyItem.ReferencedSeriesSequence.push(seriesItem);
+ });
+
+ if (options.requestedProcedures !== undefined) {
+ if (!(_typeof(options.requestedProcedures) === "object" || options.requestedProcedures instanceof Array)) {
+ throw new Error("Option 'requestedProcedures' must have type Array.");
+ }
+
+ this.ReferencedRequestSequence = _construct(ContentSequence, _toConsumableArray(options.requestedProcedures));
+ this.CurrentRequestedProcedureEvidenceSequence = [evidenceStudyItem];
+ } else {
+ this.PertinentOtherEvidenceSequence = [evidenceStudyItem];
+ }
+
+ if (options.previousVersions !== undefined) {
+ var preCollection = {};
+ options.previousVersions.forEach(function (version) {
+ if (version.StudyInstanceUID != options.evidence[0].StudyInstanceUID) {
+ throw new Error("Previous version data sets must belong to the same study.");
+ }
+
+ var instanceItem = {};
+ instanceItem.ReferencedSOPClassUID = version.SOPClassUID;
+ instanceItem.ReferencedSOPInstanceUID = version.SOPInstanceUID;
+ preCollection[version.SeriesInstanceUID].push(instanceItem);
+ });
+ var preStudyItem = {};
+ preStudyItem.StudyInstanceUID = options.previousVersions[0].StudyInstanceUID;
+ preStudyItem.ReferencedSeriesSequence = [];
+ Object.keys(preCollection).forEach(function (seriesInstanceUID) {
+ var seriesItem = {};
+ seriesItem.SeriesInstanceUID = seriesInstanceUID;
+ seriesItem.ReferencedSOPSequence = preCollection[seriesInstanceUID];
+ preStudyItem.ReferencedSeriesSequence.push(seriesItem);
+ });
+ this.PredecessorDocumentsSequence = [preStudyItem];
+ }
+
+ if (options.performedProcedureCodes !== undefined) {
+ if (!(_typeof(options.performedProcedureCodes) === "object" || options.performedProcedureCodes instanceof Array)) {
+ throw new Error("Option 'performedProcedureCodes' must have type Array.");
+ }
+
+ this.PerformedProcedureCodeSequence = _construct(ContentSequence, _toConsumableArray(options.performedProcedureCodes));
+ } else {
+ this.PerformedProcedureCodeSequence = [];
+ }
+
+ this.ReferencedPerformedProcedureStepSequence = [];
+
+ _attributesToInclude.forEach(function (tag) {
+ var key = DicomMetaDictionary.punctuateTag(tag);
+ var element = DicomMetaDictionary.dictionary[key];
+
+ if (element !== undefined) {
+ var keyword = element.name;
+ var value = options.evidence[0][keyword];
+
+ if (value !== undefined) {
+ _this[keyword] = value;
+ }
+ }
+ });
+ });
+
+ var documents = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ Comprehensive3DSR: Comprehensive3DSR
+ });
+
+ var sr = {
+ coding: coding,
+ contentItems: contentItems,
+ documents: documents,
+ templates: templates,
+ valueTypes: valueTypes
+ };
+
+ var tagNamesToEmpty = [// please override these in specificReplaceDefaults to have useful values
+ "PatientID", "PatientName", // 0/3: those that appear missing in CTP
+ "SeriesDate", "AccessionNumber", // (valuable, but sometimes manually filled)
+ "SeriesDescription", // cat 1/3: CTP: set to empty explicitely using @empty
+ "StudyTime", "ContentTime", "ReferringPhysicianName", "PatientBirthDate", "PatientSex", "ClinicalTrialSiteID", "ClinicalTrialSiteName", "ClinicalTrialSubjectID", "ClinicalTrialSubjectReadingID", "ClinicalTrialTimePointID", "ClinicalTrialTimePointDescription", "ContrastBolusAgent", "StudyID", // cat 2/3: CTP: set to increment dates
+ "InstanceCreationDate", "StudyDate", "ContentDate", "DateOfSecondaryCapture", "DateOfLastCalibration", "DateOfLastDetectorCalibration", "FrameAcquisitionDatetime", "FrameReferenceDatetime", "StudyVerifiedDate", "StudyReadDate", "ScheduledStudyStartDate", "ScheduledStudyStopDate", "StudyArrivalDate", "StudyCompletionDate", "ScheduledAdmissionDate", "ScheduledDischargeDate", "DischargeDate", "SPSStartDate", "SPSEndDate", "PPSStartDate", "PPSEndDate", "IssueDateOfImagingServiceRequest", "VerificationDateTime", "ObservationDateTime", "DateTime", "Date", "RefDatetime", // cat 3/3: CTP: set to remove using @remove
+ "AcquisitionDate", "OverlayDate", "CurveDate", "AcquisitionDatetime", "SeriesTime", "AcquisitionTime", "OverlayTime", "CurveTime", "InstitutionName", "InstitutionAddress", "ReferringPhysicianAddress", "ReferringPhysicianPhoneNumbers", "ReferringPhysiciansIDSeq", "TimezoneOffsetFromUTC", "StationName", "StudyDescription", "InstitutionalDepartmentName", "PhysicianOfRecord", "PhysicianOfRecordIdSeq", "PerformingPhysicianName", "PerformingPhysicianIdSeq", "NameOfPhysicianReadingStudy", "PhysicianReadingStudyIdSeq", "OperatorName", "OperatorsIdentificationSeq", "AdmittingDiagnosisDescription", "AdmittingDiagnosisCodeSeq", "RefStudySeq", "RefPPSSeq", "RefPatientSeq", "RefImageSeq", "DerivationDescription", "SourceImageSeq", "IdentifyingComments", "IssuerOfPatientID", "PatientBirthTime", "PatientInsurancePlanCodeSeq", "PatientPrimaryLanguageCodeSeq", "PatientPrimaryLanguageModifierCodeSeq", "OtherPatientIDs", "OtherPatientNames", "OtherPatientIDsSeq", "PatientBirthName", "PatientAge", "PatientSize", "PatientWeight", "PatientAddress", "InsurancePlanIdentification", "PatientMotherBirthName", "MilitaryRank", "BranchOfService", "MedicalRecordLocator", "MedicalAlerts", "ContrastAllergies", "CountryOfResidence", "RegionOfResidence", "PatientPhoneNumbers", "EthnicGroup", "Occupation", "SmokingStatus", "AdditionalPatientHistory", "PregnancyStatus", "LastMenstrualDate", "PatientReligiousPreference", "PatientSexNeutered", "ResponsiblePerson", "ResponsibleOrganization", "PatientComments", "DeviceSerialNumber", "PlateID", "GeneratorID", "CassetteID", "GantryID", // we keep - should be SoftwareVersions anyway
+ // "SoftwareVersion",
+ "ProtocolName", "AcquisitionDeviceProcessingDescription", "AcquisitionComments", "DetectorID", "AcquisitionProtocolDescription", "ContributionDescription", "ModifyingDeviceID", "ModifyingDeviceManufacturer", "ModifiedImageDescription", "ImageComments", "ImagePresentationComments", "StudyIDIssuer", "ScheduledStudyLocation", "ScheduledStudyLocationAET", "ReasonforStudy", "RequestingPhysician", "RequestingService", "RequestedProcedureDescription", "RequestedContrastAgent", "StudyComments", "AdmissionID", "IssuerOfAdmissionID", "ScheduledPatientInstitutionResidence", "AdmittingDate", "AdmittingTime", "DischargeDiagnosisDescription", "SpecialNeeds", "ServiceEpisodeID", "IssuerOfServiceEpisodeId", "ServiceEpisodeDescription", "CurrentPatientLocation", "PatientInstitutionResidence", "PatientState", "ReferencedPatientAliasSeq", "VisitComments", "ScheduledStationAET", "ScheduledPerformingPhysicianName", "SPSDescription", "ScheduledStationName", "SPSLocation", "PreMedication", "PerformedStationAET", "PerformedStationName", "PerformedLocation", "PerformedStationNameCodeSeq", "PPSID", "PPSDescription", "RequestAttributesSeq", "PPSComments", "AcquisitionContextSeq", "PatientTransportArrangements", "RequestedProcedureLocation", "NamesOfIntendedRecipientsOfResults", "IntendedRecipientsOfResultsIDSequence", "PersonAddress", "PersonTelephoneNumbers", "RequestedProcedureComments", "ReasonForTheImagingServiceRequest", "OrderEnteredBy", "OrderEntererLocation", "OrderCallbackPhoneNumber", "ImagingServiceRequestComments", "ConfidentialityPatientData", "ScheduledStationNameCodeSeq", "ScheduledStationGeographicLocCodeSeq", "PerformedStationGeoLocCodeSeq", "ScheduledHumanPerformersSeq", "ActualHumanPerformersSequence", "HumanPerformersOrganization", "HumanPerformersName", "VerifyingOrganization", "VerifyingObserverName", "AuthorObserverSequence", "ParticipantSequence", "CustodialOrganizationSeq", "VerifyingObserverIdentificationCodeSeq", "PersonName", "ContentSeq", "OverlayData", "OverlayComments", "IconImageSequence", "TopicSubject", "TopicAuthor", "TopicKeyWords", "TextString", "Arbitrary", "TextComments", "ResultsIDIssuer", "InterpretationRecorder", "InterpretationTranscriber", "InterpretationText", "InterpretationAuthor", "InterpretationApproverSequence", "PhysicianApprovingInterpretation", "InterpretationDiagnosisDescription", "ResultsDistributionListSeq", "DistributionName", "DistributionAddress", "InterpretationIdIssuer", "Impressions", "ResultComments", "DigitalSignaturesSeq", "DataSetTrailingPadding"];
+ function getTagsNameToEmpty() {
+ return [].concat(tagNamesToEmpty);
+ }
+ function cleanTags(dict) {
+ var tagNamesToReplace = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined;
+ var customTagNamesToEmpty = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
+
+ if (tagNamesToReplace == undefined) {
+ tagNamesToReplace = {
+ "00100010": "ANON^PATIENT",
+ "00100020": "ANON^ID"
+ };
+ }
+
+ var tags = customTagNamesToEmpty != undefined ? customTagNamesToEmpty : tagNamesToEmpty;
+ tags.forEach(function (tag) {
+ var tagInfo = DicomMetaDictionary.nameMap[tag];
+
+ if (tagInfo && tagInfo.version != "PrivateTag") {
+ var tagNumber = tagInfo.tag,
+ tagString = Tag.fromPString(tagNumber).toCleanString();
+
+ if (dict[tagString]) {
+ var newValue;
+
+ if (tagString in tagNamesToReplace) {
+ newValue = [tagNamesToReplace[tagString]];
+ } else {
+ newValue = [];
+ }
+
+ dict[tagString].Value = newValue;
+ }
+ }
+ });
+ }
+
+ // Data
+ var data = {
+ BitArray: BitArray,
+ ReadBufferStream: ReadBufferStream,
+ DeflatedReadBufferStream: DeflatedReadBufferStream,
+ WriteBufferStream: WriteBufferStream,
+ DicomDict: DicomDict,
+ DicomMessage: DicomMessage,
+ DicomMetaDictionary: DicomMetaDictionary,
+ Tag: Tag,
+ ValueRepresentation: ValueRepresentation,
+ Colors: Colors,
+ datasetToDict: datasetToDict,
+ datasetToBuffer: datasetToBuffer,
+ datasetToBlob: datasetToBlob
+ };
+ var derivations = {
+ DerivedDataset: DerivedDataset,
+ DerivedPixels: DerivedPixels,
+ DerivedImage: DerivedImage,
+ Segmentation: Segmentation$4,
+ StructuredReport: StructuredReport,
+ ParametricMap: ParametricMap
+ };
+ var normalizers = {
+ Normalizer: Normalizer,
+ ImageNormalizer: ImageNormalizer,
+ MRImageNormalizer: MRImageNormalizer,
+ EnhancedMRImageNormalizer: EnhancedMRImageNormalizer,
+ EnhancedUSVolumeNormalizer: EnhancedUSVolumeNormalizer,
+ CTImageNormalizer: CTImageNormalizer,
+ PETImageNormalizer: PETImageNormalizer,
+ SEGImageNormalizer: SEGImageNormalizer,
+ DSRNormalizer: DSRNormalizer
+ };
+ var anonymizer = {
+ cleanTags: cleanTags,
+ getTagsNameToEmpty: getTagsNameToEmpty
+ };
+ var dcmjs = {
+ DICOMWEB: DICOMWEB,
+ adapters: adapters,
+ data: data,
+ derivations: derivations,
+ normalizers: normalizers,
+ sr: sr,
+ utilities: utilities,
+ log: log,
+ anonymizer: anonymizer
+ };
+
+ exports.DICOMWEB = DICOMWEB;
+ exports.adapters = adapters;
+ exports.anonymizer = anonymizer;
+ exports.data = data;
+ exports.default = dcmjs;
+ exports.derivations = derivations;
+ exports.log = log;
+ exports.normalizers = normalizers;
+ exports.sr = sr;
+ exports.utilities = utilities;
+
+ Object.defineProperty(exports, '__esModule', { value: true });
+
+}));
+//# sourceMappingURL=dcmjs.js.map
diff --git a/src/utils/dcmUpload/encoder.js b/src/utils/dcmUpload/encoder.js
new file mode 100644
index 0000000..ff06bcd
--- /dev/null
+++ b/src/utils/dcmUpload/encoder.js
@@ -0,0 +1,63 @@
+import dicomParser from "dicom-parser";
+import dcmjs from 'dcmjs'
+const CharLs = require('@cornerstonejs/codec-charls')
+const codecWrapper = {
+ codec: undefined,
+ Decoder: undefined,
+ Encoder: undefined,
+ encoderName: "JpegLSEncoder",
+ decoderName: "JpegLSDecoder",
+};
+function setCodec(codecConfig, encoderName, decoderName, codec = {}) {
+ codecConfig.Encoder = codec[encoderName];
+ codecConfig.Decoder = codec[decoderName];
+ codecConfig.codec = codec;
+}
+CharLs().then(res => {
+ setCodec(codecWrapper, codecWrapper.encoderName, codecWrapper.decoderName, res);
+})
+
+export const encoder = function (file) {
+ return new Promise(async (resolve, reject) => {
+ try {
+ const reader = new FileReader()
+ reader.onload = async (event) => {
+ let buffer = event.target.result
+ let data = dicomParser.parseDicom(new Uint8Array(buffer))
+ let frameCount = data.string('x00280008')
+ let height = data.uint16('x00280011')
+ let width = data.uint16('x00280010')
+ let bitsPerSample = data.uint16('x00280100')
+ let componentCount = data.string('x00280004')
+ let transportSyntax = data.string('x00020010')
+ let dataset = dcmjs.data.DicomMessage.readFile(buffer)
+ let pixelDataElement = data.elements.x7fe00010
+ let pixelDataOffset = pixelDataElement.dataOffset
+ let pixelDataLength = pixelDataElement.length
+ let pixelDataBytes = data.byteArray.subarray(pixelDataOffset, pixelDataOffset + pixelDataLength)
+ if ((transportSyntax === '1.2.840.10008.1.2.1' || transportSyntax === '1.2.840.10008.1.2') && ~componentCount.indexOf('MONOCHROME') && !frameCount) {
+ let encoder = new codecWrapper.Encoder()
+ let decodedBytes = encoder.getDecodedBuffer({width: width, height: height, bitsPerSample: bitsPerSample, componentCount: 1})
+ encoder.setNearLossless(0)
+ decodedBytes.set(pixelDataBytes)
+ encoder.encode()
+ let encodedBytes = encoder.getEncodedBuffer();
+ dataset.dict['7FE00010'].Value[0] = encodedBytes.buffer
+ dataset.meta['00020010'].Value[0] = '1.2.840.10008.1.2.4.80'
+ let newDicomFile = dataset.write()
+ const bufferArray = new Uint8Array(newDicomFile)
+ const blob = new Blob([bufferArray], { type: 'application/octet-stream' })
+ resolve({blob, data})
+ } else {
+ const bufferArray = new Uint8Array(buffer);
+ const blob = new Blob([bufferArray], { type: 'application/octet-stream' });
+ resolve({blob, pixelDataBytes})
+ }
+ };
+ reader.readAsArrayBuffer(file);
+ } catch (e) {
+ console.log(e)
+ reject(e)
+ }
+ })
+}
diff --git a/src/utils/dialog.js b/src/utils/dialog.js
new file mode 100644
index 0000000..4c7c2dd
--- /dev/null
+++ b/src/utils/dialog.js
@@ -0,0 +1,119 @@
+import Vue from 'vue'
+Vue.directive('dialogDrag', {
+ bind(el, binding, vnode, oldVnode) {
+ const dialogHeaderEl = el.querySelector('.el-dialog__header')
+ const dragDom = el.querySelector('.el-dialog')
+ // dialogHeaderEl.style.cursor = 'move';
+ dialogHeaderEl.style.cssText += ';cursor:move;'
+ dragDom.style.cssText += ';top:0px;'
+
+ // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
+ const sty = (function() {
+ if (window.document.currentStyle) {
+ return (dom, attr) => dom.currentStyle[attr]
+ } else {
+ return (dom, attr) => getComputedStyle(dom, false)[attr]
+ }
+ })()
+ dialogHeaderEl.onmousedown = e => {
+ // 鼠标按下,计算当前元素距离可视区的距离
+ const disX = e.clientX - dialogHeaderEl.offsetLeft
+ const disY = e.clientY - dialogHeaderEl.offsetTop
+ const screenWidth = document.body.clientWidth // body当前宽度
+ const screenHeight = document.documentElement.clientHeight // 可见区域高度(应为body高度,可某些环境下无法获取)
+ const dragDomWidth = dragDom.offsetWidth // 对话框宽度
+ const dragDomheight = dragDom.offsetHeight // 对话框高度
+ const minDragDomLeft = dragDom.offsetLeft
+ const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth
+ const minDragDomTop = dragDom.offsetTop
+ const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomheight
+ // 获取到的值带px 正则匹配替换
+ let styL = sty(dragDom, 'left')
+ let styT = sty(dragDom, 'top')
+ // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
+ if (styL.includes('%')) {
+ // eslint-disable-next-line no-useless-escape
+ styL = +document.body.clientWidth * (+styL.replace(/\%/g, '') / 100)
+ // eslint-disable-next-line no-useless-escape
+ styT = +document.body.clientHeight * (+styT.replace(/\%/g, '') / 100)
+ } else {
+ styL = +styL.replace(/\px/g, '')
+ styT = +styT.replace(/\px/g, '')
+ }
+
+ document.onmousemove = function(e) {
+ // 通过事件委托,计算移动的距离
+ let left = e.clientX - disX
+ let top = e.clientY - disY
+
+ // 边界处理
+ if (-left > minDragDomLeft) {
+ left = -minDragDomLeft
+ } else if (left > maxDragDomLeft) {
+ left = maxDragDomLeft
+ }
+ if (-top > minDragDomTop) {
+ top = -minDragDomTop
+ } else if (top > maxDragDomTop) {
+ top = maxDragDomTop
+ }
+
+ // 移动当前元素
+ dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`
+ }
+
+ document.onmouseup = function(e) {
+ document.onmousemove = null
+ document.onmouseup = null
+ }
+ return false
+ }
+ }
+})
+// v-dialogDrag: 弹窗拖拽
+// Vue.directive('dialogDrag', {
+// bind(el, binding, vnode, oldVnode) {
+// const dialogHeaderEl = el.querySelector('.el-dialog__header')
+// const dragDom = el.querySelector('.el-dialog')
+// dialogHeaderEl.style.cursor = 'move'
+
+// // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
+// const sty = dragDom.currentStyle || window.getComputedStyle(dragDom, null)
+
+// dialogHeaderEl.onmousedown = (e) => {
+// // 鼠标按下,计算当前元素距离可视区的距离
+// const disX = e.clientX - dialogHeaderEl.offsetLeft
+// const disY = e.clientY - dialogHeaderEl.offsetTop
+
+// // 获取到的值带px 正则匹配替换
+// let styL, styT
+
+// // 注意在ie中 第一次获取到的值为组件自带50% 移动之后赋值为px
+// if (sty.left.includes('%')) {
+// styL = +document.body.clientWidth * (+sty.left.replace(/\%/g, '') / 100)
+// styT = +document.body.clientHeight * (+sty.top.replace(/\%/g, '') / 100)
+// } else {
+// styL = +sty.left.replace(/\px/g, '')
+// styT = +sty.top.replace(/\px/g, '')
+// }
+
+// document.onmousemove = function(e) {
+// // 通过事件委托,计算移动的距离
+// const l = e.clientX - disX
+// const t = e.clientY - disY
+
+// // 移动当前元素
+// dragDom.style.left = `${l + styL}px`
+// dragDom.style.top = `${t + styT}px`
+
+// // 将此时的位置传出去
+// // binding.value({x:e.pageX,y:e.pageY})
+// }
+
+// document.onmouseup = function(e) {
+// document.onmousemove = null
+// document.onmouseup = null
+// }
+// }
+// }
+// })
diff --git a/src/utils/dicom-character-set.js b/src/utils/dicom-character-set.js
new file mode 100644
index 0000000..1469945
--- /dev/null
+++ b/src/utils/dicom-character-set.js
@@ -0,0 +1,608 @@
+/*! dicom-character-set - 1.0.5 - 2024-01-10 | (c) 2018 Radialogica, LLC | https://github.com/radialogica/dicom-character-set */
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define([], factory);
+ else if(typeof exports === 'object')
+ exports["dicom-character-set"] = factory();
+ else
+ root["dicom-character-set"] = factory();
+})(typeof self !== "undefined" ? self : this, () => {
+return /******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ({
+
+/***/ "./character-sets.js":
+/*!***************************!*\
+ !*** ./character-sets.js ***!
+ \***************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ characterSets: () => (/* binding */ characterSets)
+/* harmony export */ });
+const asciiElement = {
+ codeElement: 'G0',
+ escapeSequence: [0x1B, 0x28, 0x42],
+ encoding: 'windows-1252',
+ isASCII: true,
+ bytesPerCodePoint: 1
+};
+const characterSets = {
+ /** ********************************
+ * Single-byte without extensions *
+ **********************************/
+
+ // Default
+ 'ISO_IR 6': {
+ encoding: 'utf-8'
+ },
+ // Latin alphabet No. 1
+ 'ISO_IR 100': {
+ encoding: 'windows-1252'
+ },
+ // Latin alphabet No. 2
+ 'ISO_IR 101': {
+ encoding: 'iso-8859-2'
+ },
+ // Latin alphabet No. 3
+ 'ISO_IR 109': {
+ encoding: 'iso-8859-3'
+ },
+ // Latin alphabet No. 4
+ 'ISO_IR 110': {
+ encoding: 'iso-8859-4'
+ },
+ // Cyrillic
+ 'ISO_IR 144': {
+ encoding: 'iso-8859-5'
+ },
+ // Arabic
+ 'ISO_IR 127': {
+ encoding: 'iso-8859-6'
+ },
+ // Greek
+ 'ISO_IR 126': {
+ encoding: 'iso-8859-7'
+ },
+ // Hebrew
+ 'ISO_IR 138': {
+ encoding: 'iso-8859-8'
+ },
+ // Latin alphabet No. 5
+ 'ISO_IR 148': {
+ encoding: 'windows-1254'
+ },
+ // Japanese
+ 'ISO_IR 13': {
+ encoding: 'shift-jis'
+ },
+ // Thai
+ 'ISO_IR 166': {
+ encoding: 'tis-620'
+ },
+ /** *****************************
+ * Single-byte with extensions *
+ *******************************/
+
+ // Default
+ 'ISO 2022 IR 6': {
+ extension: true,
+ elements: [asciiElement]
+ },
+ // Latin alphabet No. 1
+ 'ISO 2022 IR 100': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x41],
+ encoding: 'windows-1252',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Latin alphabet No. 2
+ 'ISO 2022 IR 101': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x42],
+ encoding: 'iso-8859-2',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Latin alphabet No. 3
+ 'ISO 2022 IR 109': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x43],
+ encoding: 'iso-8859-3',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Latin alphabet No. 4
+ 'ISO 2022 IR 110': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x44],
+ encoding: 'iso-8859-4',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Cyrillic
+ 'ISO 2022 IR 144': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x4C],
+ encoding: 'iso-8859-5',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Arabic
+ 'ISO 2022 IR 127': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x47],
+ encoding: 'iso-8859-6',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Greek
+ 'ISO 2022 IR 126': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x46],
+ encoding: 'iso-8859-7',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Hebrew
+ 'ISO 2022 IR 138': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x48],
+ encoding: 'iso-8859-8',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Latin alphabet No. 5
+ 'ISO 2022 IR 148': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x4D],
+ encoding: 'windows-1254',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Japanese
+ 'ISO 2022 IR 13': {
+ extension: true,
+ elements: [{
+ codeElement: 'G0',
+ escapeSequence: [0x1B, 0x28, 0x4A],
+ encoding: 'shift-jis',
+ bytesPerCodePoint: 1
+ }, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x29, 0x49],
+ encoding: 'shift-jis',
+ bytesPerCodePoint: 1
+ }]
+ },
+ // Thai
+ 'ISO 2022 IR 166': {
+ extension: true,
+ elements: [asciiElement, {
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x2D, 0x54],
+ encoding: 'tis-620',
+ bytesPerCodePoint: 1
+ }]
+ },
+ /** ****************************
+ * Multi-byte with extensions *
+ ******************************/
+
+ // Japanese
+ 'ISO 2022 IR 87': {
+ extension: true,
+ multiByte: true,
+ elements: [{
+ codeElement: 'G0',
+ escapeSequence: [0x1B, 0x24, 0x42],
+ encoding: 'euc-jp',
+ setHighBit: true,
+ bytesPerCodePoint: 2
+ }]
+ },
+ 'ISO 2022 IR 159': {
+ extension: true,
+ multiByte: true,
+ elements: [{
+ codeElement: 'G0',
+ escapeSequence: [0x1B, 0x24, 0x28, 0x44],
+ encoding: 'euc-jp',
+ isJISX0212: true,
+ bytesPerCodePoint: 2
+ }]
+ },
+ // Korean
+ 'ISO 2022 IR 149': {
+ extension: true,
+ multiByte: true,
+ elements: [{
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x24, 0x29, 0x43],
+ encoding: 'euc-kr',
+ bytesPerCodePoint: 2
+ }]
+ },
+ // Simplified Chinese
+ 'ISO 2022 IR 58': {
+ extension: true,
+ multiByte: true,
+ elements: [{
+ codeElement: 'G1',
+ escapeSequence: [0x1B, 0x24, 0x29, 0x41],
+ encoding: 'gb18030',
+ bytesPerCodePoint: 2
+ }]
+ },
+ /** *******************************
+ * Multi-byte without extensions *
+ *********************************/
+
+ 'ISO_IR 192': {
+ encoding: 'utf-8',
+ multiByte: true
+ },
+ GB18030: {
+ encoding: 'gb18030',
+ multiByte: true
+ },
+ GBK: {
+ encoding: 'gbk',
+ multiByte: true
+ }
+};
+
+/***/ }),
+
+/***/ "./convert-bytes.js":
+/*!**************************!*\
+ !*** ./convert-bytes.js ***!
+ \**************************/
+/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
+
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ convertBytes: () => (/* binding */ convertBytes),
+/* harmony export */ convertBytesPromise: () => (/* binding */ convertBytesPromise)
+/* harmony export */ });
+/* harmony import */ var _character_sets_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./character-sets.js */ "./character-sets.js");
+
+const ESCAPE_BYTE = 0x1B;
+const CARRIAGE_RETURN = 0xA;
+const LINE_FEED = 0xC;
+const FORM_FEED = 0xD;
+const TAB = 0x9;
+const BACKSLASH = 0x5C; // Aka yen symbol in Romaji
+const EQUAL_SIGN = 0x3D;
+const CARET = 0x5E;
+function adjustShiftJISResult(delimiters, str) {
+ // browsers do strict ASCII for \ and ~, so to be compliant with Shift JIS we replace them
+ const fixedTildes = str.replace(/~/g, '‾');
+ // If 0x5c is being used as a multi-value separator, we must not replace it so it stays as U+005c
+ return delimiters.includes(BACKSLASH) ? fixedTildes : fixedTildes.replace(/\\/g, '¥');
+}
+function appendRunWithoutPromise(output, byteRunCharacterSet, delimiters, bytes, byteRunStart, byteRunEnd) {
+ const oneRunBytes = preprocessBytes(byteRunCharacterSet, bytes, byteRunStart, byteRunEnd);
+ return output + convertWithoutExtensions(byteRunCharacterSet.encoding, delimiters, oneRunBytes);
+}
+function appendRunWithPromise(output, byteRunCharacterSet, delimiters, bytes, byteRunStart, byteRunEnd) {
+ const oneRunBytes = preprocessBytes(byteRunCharacterSet, bytes, byteRunStart, byteRunEnd);
+ return (output === '' ? Promise.resolve('') : output).then(lhs => convertWithoutExtensionsPromise(byteRunCharacterSet.encoding, delimiters, oneRunBytes).then(rhs => lhs + rhs));
+}
+function checkParameters(specificCharacterSet, bytes) {
+ if (bytes && !(bytes instanceof Uint8Array)) {
+ throw new Error('bytes must be a Uint8Array');
+ }
+ if (specificCharacterSet && typeof specificCharacterSet !== 'string') {
+ throw new Error('specificCharacterSet must be a string');
+ }
+}
+function convertBytesCore(withoutExtensionsFunc, appendFunc, specificCharacterSet, bytes, options) {
+ checkParameters(specificCharacterSet, bytes);
+ const characterSetStrings = getCharacterSetStrings(specificCharacterSet);
+ const checkedOptions = options || {};
+ const delimiters = getDelimitersForVR(checkedOptions.vr);
+ if (characterSetStrings.length === 1 && !characterSetStrings[0].startsWith('ISO 2022')) {
+ return withoutExtensionsFunc(_character_sets_js__WEBPACK_IMPORTED_MODULE_0__.characterSets[characterSetStrings[0]].encoding, delimiters, bytes);
+ }
+ return convertWithExtensions(characterSetStrings.map(characterSet => _character_sets_js__WEBPACK_IMPORTED_MODULE_0__.characterSets[characterSet]), bytes, delimiters, appendFunc);
+}
+function convertWithExtensions(allowedCharacterSets, bytes, delimiters, appendRun) {
+ let output = '';
+ if (!bytes || bytes.length === 0) {
+ return output;
+ }
+ const initialCharacterSets = {
+ G0: allowedCharacterSets[0].elements.find(element => element.codeElement === 'G0'),
+ G1: allowedCharacterSets[0].elements.find(element => element.codeElement === 'G1')
+ };
+ const activeCharacterSets = Object.assign({}, initialCharacterSets);
+ let byteRunStart = 0;
+ let byteRunCharacterSet;
+ let nextSetIndex = 0;
+
+ // Group bytes into runs based on their encoding so we don't have to use a different
+ // decoder for each character. Note that G0 and G1 planes can be different encodings,
+ // so we can't just group by character set.
+
+ while (nextSetIndex < bytes.length) {
+ if (!byteRunCharacterSet) {
+ byteRunCharacterSet = getCharacterSet(bytes[byteRunStart], activeCharacterSets);
+ }
+ const next = findNextCharacterSet(bytes, byteRunStart, byteRunCharacterSet, activeCharacterSets, initialCharacterSets, delimiters);
+ nextSetIndex = next.index;
+ if (nextSetIndex > byteRunStart) {
+ output = appendRun(output, byteRunCharacterSet, delimiters, bytes, byteRunStart, nextSetIndex);
+ }
+ byteRunStart = nextSetIndex;
+ byteRunCharacterSet = next.characterSet;
+ if (next.escapeSequence) {
+ const nextCharacterSet = readEscapeSequence(bytes, nextSetIndex, allowedCharacterSets);
+ activeCharacterSets[nextCharacterSet.codeElement] = nextCharacterSet;
+ byteRunStart += nextCharacterSet.escapeSequence.length;
+ }
+ }
+ return output;
+}
+function convertWithoutExtensions(encoding, delimiters, bytes) {
+ const retVal = new TextDecoder(encoding).decode(bytes);
+ return encoding === 'shift-jis' ? adjustShiftJISResult(delimiters, retVal) : retVal;
+}
+function convertWithoutExtensionsPromise(encoding, delimiters, bytes) {
+ return new Promise(resolve => {
+ const fileReader = new FileReader();
+ if (encoding === 'shift-jis') {
+ fileReader.onload = () => resolve(adjustShiftJISResult(delimiters, fileReader.result));
+ } else {
+ fileReader.onload = () => resolve(fileReader.result);
+ }
+ const blob = new Blob([bytes]);
+ fileReader.readAsText(blob, encoding);
+ });
+}
+
+// Multibyte non-extension character sets must stand on their own or else be ignored. This method enforces that.
+function filterMultiByteCharacterSetStrings(characterSetStrings) {
+ const initialCharacterSet = _character_sets_js__WEBPACK_IMPORTED_MODULE_0__.characterSets[characterSetStrings[0]];
+ if (initialCharacterSet.multiByte && !initialCharacterSet.extension) {
+ return [characterSetStrings[0]];
+ }
+ return characterSetStrings.filter(str => !_character_sets_js__WEBPACK_IMPORTED_MODULE_0__.characterSets[str].multiByte || _character_sets_js__WEBPACK_IMPORTED_MODULE_0__.characterSets[str].extension);
+}
+function findNextCharacterSet(bytes, start, currentCodeElement, activeCodeElements, initialCharacterSets, delimiters) {
+ for (let i = start; i < bytes.length; i += currentCodeElement.bytesPerCodePoint) {
+ if (bytes[i] === ESCAPE_BYTE) {
+ return {
+ escapeSequence: true,
+ index: i
+ };
+ }
+ if (currentCodeElement.bytesPerCodePoint === 1 && delimiters.includes(bytes[i])) {
+ Object.assign(activeCodeElements, initialCharacterSets);
+ }
+ const nextCodeElement = getCharacterSet(bytes[i], activeCodeElements);
+ if (currentCodeElement && nextCodeElement !== currentCodeElement) {
+ return {
+ characterSet: nextCodeElement,
+ index: i
+ };
+ }
+ }
+ return {
+ index: bytes.length
+ };
+}
+function forceExtensionsIfApplicable(characterSetStrings) {
+ const forceExtensions = characterSetStrings.length > 1;
+ const returnValue = [];
+ for (let i = 0; i < characterSetStrings.length; i++) {
+ const characterSetString = characterSetStrings[i];
+ if (!returnValue.includes(characterSetString)) {
+ returnValue.push(forceExtensions ? characterSetString.replace('ISO_IR', 'ISO 2022 IR') : characterSetString);
+ }
+ }
+ return returnValue;
+}
+function getCharacterSet(byte, activeCharacterSets) {
+ if (byte > 0x7F && activeCharacterSets.G1) {
+ return activeCharacterSets.G1;
+ }
+ if (activeCharacterSets.G0) {
+ return activeCharacterSets.G0;
+ }
+ // for robustness if byte <= 0x7F, try to output using G1 if no G0 is selected
+ if (activeCharacterSets.G1 && activeCharacterSets.G1.bytesPerCodePoint === 1) {
+ return activeCharacterSets.G1;
+ }
+ // If G1 is multibyte, default to ASCII
+
+ return _character_sets_js__WEBPACK_IMPORTED_MODULE_0__.characterSets['ISO 2022 IR 6'].elements[0];
+}
+function getCharacterSetStrings(specificCharacterSet) {
+ let characterSetStrings = specificCharacterSet ? specificCharacterSet.split('\\').map(characterSet => characterSet.trim().toUpperCase()) : [''];
+ if (characterSetStrings[0] === '') {
+ characterSetStrings[0] = characterSetStrings.length > 1 ? 'ISO 2022 IR 6' : 'ISO_IR 6';
+ }
+ if (characterSetStrings.some(characterSet => _character_sets_js__WEBPACK_IMPORTED_MODULE_0__.characterSets[characterSet] === undefined)) {
+ throw new Error('Invalid specific character set specified.');
+ }
+ characterSetStrings = filterMultiByteCharacterSetStrings(characterSetStrings);
+ return forceExtensionsIfApplicable(characterSetStrings);
+}
+function getDelimitersForVR(incomingVR) {
+ const vr = (incomingVR || '').trim().toUpperCase();
+ const delimiters = [CARRIAGE_RETURN, LINE_FEED, FORM_FEED, TAB];
+ if (!['UT', 'ST', 'LT'].includes(vr)) {
+ // for delimiting multi-valued items
+ delimiters.push(BACKSLASH);
+ }
+ if (vr === 'PN') {
+ delimiters.push(EQUAL_SIGN);
+ delimiters.push(CARET);
+ }
+ return delimiters;
+}
+function preprocessBytes(characterSet, bytes, byteStart, byteEnd) {
+ let oneEncodingBytes;
+ if (characterSet.isJISX0212) {
+ oneEncodingBytes = processJISX0212(bytes, byteStart, byteEnd);
+ } else {
+ oneEncodingBytes = new Uint8Array(byteEnd - byteStart);
+ oneEncodingBytes.set(new Uint8Array(bytes.buffer, bytes.byteOffset + byteStart, byteEnd - byteStart));
+ if (characterSet.setHighBit) {
+ setHighBit(oneEncodingBytes);
+ }
+ }
+ return oneEncodingBytes;
+}
+function processJISX0212(bytes, bytesStart, bytesEnd) {
+ const length = bytesEnd - bytesStart;
+ if (length % 2 !== 0) {
+ throw new Error('JIS X string with a character not having exactly two bytes!');
+ }
+ const processedBytes = new Uint8Array(length + length / 2);
+ let outIndex = 0;
+ for (let i = bytesStart; i < bytesEnd; i += 2) {
+ processedBytes[outIndex++] = 0x8F;
+ processedBytes[outIndex++] = bytes[i] | 0x80;
+ processedBytes[outIndex++] = bytes[i + 1] | 0x80;
+ }
+ return processedBytes;
+}
+function escapeSequenceMatches(escapeSequence, bytes, startIndex) {
+ for (let escapeByteIndex = 0; escapeByteIndex < escapeSequence.length; escapeByteIndex++) {
+ if (startIndex + escapeByteIndex >= bytes.length) {
+ return false;
+ } else if (bytes[startIndex + escapeByteIndex] !== escapeSequence[escapeByteIndex]) {
+ return false;
+ }
+ }
+ return true;
+}
+function readEscapeSequence(bytes, start, extensionSets) {
+ for (let setIndex = 0; setIndex < extensionSets.length; setIndex++) {
+ const extensionSet = extensionSets[setIndex];
+ for (let elementIndex = 0; elementIndex < extensionSet.elements.length; elementIndex++) {
+ const element = extensionSet.elements[elementIndex];
+ if (escapeSequenceMatches(element.escapeSequence, bytes, start)) {
+ return element;
+ }
+ }
+ }
+ throw new Error(`Unknown escape sequence encountered at byte ${start}`);
+}
+function setHighBit(bytes) {
+ for (let i = 0; i < bytes.length; i++) {
+ bytes[i] |= 0x80;
+ }
+}
+function convertBytes(specificCharacterSet, bytes, options) {
+ return convertBytesCore(convertWithoutExtensions, appendRunWithoutPromise, specificCharacterSet, bytes, options);
+}
+function convertBytesPromise(specificCharacterSet, bytes, options) {
+ return convertBytesCore(convertWithoutExtensionsPromise, appendRunWithPromise, specificCharacterSet, bytes, options);
+}
+
+/***/ })
+
+/******/ });
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __webpack_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+/******/ /* webpack/runtime/define property getters */
+/******/ (() => {
+/******/ // define getter functions for harmony exports
+/******/ __webpack_require__.d = (exports, definition) => {
+/******/ for(var key in definition) {
+/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
+/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
+/******/ }
+/******/ }
+/******/ };
+/******/ })();
+/******/
+/******/ /* webpack/runtime/hasOwnProperty shorthand */
+/******/ (() => {
+/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
+/******/ })();
+/******/
+/******/ /* webpack/runtime/make namespace object */
+/******/ (() => {
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = (exports) => {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/ })();
+/******/
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
+(() => {
+/*!******************!*\
+ !*** ./index.js ***!
+ \******************/
+__webpack_require__.r(__webpack_exports__);
+/* harmony export */ __webpack_require__.d(__webpack_exports__, {
+/* harmony export */ characterSets: () => (/* reexport safe */ _character_sets_js__WEBPACK_IMPORTED_MODULE_1__.characterSets),
+/* harmony export */ convertBytes: () => (/* reexport safe */ _convert_bytes_js__WEBPACK_IMPORTED_MODULE_0__.convertBytes),
+/* harmony export */ convertBytesPromise: () => (/* reexport safe */ _convert_bytes_js__WEBPACK_IMPORTED_MODULE_0__.convertBytesPromise)
+/* harmony export */ });
+/* harmony import */ var _convert_bytes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./convert-bytes.js */ "./convert-bytes.js");
+/* harmony import */ var _character_sets_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./character-sets.js */ "./character-sets.js");
+
+
+})();
+
+/******/ return __webpack_exports__;
+/******/ })()
+;
+});
+//# sourceMappingURL=dicom-character-set.js.map
\ No newline at end of file
diff --git a/src/utils/dicom-store.js b/src/utils/dicom-store.js
new file mode 100644
index 0000000..52d56f0
--- /dev/null
+++ b/src/utils/dicom-store.js
@@ -0,0 +1,4 @@
+
+export default {
+ studyList: []
+}
diff --git a/src/utils/dict/Dict.js b/src/utils/dict/Dict.js
new file mode 100644
index 0000000..104bd6e
--- /dev/null
+++ b/src/utils/dict/Dict.js
@@ -0,0 +1,82 @@
+import Vue from 'vue'
+import { mergeRecursive } from "@/utils/ruoyi";
+import DictMeta from './DictMeta'
+import DictData from './DictData'
+
+const DEFAULT_DICT_OPTIONS = {
+ types: [],
+}
+
+/**
+ * @classdesc 字典
+ * @property {Object} label 标签对象,内部属性名为字典类型名称
+ * @property {Object} dict 字段数组,内部属性名为字典类型名称
+ * @property {Array.} _dictMetas 字典元数据数组
+ */
+export default class Dict {
+ constructor() {
+ this.owner = null
+ this.label = {}
+ this.type = {}
+ }
+
+ init(options) {
+ if (options instanceof Array) {
+ options = { types: options }
+ }
+ const opts = mergeRecursive(DEFAULT_DICT_OPTIONS, options)
+ if (opts.types === undefined) {
+ throw new Error('need dict types')
+ }
+ const ps = []
+ this._dictMetas = opts.types.map(t => DictMeta.parse(t))
+ this._dictMetas.forEach(dictMeta => {
+ const type = dictMeta.type
+ Vue.set(this.label, type, {})
+ Vue.set(this.type, type, [])
+ if (dictMeta.lazy) {
+ return
+ }
+ ps.push(loadDict(this, dictMeta))
+ })
+ return Promise.all(ps)
+ }
+
+ /**
+ * 重新加载字典
+ * @param {String} type 字典类型
+ */
+ reloadDict(type) {
+ const dictMeta = this._dictMetas.find(e => e.type === type)
+ if (dictMeta === undefined) {
+ return Promise.reject(`the dict meta of ${type} was not found`)
+ }
+ return loadDict(this, dictMeta)
+ }
+}
+
+/**
+ * 加载字典
+ * @param {Dict} dict 字典
+ * @param {DictMeta} dictMeta 字典元数据
+ * @returns {Promise}
+ */
+function loadDict(dict, dictMeta) {
+ return dictMeta.request(dictMeta)
+ .then(response => {
+ const type = dictMeta.type
+ let dicts = dictMeta.responseConverter(response, dictMeta)
+ if (!(dicts instanceof Array)) {
+ console.error('the return of responseConverter must be Array.')
+ dicts = []
+ } else if (dicts.filter(d => d instanceof DictData).length !== dicts.length) {
+ console.error('the type of elements in dicts must be DictData')
+ dicts = []
+ }
+ dict.type[type].splice(0, Number.MAX_SAFE_INTEGER, ...dicts)
+ dicts.forEach(d => {
+ Vue.set(dict.label[type], d.value, d.label)
+ })
+ return dicts
+ })
+}
diff --git a/src/utils/dict/DictConverter.js b/src/utils/dict/DictConverter.js
new file mode 100644
index 0000000..0cf5df8
--- /dev/null
+++ b/src/utils/dict/DictConverter.js
@@ -0,0 +1,17 @@
+import DictOptions from './DictOptions'
+import DictData from './DictData'
+
+export default function(dict, dictMeta) {
+ const label = determineDictField(dict, dictMeta.labelField, ...DictOptions.DEFAULT_LABEL_FIELDS)
+ const value = determineDictField(dict, dictMeta.valueField, ...DictOptions.DEFAULT_VALUE_FIELDS)
+ return new DictData(dict[label], dict[value], dict)
+}
+
+/**
+ * 确定字典字段
+ * @param {DictData} dict
+ * @param {...String} fields
+ */
+function determineDictField(dict, ...fields) {
+ return fields.find(f => Object.prototype.hasOwnProperty.call(dict, f))
+}
diff --git a/src/utils/dict/DictData.js b/src/utils/dict/DictData.js
new file mode 100644
index 0000000..afc763e
--- /dev/null
+++ b/src/utils/dict/DictData.js
@@ -0,0 +1,13 @@
+/**
+ * @classdesc 字典数据
+ * @property {String} label 标签
+ * @property {*} value 标签
+ * @property {Object} raw 原始数据
+ */
+export default class DictData {
+ constructor(label, value, raw) {
+ this.label = label
+ this.value = value
+ this.raw = raw
+ }
+}
diff --git a/src/utils/dict/DictMeta.js b/src/utils/dict/DictMeta.js
new file mode 100644
index 0000000..efcc66e
--- /dev/null
+++ b/src/utils/dict/DictMeta.js
@@ -0,0 +1,37 @@
+import { mergeRecursive } from '@/utils/ruoyi'
+import DictOptions from './DictOptions'
+
+/**
+ * @classdesc 字典元数据
+ * @property {String} type 类型
+ * @property {Function} request 请求
+ * @property {String} label 标签字段
+ * @property {String} value 值字段
+ */
+export default class DictMeta {
+ constructor(options) {
+ this.type = options.type
+ this.request = options.request
+ this.responseConverter = options.responseConverter
+ this.labelField = options.labelField
+ this.valueField = options.valueField
+ this.lazy = options.lazy === true
+ }
+}
+
+/**
+ * 解析字典元数据
+ * @param {Object} options
+ * @returns {DictMeta}
+ */
+DictMeta.parse = function(options) {
+ let opts = null
+ if (typeof options === 'string') {
+ opts = DictOptions.metas[options] || {}
+ opts.type = options
+ } else if (typeof options === 'object') {
+ opts = options
+ }
+ opts = mergeRecursive(DictOptions.metas['*'], opts)
+ return new DictMeta(opts)
+}
diff --git a/src/utils/dict/DictOptions.js b/src/utils/dict/DictOptions.js
new file mode 100644
index 0000000..7f8164e
--- /dev/null
+++ b/src/utils/dict/DictOptions.js
@@ -0,0 +1,51 @@
+import { mergeRecursive } from "@/utils/ruoyi";
+import dictConverter from './DictConverter'
+
+export const options = {
+ metas: {
+ '*': {
+ /**
+ * 字典请求,方法签名为function(dictMeta: DictMeta): Promise
+ */
+ request: (dictMeta) => {
+ console.log(`load dict ${dictMeta.type}`)
+ return Promise.resolve([])
+ },
+ /**
+ * 字典响应数据转换器,方法签名为function(response: Object, dictMeta: DictMeta): DictData
+ */
+ responseConverter,
+ labelField: 'label',
+ valueField: 'value',
+ },
+ },
+ /**
+ * 默认标签字段
+ */
+ DEFAULT_LABEL_FIELDS: ['label', 'name', 'title', 'Value'],
+ /**
+ * 默认值字段
+ */
+ DEFAULT_VALUE_FIELDS: ['value', 'id', 'uid', 'key', 'Id'],
+}
+
+/**
+ * 映射字典
+ * @param {Object} response 字典数据
+ * @param {DictMeta} dictMeta 字典元数据
+ * @returns {DictData}
+ */
+function responseConverter(response, dictMeta) {
+ const dicts = response.Result instanceof Array ? response.Result : response
+ if (dicts === undefined) {
+ console.warn(`no dict data of "${dictMeta.type}" found in the response`)
+ return []
+ }
+ return dicts.map(d => dictConverter(d, dictMeta))
+}
+
+export function mergeOptions(src) {
+ mergeRecursive(options, src)
+}
+
+export default options
diff --git a/src/utils/dict/index.js b/src/utils/dict/index.js
new file mode 100644
index 0000000..8493302
--- /dev/null
+++ b/src/utils/dict/index.js
@@ -0,0 +1,33 @@
+import Dict from './Dict'
+import { mergeOptions } from './DictOptions'
+
+export default function(Vue, options) {
+ mergeOptions(options)
+ Vue.mixin({
+ data() {
+ if (this.$options.dicts === undefined || this.$options.dicts === null) {
+ return {}
+ }
+ const dict = new Dict()
+ dict.owner = this
+ return {
+ dict
+ }
+ },
+ created() {
+ if (!(this.dict instanceof Dict)) {
+ return
+ }
+ options.onCreated && options.onCreated(this.dict)
+ this.dict.init(this.$options.dicts).then(() => {
+ options.onReady && options.onReady(this.dict)
+ this.$nextTick(() => {
+ this.$emit('dictReady', this.dict)
+ if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) {
+ this.$options.methods.onDictReady.call(this, this.dict)
+ }
+ })
+ })
+ },
+ })
+}
diff --git a/src/utils/export.js b/src/utils/export.js
new file mode 100644
index 0000000..2eee50f
--- /dev/null
+++ b/src/utils/export.js
@@ -0,0 +1,66 @@
+import Excel from 'exceljs'
+export function exportExcelWithTotal(sheetName, columns, title, conditional, headerArr, data, totalRow, numFmts, merge) {
+ var workbook = new Excel.Workbook()
+ var sheet = workbook.addWorksheet(sheetName)
+ sheet.columns = columns
+ const maxColCode = String.fromCharCode(64 + columns.length)
+ // 处理标题
+ sheet.mergeCells(`A1:${maxColCode}2`)
+ sheet.getCell('A1').value = title
+ sheet.getCell('A1').alignment = { vertical: 'middle', horizontal: 'center' }
+ sheet.getCell('A1').font = { name: 'SimSun', family: 4, size: 13, bold: true }
+ sheet.mergeCells(`A3:${maxColCode}3`)
+ sheet.getCell('A3').value = conditional
+ sheet.getCell('A3').alignment = { vertical: 'middle', horizontal: 'right' }
+ // 列头
+ sheet.getRow(4).values = headerArr
+ sheet.getRow(4).font = { name: 'SimSun', family: 4, size: 11, bold: true }
+ sheet.getRow(4).alignment = { vertical: 'middle', horizontal: 'left' }
+
+ sheet.addRows(data)
+ numFmts.forEach(element => {
+ sheet.getColumn(element.colIndex).numFmt = element.format
+ })
+ sheet.addRow(totalRow)
+ sheet.getRow(data.length + 5).font = { name: 'SimSun', family: 4, size: 11, bold: true }
+ if (merge) {
+ sheet.mergeCells(merge)
+ }
+ sheet.eachRow((row, number) => {
+ if (number > 3) {
+ row.eachCell(cell => {
+ cell.alignment = { vertical: 'center', horizontal: 'left' }
+ cell.border = {
+ top: { style: 'thin' },
+ left: { style: 'thin' },
+ bottom: { style: 'thin' },
+ right: { style: 'thin' }
+ }
+ })
+ }
+ })
+
+ workbook.xlsx
+ .writeBuffer({
+ base64: true
+ })
+ .then(function(xls64) {
+ var data = new Blob([xls64], {
+ type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
+ })
+ if ('msSaveOrOpenBlob' in navigator) {
+ window.navigator.msSaveOrOpenBlob(data, `${sheetName} ${title}.xlsx`)
+ } else {
+ var a = document.createElement('a')
+ var url = URL.createObjectURL(data)
+ a.href = url
+ a.download = `${sheetName} ${title}.xlsx`
+ document.body.appendChild(a)
+ a.click()
+ setTimeout(function() {
+ document.body.removeChild(a)
+ window.URL.revokeObjectURL(url)
+ }, 0)
+ }
+ })
+}
diff --git a/src/utils/float-operation.js b/src/utils/float-operation.js
new file mode 100644
index 0000000..8d94caa
--- /dev/null
+++ b/src/utils/float-operation.js
@@ -0,0 +1,96 @@
+
+/*
+ * 判断obj是否为一个整数
+*/
+function isInteger(obj) {
+ return Math.floor(obj) === obj
+}
+
+/*
+ * 将一个浮点数转成整数,返回整数和倍数
+ * @param floatNum {number} 小数
+ * @return {object}
+ * {times:100, num: 314}
+*/
+function toInteger(floatNum) {
+ var ret = { times: 1, num: 0 }
+ if (isInteger(floatNum)) {
+ ret.num = floatNum
+ return ret
+ }
+ var strfi = floatNum + ''
+ var dotPos = strfi.indexOf('.')
+ var len = strfi.substr(dotPos + 1).length
+ var times = Math.pow(10, len)
+ var intNum = parseInt(floatNum * times + 0.5, 10)
+ ret.times = times
+ ret.num = intNum
+ return ret
+}
+
+/*
+ *
+ * @param a {number} 运算数1
+ * @param b {number} 运算数2
+ * @param op {string} 运算类型,有加减乘除
+ *
+*/
+function operation(a, b, op) {
+ var o1 = toInteger(a)
+ var o2 = toInteger(b)
+ var n1 = o1.num
+ var n2 = o2.num
+ var t1 = o1.times
+ var t2 = o2.times
+ var max = t1 > t2 ? t1 : t2
+ var result = null
+ switch (op) {
+ case 'add':
+ if (t1 === t2) { // 两个小数位数相同
+ result = n1 + n2
+ } else if (t1 > t2) { // o1 小数位 大于 o2
+ result = n1 + n2 * (t1 / t2)
+ } else { // o1 小数位 小于 o2
+ result = n1 * (t2 / t1) + n2
+ }
+ return result / max
+ case 'subtract':
+ if (t1 === t2) {
+ result = n1 - n2
+ } else if (t1 > t2) {
+ result = n1 - n2 * (t1 / t2)
+ } else {
+ result = n1 * (t2 / t1) - n2
+ }
+ return result / max
+ case 'multiply':
+ result = (n1 * n2) / (t1 * t2)
+ return result
+ case 'divide':
+ result = (n1 / n2) * (t2 / t1)
+ return result
+ }
+}
+
+function add(a, b) {
+ return operation(a, b, 'add')
+}
+
+function subtract(a, b) {
+ return operation(a, b, 'subtract')
+}
+
+function multiply(a, b) {
+ return operation(a, b, 'multiply')
+}
+
+function divide(a, b) {
+ return operation(a, b, 'divide')
+}
+export default {
+ add: add,
+ subtract: subtract,
+ multiply: multiply,
+ divide: divide
+}
+
diff --git a/src/utils/fontsize.js b/src/utils/fontsize.js
new file mode 100644
index 0000000..afaaaa8
--- /dev/null
+++ b/src/utils/fontsize.js
@@ -0,0 +1,6 @@
+export function fontSize(res) {
+ const clientWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth
+ if (!clientWidth) return
+ const fontSize = 100 * (clientWidth / 1920)
+ return res * fontSize
+}
diff --git a/src/utils/formatter.js b/src/utils/formatter.js
new file mode 100644
index 0000000..b0219e5
--- /dev/null
+++ b/src/utils/formatter.js
@@ -0,0 +1,152 @@
+// eslint-disable-next-line no-extend-native
+Date.prototype.format = function(fmt) {
+ var o = {
+ 'M+': this.getMonth() + 1, // 月份
+ 'd+': this.getDate(), // 日
+ 'h+': this.getHours(), // 小时
+ 'm+': this.getMinutes(), // 分
+ 's+': this.getSeconds(), // 秒
+ 'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
+ S: this.getMilliseconds() // 毫秒
+ }
+ if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.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
+}
+
+export function formatUTCTime(utc) {
+ if (utc !== '0001-01-01T00:00:00Z') {
+ const date = new Date(utc)
+ // 格式化时间
+ return FormatTime(date, 'yyyy-MM-dd')
+ } else {
+ return ''
+ }
+}
+
+export function fmtDate(obj) {
+ var date = new Date(obj)
+ var y = 1900 + date.getYear()
+ var m = '0' + (date.getMonth() + 1)
+ var d = '0' + date.getDate()
+ return y + '-' + m.substring(m.length - 2, m.length) + '-' + d.substring(d.length - 2, d.length)
+}
+
+export function parseISOLocal(s) {
+ var b = s.split(/\D/)
+
+ return new Date(b[0], b[1] - 1, b[2])
+}
+
+export function FormatTime(date, fmt) {
+ const o = {
+ 'y+': date.getFullYear(),
+ '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() // 毫秒
+ }
+ for (const k in o) {
+ if (new RegExp('(' + k + ')').test(fmt)) {
+ if (k === 'y+') {
+ fmt = fmt.replace(RegExp.$1, ('' + o[k]).substr(4 - RegExp.$1.length))
+ } else if (k === 'S+') {
+ let lens = RegExp.$1.length
+ lens = lens === 1 ? 3 : lens
+ fmt = fmt.replace(RegExp.$1, ('00' + o[k]).substr(('' + o[k]).length - 1, lens))
+ } else {
+ fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
+ }
+ }
+ }
+ return fmt
+}
+export function fn(time) {
+ var date = new Date(time)
+ var len = time.toString().length
+ // 时间戳不足13位则在后面加零
+ if (len < 13) {
+ var sub = 13 - len
+ sub = Math.pow(10, sub)
+ date = new Date(time * sub)
+ }
+ var y = date.getFullYear() + '-'
+ var M = date.getMonth() + 1
+ M = (M < 10 ? '0' + M : M) + '-'
+ var d = date.getDate()
+ d = (d < 10 ? '0' + d : d) + ' '
+ var h = date.getHours()
+ h = (h < 10 ? '0' + h : h) + ':'
+ var m = date.getMinutes()
+ m = (m < 10 ? '0' + m : m) + ':'
+ var s = date.getSeconds()
+ s = s < 10 ? '0' + s : s
+ return y + M + d + h + m + s
+}
+
+export function getLast3Month() {
+ var now = new Date()
+ var year = now.getFullYear()
+ var month = now.getMonth() + 1 // 0-11表示1-12月
+ var day = now.getDate()
+ var dateObj = {}
+ if (parseInt(month) < 10) {
+ month = '0' + month
+ }
+ if (parseInt(day) < 10) {
+ day = '0' + day
+ }
+
+ dateObj.now = year + '-' + month
+
+ if (parseInt(month) === 1) {
+ // 如果是1月份,则取上一年的10月份
+ dateObj.last = parseInt(year) - 1 + '-10'
+ return dateObj
+ }
+ if (parseInt(month) === 2) {
+ // 如果是2月份,则取上一年的11月份
+ dateObj.last = parseInt(year) - 1 + '-11'
+ return dateObj
+ }
+ if (parseInt(month) === 3) {
+ // 如果是3月份,则取上一年的12月份
+ dateObj.last = parseInt(year) - 1 + '-12'
+ return dateObj
+ } else {
+ dateObj.last = year + '-0' + (parseInt(month) - 3)
+ return dateObj
+ }
+}
+
+export function num2Money(num, cent, isThousand) {
+ if (num == null) return '0.0'
+ num = num.toString().replace(/\$|\,/g, '')
+ // 检查传入数值为数值类型
+ if (isNaN(num)) num = '0'
+ // 获取符号(正/负数)
+ var sign = num === (num = Math.abs(num))
+ num = Math.floor(num * Math.pow(10, cent) + 0.50000000001) // 把指定的小数位先转换成整数.多余的小数位四舍五入
+ var cents = num % Math.pow(10, cent) // 求出小数位数值
+ num = Math.floor(num / Math.pow(10, cent)).toString() // 求出整数位数值
+ cents = cents.toString() // 把小数位转换成字符串,以便求小数位长度
+ // 补足小数位到指定的位数
+ while (cents.length < cent) cents = '0' + cents
+ if (isThousand) {
+ // 对整数部分进行千分位格式化.
+ for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) { num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3)) }
+ }
+ if (cent > 0) return (sign ? '' : '-') + num + '.' + cents
+ // return Number( (((sign) ? '' : '-') + num + '.' + cents))
+ else return (sign ? '' : '-') + num
+ // return Number((((sign) ? '' : '-') + num))
+}
+
+export function fomatFloat(src, pos) {
+ return Math.round(src * Math.pow(10, pos)) / Math.pow(10, pos)
+}
diff --git a/src/utils/get-page-title.js b/src/utils/get-page-title.js
new file mode 100644
index 0000000..07e6c60
--- /dev/null
+++ b/src/utils/get-page-title.js
@@ -0,0 +1,10 @@
+import defaultSettings from '@/settings'
+
+const title = defaultSettings.title || 'IRCIS'
+
+export default function getPageTitle(pageTitle) {
+ if (pageTitle) {
+ return `${pageTitle} - ${title}`
+ }
+ return `${title}`
+}
diff --git a/src/utils/hasPermi.js b/src/utils/hasPermi.js
new file mode 100644
index 0000000..93777c3
--- /dev/null
+++ b/src/utils/hasPermi.js
@@ -0,0 +1,26 @@
+/**
+ * 获取权限布尔值
+ * Copyright (c) 2019 ruoyi
+ */
+import store from '@/store'
+
+export function xfHasPermi(Premis, qorh) {
+ var value = Premis
+ if (value && value instanceof Array && value.length > 0) {
+ const permissionFlag = value
+ const permissions = ( store.getters && store.getters.permissions ) || []
+ let hasPermissions
+ if (qorh && qorh === '&&') {
+ hasPermissions = permissionFlag.every(v => {
+ return permissions.includes(v)
+ })
+ } else {
+ hasPermissions = permissions.some(permission => {
+ return permissionFlag.includes(permission)
+ })
+ }
+ return hasPermissions
+ } else {
+ throw new Error(`请设置操作权限标签值`)
+ }
+}
diff --git a/src/utils/history.js b/src/utils/history.js
new file mode 100644
index 0000000..dad2d01
--- /dev/null
+++ b/src/utils/history.js
@@ -0,0 +1,46 @@
+
+
+/**
+ * 修改地址栏参数,不跳转(替换参数或新增参数)
+ * @param {string} name 参数名称
+ * @param {string} value 参数值
+ */
+export function changeURLStatic(name,value) {
+ var url = location.href
+ var reg = eval('/([\?|&]'+name+'=)[^&]*/gi')
+ var url2=''
+ value = value.toString().replace(/(^\s*)|(\s*$)/g,"") //移除首尾空格
+ if(!value){
+ url2 = url.replace(reg , '') //正则替换
+ }else{
+ if(url.match(reg)){
+ url2 = url.replace(reg , '$1' + value) //正则替换
+ }else{
+ url2 = url + (url.indexOf('?') > -1 ? '&' : '?') + name + '=' +value //没有参数添加参数
+ }
+ }
+ history.replaceState(null,null, url2) //替换地址栏
+}
+
+/**
+ * 获取地址栏参数
+ * @param {string} name 要获取的参数名 注:获取不到是为null
+ * @param {string} value 参数值
+ */
+export function getQueryString(param) {
+ var currentUrl = window.location.href //获取当前链接
+ var arr = currentUrl.split("?")//分割域名和参数界限
+ if (arr.length > 1) {
+ arr = arr[1].split("&")//分割参数
+ for (var i = 0; i < arr.length; i++) {
+ var tem = arr[i].split("=") //分割参数名和参数内容
+ if (tem[0] == param) {
+ return tem[1]
+ }
+ }
+ return null
+ }
+ else {
+ return null
+ }
+}
diff --git a/src/utils/htmlToPdf.js b/src/utils/htmlToPdf.js
new file mode 100644
index 0000000..b1443ba
--- /dev/null
+++ b/src/utils/htmlToPdf.js
@@ -0,0 +1,134 @@
+// 导出页面为PDF格式
+// import html2Canvas from 'html2canvas'
+// import jsPDF from 'jspdf'
+
+// pdf导出:消除分页内容割裂的具体步骤
+// 主要思路:pfd导出页面背景设置为纯白色, 根据内容之间的空白像素点来分页导出。
+
+// 0、导出页面等比例转换成a4纸的格式, 此时宽度为a4w, 高度为H。
+// 1、从高度为H的导出页面(已转换)取出一页a4纸高宽度内容, 内容高度为a4h, 位置标记高度h0(h0 = 0,从h0高度开始取), 页面宽度为a4w。
+// 2、对高度范围为h (h = a4h + h0) 到h0, 宽度为a4w的内容从下到上, 从左到右遍历像素点。
+// 3、当连续遍历到p (p是一个阈值, 一般设为10; 根据实际情形调整) 个白色(#fff)像素点时, 停止遍历。
+// 4、记录此时的遍历高度h1 (h0 < h1 < h) ; 宽度为a4w, 高度范围为h1到h0的内容就是这一页要展示的内容(把该内容复制到新的canvas里, 然后将该canvas利用pdf导出来)。
+// 5、更新位置高度h0 (h0 = h0 + h1)。
+// 6、循环【1】到【5】直到 h0 > H 时跳出循环。
+
+// export default {
+// install(Vue) {
+// Vue.prototype.getPdf = function(pdfDom) {
+// this.loading = true // 显示导出loading
+
+// const title = this.htmlTitle // PDF导出文件描述
+// const w = document.querySelector(pdfDom).offsetWidth // 获得该容器的宽
+// const h = document.querySelector(pdfDom).offsetHeight // 获得该容器的高
+// const scale = 1 // 定义缩放倍数
+
+// const canvas = document.createElement('canvas') // 定义画布canvas
+
+// // PDF内容失真处理
+// canvas.width = w * scale // 将画布宽&&高放大两倍
+// canvas.height = h * scale
+// canvas.state = false // canvas生成pdf过程状态
+// canvas.getContext('2d').scale(scale, scale)
+
+// const options = {
+// scale: scale,
+// canvas: canvas,
+// width: w,
+// height: h,
+// background: '#ffffff'
+// }
+
+// html2Canvas(document.querySelector(pdfDom), options).then(function(canvas) {
+// const a4Width = 552.28 // A4纸原始宽度为592.28, 这里减去了左右间距2个20
+// const a4Height = 801.89 // A4纸原始高度为841.89, 这里减去了左右间距2个20
+// const a4HeightRef = Math.floor(canvas.width / a4Width * a4Height) // html页面在a4纸中的高度 ,这里向下取整, 后面与这个变量相关的值都是近似值
+// const pageData = canvas.toDataURL('image/jpeg', 1.0)
+
+// let actualHeight = canvas.height // html页面在canvas中的高度
+// let positionHeight = 0 // canvas分页, 位置高度
+// // eslint-disable-next-line new-cap
+// const pdf = new jsPDF('x', 'pt', 'a4')
+// const currentCanvas = document.createElement('canvas') // 遍历canvas, 每一页生成的临时canvas
+// let height // canvas分页, 每页实际分割的高度(如果每页没有空白, 该高度=a4HeightRef, 有空白的, 会将下面的空白高度去掉)
+
+// function createPdfPage(canvas) {
+// if (actualHeight > 0) {
+// let checkCount = 0 // 统计出现空白的次数, 按照每页像素点从下到上, 从左到右同时去遍历; 这里根据实际PDF出现的内容, 灵活调整阈值, 使其分割更为合理(这里的阈值为10)
+
+// if (actualHeight > a4HeightRef) {
+// let currentHeight = positionHeight + a4HeightRef // 当前单页
+
+// for (let i = currentHeight; i >= positionHeight; --i) {
+// let isWrite = true
+
+// for (let j = 0; j < canvas.width; ++j) {
+// const c = canvas.getContext('2d').getImageData(j, i, 1, 1).data // 获取横轴为j, 纵轴为i, 高度宽度均为1的像素数据[255,255,255,0.8]
+
+// if (c[0] !== 0xff || c[1] !== 0xff || c[2] !== 0xff) {
+// isWrite = false
+// break
+// }
+// }
+
+// if (isWrite) {
+// ++checkCount
+// if (checkCount >= 10) {
+// currentHeight = i
+// break
+// }
+// } else {
+// ++checkCount
+// }
+// }
+
+// height = Math.round(currentHeight - positionHeight)
+// } else {
+// height = actualHeight
+// }
+
+// currentCanvas.width = canvas.width
+// currentCanvas.height = height
+// // 将当前遍历的canvas页内容复制到新的currentCanvas中
+// currentCanvas.getContext('2d').drawImage(canvas, 0, positionHeight, canvas.width, height, 0, 0, canvas.width, height)
+// pdf.addPage()
+// // 将currentCanvas添加到页面中
+// pdf.addImage(currentCanvas.toDataURL('image/jpeg', 1.0), 'JPEG', 20, 20, a4Width, a4Width / currentCanvas.width * height)
+// actualHeight -= height
+// positionHeight += height
+
+// if (actualHeight > 0) {
+// createPdfPage(canvas)
+// } else {
+// pdf.save(`${title}.pdf`)
+// canvas.state = true
+// }
+// }
+// }
+
+// // 当内容未超过pdf一页显示的范围, 无需分页
+// if (actualHeight < a4HeightRef) {
+// // 这里默认执行了一次pdf.addPage();
+// pdf.addImage(pageData, 'JPEG', 20, 20, a4Width, a4Width / canvas.width * actualHeight)
+// pdf.save(`${title}.pdf`)
+// canvas.state = true
+// } else {
+// // 删除第一张空白页
+// // html2Canvas方法默认就有一页pdf,即在进入createPdfPage()方法前就已经执行了一次pdf.addPage();
+// pdf.deletePage(1)
+// createPdfPage(canvas)
+// }
+// })
+// .then(() => {
+// if (canvas.state) {
+// this.loading = false
+// } else {
+// this.$message({
+// message: 'Error exporting pdf',
+// type: 'error'
+// })
+// }
+// })
+// }
+// }
+// }
diff --git a/src/utils/index.js b/src/utils/index.js
new file mode 100644
index 0000000..00d9b59
--- /dev/null
+++ b/src/utils/index.js
@@ -0,0 +1,62 @@
+
+/**
+ * Parse the time to string
+ * @param {(Object|string|number)} time
+ * @param {string} cFormat
+ * @returns {string | null}
+ */
+export function parseTime(time, cFormat) {
+ if (arguments.length === 0) {
+ return null
+ }
+ const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}'
+ let date
+ if (typeof time === 'object') {
+ date = time
+ } else {
+ if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
+ time = parseInt(time)
+ }
+ if ((typeof time === 'number') && (time.toString().length === 10)) {
+ time = time * 1000
+ }
+ date = new Date(time)
+ }
+ const formatObj = {
+ y: date.getFullYear(),
+ m: date.getMonth() + 1,
+ d: date.getDate(),
+ h: date.getHours(),
+ i: date.getMinutes(),
+ s: date.getSeconds(),
+ a: date.getDay()
+ }
+ const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
+ const value = formatObj[key]
+ // Note: getDay() returns 0 on Sunday
+ if (key === 'a') { return ['日', '一', '二', '三', '四', '五', '六'][value ] }
+ return value.toString().padStart(2, '0')
+ })
+ return time_str
+}
+
+/**
+ * @param {string} url
+ * @returns {Object}
+ */
+export function param2Obj(url) {
+ const search = url.split('?')[1]
+ if (!search) {
+ return {}
+ }
+ return JSON.parse(
+ '{"' +
+ decodeURIComponent(search)
+ .replace(/"/g, '\\"')
+ .replace(/&/g, '","')
+ .replace(/=/g, '":"')
+ .replace(/\+/g, ' ') +
+ '"}'
+ )
+}
+
diff --git a/src/utils/oss.js b/src/utils/oss.js
new file mode 100644
index 0000000..3aafc66
--- /dev/null
+++ b/src/utils/oss.js
@@ -0,0 +1,60 @@
+const OSS = require('ali-oss')
+const router = require('@/router');
+const stream = require('stream')
+import Vue from 'vue'
+const { GenerateSTS, GetObjectStoreToken } = require('../api/user.js')
+import { getToken } from '@/utils/auth'
+
+Vue.prototype.OSSclientConfig = {
+}
+
+function blobToBuffer(blob, fileName) {
+ return new Promise((resolve, reject) => {
+ const file = new File([blob], fileName);
+ resolve(file)
+ })
+}
+
+async function ossGenerateSTS() {
+ let res = await GetObjectStoreToken()
+ Vue.prototype.OSSclientConfig = { ...res.Result[res.Result.ObjectStoreUse] }
+ Vue.prototype.OSSclientConfig.basePath = Vue.prototype.OSSclientConfig.viewEndpoint
+ switch (res.Result.ObjectStoreUse) {
+ case 'AliyunOSS':
+ Vue.prototype.OSSclientConfig.bucket = Vue.prototype.OSSclientConfig.bucketName
+ Vue.prototype.OSSclientConfig.timeout = 10 * 60 * 1000
+ let OSSclient = new OSS(Vue.prototype.OSSclientConfig)
+ Vue.prototype.OSSclient = {
+ put: function (objectName, object) {
+ return new Promise(async (resolve, reject) => {
+ try {
+ let _vm = router.default.app
+ if (_vm._route.path !== '/trials/trials-panel/visit/crc-upload') {
+ var objectItem = objectName.split('/')
+ objectItem[objectItem.length - 1] = new Date().getTime() + '_' + objectItem[objectItem.length - 1]
+ objectName = objectItem.join('/')
+ }
+ let res = await OSSclient.put(objectName, object)
+ if (res && res.url) {
+ resolve({
+ name: objectName,
+ url: Vue.prototype.OSSclientConfig.viewEndpoint + objectName
+ })
+ } else {
+ reject()
+ }
+ } catch (e) {
+ console.log(e)
+ reject()
+ }
+ })
+ }
+ }
+ break
+ }
+ return
+}
+
+
+
+export const OSSclient = ossGenerateSTS
diff --git a/src/utils/permission.js b/src/utils/permission.js
new file mode 100644
index 0000000..83504bc
--- /dev/null
+++ b/src/utils/permission.js
@@ -0,0 +1,20 @@
+export default {
+ install(Vue) {
+ Vue.prototype.checkPermission = function(menuName, btnName) {
+ const funcArr = zzSessionStorage.getItem('FuncTree') ? JSON.parse(zzSessionStorage.getItem('FuncTree')) : {}
+ if (Object.keys(funcArr).length !== 0) {
+ if (funcArr[menuName] && funcArr[menuName] instanceof Array && funcArr[menuName].length > 0) {
+ const permissionBtn = btnName
+ const hasPermission = funcArr[menuName].some(item => {
+ return permissionBtn === item
+ })
+ return hasPermission
+ } else {
+ return false
+ }
+ } else {
+ return false
+ }
+ }
+ }
+}
diff --git a/src/utils/request-download.js b/src/utils/request-download.js
new file mode 100644
index 0000000..d972d91
--- /dev/null
+++ b/src/utils/request-download.js
@@ -0,0 +1,112 @@
+import axios from 'axios'
+import { Message, MessageBox } from 'element-ui'
+import store from '@/store'
+import router from '@/router'
+axios.defaults.withCredentials = false
+const service = axios.create({
+ baseURL: '/api',
+ timeout: 2 * 360000, // request timeout
+ withCredentials: false
+})
+
+// request interceptor
+service.interceptors.request.use(
+ config => {
+ config.headers['Content-Type'] = 'application/json;charset=UTF-8'
+ var language = zzSessionStorage.getItem('lang')
+ config.headers['Accept-Language'] = language === 'en'?'en-US,en;q=0.5':'zh-CN,zh;q=0.9'
+ console.log(config.headers)
+ if (store.getters.token) {
+ config.headers.Authorization = `Bearer ${store.getters.token}`
+ }
+ return config
+ },
+ error => {
+ return Promise.reject(error)
+ }
+)
+
+service.interceptors.response.use(
+ response => {
+ const res = response.data
+ let fileReader = new FileReader();
+ fileReader.onload = function() {
+ try {
+ let jsonData = JSON.parse(fileReader.result); // 如果是普通对象数据,后台转换失败
+ if (!jsonData.IsSuccess && jsonData.ErrorMessage) {
+ MessageBox.confirm(jsonData.ErrorMessage, {
+ type: 'warning',
+ showCancelButton: false,
+ callback: action => {}
+ })
+ return Promise.reject(jsonData)
+ }
+ } catch (err) { // 解析成对象失败,说明是正常的文件流
+ let contentDisposition = response.headers['content-disposition']
+ let fileName = ''
+ if (contentDisposition) {
+ fileName = contentDisposition.split('; ')[2].split('=')[1].split("\'")[2]
+ fileName = decodeURI(fileName)
+ }
+ const a = document.createElement('a')
+ // xls类型: application/vnd.ms-excel
+ // xlsx类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8
+ const href = URL.createObjectURL(new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' }))
+ a.download = fileName
+ a.href = href
+ a.click()
+ URL.revokeObjectURL(href)
+ return Promise.resolve(res)
+ }
+ };
+ fileReader.readAsText(res)
+ },
+ error => {
+ var message = ''
+ if (error && error.response) {
+ const status = error.response.status
+ switch (status) {
+ case 400: message = store.state.lang.language === 'en'? 'Request error' : '请求错误'; break
+ case 401: message = store.state.lang.language === 'en'? 'Not authorized or login timed out. Please log in again.' : '未授权或登陆超时,请重新登录'; break
+ case 403: message = error.response.data.ErrorMessage; break
+ case 404: message = store.state.lang.language === 'en'? 'Request address error' : `请求地址出错`; break
+ case 405: message = store.state.lang.language === 'en'? 'Interface parameter error or request method inconsistency' : `接口参数传递错误,或者请求方法不一致`; break
+ case 408: message = store.state.lang.language === 'en'? 'Request timed out' : '请求超时'; break
+ case 429: message = store.state.lang.language === 'en'? 'The application service limits the traffic. Your requests are too frequent. Please try again later.' : '应用服务限流,您的请求过于频繁,请稍后再试'; break
+ case 500: message = store.state.lang.language === 'en'? 'Internal server error, and unable to complete the request. Software release might be in process. Please contact the administrator.' : '服务器内部错误,无法完成请求;可能正在发布中,请联系管理员处理'; break
+ case 501: message = store.state.lang.language === 'en'? 'Service has not been implemented.' : '服务未实现'; break
+ case 502: message = store.state.lang.language === 'en'? 'System is being upgraded. Please wait patiently.' : '系统正在升级,请耐心等待。'; break
+ case 503: message = store.state.lang.language === 'en'? 'Service is not available' : '服务不可用'; break
+ case 504: message = store.state.lang.language === 'en'? 'Gateway timed out' : '网关超时'; break
+ case 505: message = store.state.lang.language === 'en'? 'HTTP version is not supported' : 'HTTP版本不受支持'; break
+ default: break
+ }
+ if (error.response.status === 401) {
+ if (store.getters.token) {
+ Message({
+ message: message,
+ type: 'warning',
+ showClose: true
+ })
+ store.dispatch('user/logout').then(() => {
+ router.push(`/login`)
+ this.$i18n.locale = 'zh'
+ this.setLanguage('zh')
+ this.$updateDictionary()
+ })
+ }
+ } else {
+ MessageBox.confirm(message, '警告', {
+ type: 'warning',
+ showCancelButton: false,
+ confirmButtonText: '确定',
+ callback: action => {}
+ })
+ }
+ }
+
+ return Promise.reject(new Error(message || 'Error'))
+ }
+)
+
+export default service
diff --git a/src/utils/request-pool.js b/src/utils/request-pool.js
new file mode 100644
index 0000000..d787158
--- /dev/null
+++ b/src/utils/request-pool.js
@@ -0,0 +1,158 @@
+import * as cornerstone from 'cornerstone-core'
+var taskPool = [] // 请求池
+let numRequest = 0 // 正在执行数量
+const maxRequest = 1 // 可配置
+let taskTimer // 轮询的定时器
+var pendingList =[]
+var cachedTask = {} // 存放的任务数据
+const maxTask = 6
+
+
+// 预加载池的添加
+function addTaskIntoPool(task) {
+ return new Promise((resolve, reject) => {
+ taskPool.forEach(task=>{
+ task.priority = task.priority
+ })
+ const cache = cachedTask[task.key]
+ const callback = (executeRes) => {
+ if (executeRes.success) {
+ resolve(executeRes.res)
+ } else {
+ reject(executeRes.err)
+ }
+ }
+ const priority = task.priority || 0;
+ if (cache) {
+ cache.priority = priority
+ task.callback =callback
+ } else {
+ task.callback =callback
+ cachedTask[task.key] = task
+ taskPool.push(task)
+ }
+ })
+}
+// 执行下载
+function executeTask() {
+ if (taskPool.length > 0) {
+ numRequest = 0
+ const executeRequest = maxRequest - numRequest
+
+ if (executeRequest > 0) {
+
+ for (let i = 0; i < executeRequest; i++) {
+ sortTaskPool()
+
+ const task = taskPool.shift()
+ if (!task) {
+ return
+ }
+ numRequest++
+ task.execute().then((res) => {
+ numRequest--
+ task.callback({ success: true, res })
+ executeTask()
+ }, (err) => {
+ numRequest--
+ task.callback({ success: false,err })
+ executeTask()
+ })
+ }
+ }
+ }else{
+ startTaskTimer()
+ }
+}
+function sortTaskPool() {
+ if (taskPool.length > 0) {
+ taskPool.sort((a, b) => b.priority-a.priority )
+
+ }
+}
+
+// 轮询检查请求池中是否有请求需要执行
+function startTaskTimer() {
+ if(taskTimer){
+ clearInterval(taskTimer)
+ taskTimer = null
+ }
+ taskTimer = setInterval(() => {
+ if (taskPool.length > 0) {
+ stopTaskTimer()
+ executeTask()
+ }else{
+ return
+ }
+ }, 50)
+}
+
+// 停止轮询
+function stopTaskTimer() {
+ clearInterval(taskTimer)
+ taskTimer = null
+}
+function loadAndCacheImagePlus(imageId,seriesId, priority) {
+ return new Promise((resolve, reject) => {
+ const imageLoadObject = cornerstone.imageCache.getImageLoadObject(imageId)
+ if (imageLoadObject) {
+ imageLoadObject.promise.then((image) => {
+ resolve(image)
+ }, (err) => {
+ reject(err)
+ })
+ } else {
+ const imageTask = buildImageRequestTask(imageId,seriesId, { priority })
+ addTaskIntoPool(imageTask).then((res) => {
+ resolve(res)
+ }).catch(e => {
+ reject(e)
+ })
+ }
+ })
+}
+function removeTask(seriesId){
+ stopTaskTimer()
+ if (taskPool.length > 0) {
+ for(var i =taskPool.length-1; i>=0;i--){
+ if(taskPool[i] && taskPool[i].seriesId === seriesId){
+ delete cachedTask[taskPool[i].key]
+ taskPool.splice(i,1)
+
+ }
+ }
+
+ }
+ startTaskTimer()
+}
+function resetRequestPool(){
+ taskPool = []
+ pendingList =[]
+ cachedTask = {}
+}
+function resetCachedTask(){
+ taskPool = []
+ pendingList =[]
+ cachedTask = {}
+}
+function buildImageRequestTask(imageId,seriesId, config = {}) {
+ return {
+ key: imageId,
+ seriesId:seriesId,
+ ...config,
+ execute: () => {
+ return cornerstone.loadAndCacheImage(imageId)
+ }
+ };
+}
+
+export default {
+ addTaskIntoPool,
+ executeTask,
+ startTaskTimer,
+ stopTaskTimer,
+ loadAndCacheImagePlus,
+ removeTask,
+ resetRequestPool,
+ resetCachedTask
+}
diff --git a/src/utils/request.js b/src/utils/request.js
new file mode 100644
index 0000000..c6b742f
--- /dev/null
+++ b/src/utils/request.js
@@ -0,0 +1,145 @@
+import axios from 'axios'
+import { Message, MessageBox, Alert } from 'element-ui'
+import store from '@/store'
+import router from '@/router'
+import Vue from 'vue'
+axios.defaults.withCredentials = false
+const service = axios.create({
+ baseURL: '/api',
+ timeout: 2 * 360000, // request timeout
+ withCredentials: false
+})
+var path
+// request interceptor
+// var lang = store.state.lang.language
+
+service.interceptors.request.use(
+ config => {
+ path = router && router.app && router.app._route && router.app._route.path
+ config.headers['Content-Type'] = 'application/json;charset=UTF-8'
+ var language = zzSessionStorage.getItem('lang')
+ config.headers['Accept-Language'] = language === 'en'?'en-US,en;q=0.5':'zh-CN,zh;q=0.9'
+ if (store.getters.token) {
+ config.headers.Authorization = `Bearer ${store.getters.token}`
+ }
+ try {
+ if (eval(process.env.VUE_APP_LOGIN_FOR_PERMISSION)) {
+ if (!path || path === '/ReviewersResearchForm' || path === '/ReviewersResearch' || path === '/login' || path === '/researchForm' || path === '/researchLogin' || path === '/email-recompose' || path === '/recompose' || path === '/resetpassword' || path === '/error') {
+ return config
+ }
+ if (store.state.user.userId !== zzSessionStorage.getItem('userId')) {
+ window.location.href = `/login`
+ zzSessionStorage.removeItem('lastWorkbench')
+ Alert(store.state.lang.language === 'en'? 'The same browser only allows one user account to be logged in at a time.' : '同一浏览器只允许同时登陆一个账户', {
+ type: 'warning',
+ })
+ }
+ }
+ } catch (e) {
+ console.log(e)
+ }
+ return config
+ },
+ error => {
+ // console.log(error)
+ return Promise.reject(error)
+ }
+)
+
+var isConfirm = true
+
+service.interceptors.response.use(
+ response => {
+ const res = response.data
+ if (res.IsSuccess) {
+ isConfirm = true
+ return Promise.resolve(res)
+ } else if (res.IsSuccess === false) {
+ if (res.Code !== 5) {
+ MessageBox.confirm(res.ErrorMessage, {
+ type: 'warning',
+ showCancelButton: false,
+ callback: action => {}
+ })
+ }
+ return Promise.reject(res)
+ } else {
+ return Promise.resolve(res)
+ }
+ },
+ error => {
+ var message = ''
+ if (error && error.response) {
+ const status = error.response.status
+ if (error.response.data && error.response.data.Code === -1) {
+ store.dispatch('user/logout').then(() => {
+ router.push(`/login`)
+ this.$i18n.locale = 'zh'
+ this.setLanguage('zh')
+ this.$updateDictionary()
+ })
+ }
+ switch (status) {
+ case 400: message = store.state.lang.language === 'en'? 'Request error' : '请求错误'; break
+ case 401: message = store.state.lang.language === 'en'? 'Not authorized or login timed out. Please log in again.' : '未授权或登陆超时,请重新登录'; break
+ case 403: message = error.response.data.ErrorMessage; break
+ case 404: message = store.state.lang.language === 'en'? 'Request address error' : `请求地址出错`; break
+ case 405: message = store.state.lang.language === 'en'? 'Interface parameter error or request method inconsistency' : `接口参数传递错误,或者请求方法不一致`; break
+ case 408: message = store.state.lang.language === 'en'? 'Request timed out' : '请求超时'; break
+ case 429: message = store.state.lang.language === 'en'? 'The application service limits the traffic. Your requests are too frequent. Please try again later.' : '应用服务限流,您的请求过于频繁,请稍后再试'; break
+ case 500: message = store.state.lang.language === 'en'? 'Internal server error, and unable to complete the request. Software release might be in process. Please contact the administrator.' : '服务器内部错误,无法完成请求;可能正在发布中,请联系管理员处理'; break
+ case 501: message = store.state.lang.language === 'en'? 'Service has not been implemented.' : '服务未实现'; break
+ case 502: message = store.state.lang.language === 'en'? 'System is being upgraded. Please wait patiently.' : '系统正在升级,请耐心等待。'; break
+ case 503: message = store.state.lang.language === 'en'? 'Service is not available' : '服务不可用'; break
+ case 504: message = store.state.lang.language === 'en'? 'Gateway timed out' : '网关超时'; break
+ case 505: message = store.state.lang.language === 'en'? 'HTTP version is not supported' : 'HTTP版本不受支持'; break
+ default: break
+ }
+ if (error.response.status === 401) {
+ if (store.getters.token) {
+ if(message !== ''){
+ Message({
+ message: message,
+ type: 'warning',
+ showClose: true
+ })
+ }
+ store.dispatch('user/logout').then(() => {
+ router.push(`/login`)
+ this.$i18n.locale = 'zh'
+ this.setLanguage('zh')
+ this.$updateDictionary()
+ })
+ } else {
+ Message({
+ message: store.state.lang.language === 'en'? 'You are not authorized to access the interface' : '您无权访问接口',
+ type: 'warning',
+ showClose: true
+ })
+ }
+ } else {
+ if(message !== '' && isConfirm){
+ MessageBox.confirm(message, store.state.lang.language === 'en'? 'Warning' : '警告', {
+ type: 'warning',
+ showCancelButton: false,
+ callback: action => {}
+ })
+ }
+ }
+ }
+ if (!window.navigator.onLine && isConfirm) {
+ MessageBox.confirm(store.state.lang.language === 'en'? 'Please check your network,and try again later!' : '请检查网络,稍后重试!', store.state.lang.language === 'en'? 'Warning' : '警告', {
+ type: 'warning',
+ showCancelButton: false,
+ callback: action => {}
+ })
+ isConfirm = false
+ }
+ return Promise.reject(new Error(message || 'Error'))
+ }
+)
+
+
+
+
+export default service
diff --git a/src/utils/ruoyi.js b/src/utils/ruoyi.js
new file mode 100644
index 0000000..0d2b29a
--- /dev/null
+++ b/src/utils/ruoyi.js
@@ -0,0 +1,217 @@
+/**
+ * 通用js方法封装处理
+ * Copyright (c) 2019 ruoyi
+ */
+
+// 日期格式化
+export function parseTime(time, pattern) {
+ if (arguments.length === 0 || !time) {
+ return null
+ }
+ const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
+ let date
+ if (typeof time === 'object') {
+ date = time
+ } else {
+ if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
+ time = parseInt(time)
+ } else if (typeof time === 'string') {
+ time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '')
+ }
+ if ((typeof time === 'number') && (time.toString().length === 10)) {
+ time = time * 1000
+ }
+ date = new Date(time)
+ }
+ const formatObj = {
+ y: date.getFullYear(),
+ m: date.getMonth() + 1,
+ d: date.getDate(),
+ h: date.getHours(),
+ i: date.getMinutes(),
+ s: date.getSeconds(),
+ a: date.getDay()
+ }
+ const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+ let value = formatObj[key]
+ // Note: getDay() returns 0 on Sunday
+ if (key === 'a') {
+ return ['日', '一', '二', '三', '四', '五', '六'][value]
+ }
+ if (result.length > 0 && value < 10) {
+ value = '0' + value
+ }
+ return value || 0
+ })
+ return time_str
+}
+
+// 表单重置
+export function resetForm(refName) {
+ if (this.$refs[refName]) {
+ this.$refs[refName].resetFields()
+ }
+}
+
+// 添加日期范围
+export function addDateRange(params, dateRange, propName) {
+ const search = params
+ search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {}
+ dateRange = Array.isArray(dateRange) ? dateRange : []
+ if (typeof (propName) === 'undefined') {
+ search.params['beginTime'] = dateRange[0]
+ search.params['endTime'] = dateRange[1]
+ } else {
+ search.params['begin' + propName] = dateRange[0]
+ search.params['end' + propName] = dateRange[1]
+ }
+ return search
+}
+
+// 回显数据字典
+export function selectDictLabel(datas, value) {
+ var actions = []
+ Object.keys(datas).some((key) => {
+ if (datas[key].value == ('' + value)) {
+ actions.push(datas[key].label)
+ return true
+ }
+ })
+ return actions.join('')
+}
+
+// 回显数据字典(字符串数组)
+export function selectDictLabels(datas, value, separator) {
+ var actions = []
+ var currentSeparator = undefined === separator ? ',' : separator
+ var temp = value.split(currentSeparator)
+ Object.keys(value.split(currentSeparator)).some((val) => {
+ Object.keys(datas).some((key) => {
+ if (datas[key].dictValue == ('' + temp[val])) {
+ actions.push(datas[key].dictLabel + currentSeparator)
+ }
+ })
+ })
+ return actions.join('').substring(0, actions.join('').length - 1)
+}
+
+// 字符串格式化(%s )
+export function sprintf(str) {
+ var args = arguments; var flag = true; var i = 1
+ str = str.replace(/%s/g, function() {
+ var arg = args[i++]
+ if (typeof arg === 'undefined') {
+ flag = false
+ return ''
+ }
+ return arg
+ })
+ return flag ? str : ''
+}
+
+// 转换字符串,undefined,null等转化为""
+export function praseStrEmpty(str) {
+ if (!str || str == 'undefined' || str == 'null') {
+ return ''
+ }
+ return str
+}
+
+// 如果name有值返回key=参数的键值对的值 返回url上所有键值对的结果集
+export function params (name) {
+ var rs = urlsearch()
+ if (rs != null) {
+ if (name) {
+ return rs[name]
+ }
+ }
+ return rs
+}
+function urlsearch () {
+ var rs = null
+ var name, value
+ var str = location.href
+ var num = str.indexOf('?')
+ str = str.substr(num + 1)
+ var arr = str.split('&')
+ if (arr.length > 0) {
+ rs = {}
+ for (var i = 0; i < arr.length; i++) {
+ num = arr[i].indexOf('=')
+ if (num > 0) {
+ name = arr[i].substring(0, num)
+ value = arr[i].substr(num + 1)
+ rs[name] = decodeURI(value)
+ }
+ }
+ }
+ return rs
+}
+
+// 数据合并
+export function mergeRecursive(source, target) {
+ for (var p in target) {
+ try {
+ if (target[p].constructor == Object) {
+ source[p] = mergeRecursive(source[p], target[p])
+ } else {
+ source[p] = target[p]
+ }
+ } catch (e) {
+ source[p] = target[p]
+ }
+ }
+ return source
+}
+
+/**
+ * 构造树型结构数据
+ * @param {*} data 数据源
+ * @param {*} id id字段 默认 'id'
+ * @param {*} parentId 父节点字段 默认 'parentId'
+ * @param {*} children 孩子节点字段 默认 'children'
+ */
+export function handleTree(data, id, parentId, children) {
+ var config = {
+ id: id || 'id',
+ parentId: parentId || 'parentId',
+ childrenList: children || 'children'
+ }
+
+ var childrenListMap = {}
+ var nodeIds = {}
+ var tree = []
+
+ for (var d of data) {
+ var parentId = d[config.parentId]
+ if (childrenListMap[parentId] == null) {
+ childrenListMap[parentId] = []
+ }
+ nodeIds[d[config.id]] = d
+ childrenListMap[parentId].push(d)
+ }
+
+ for (var d of data) {
+ var parentId = d[config.parentId]
+ if (nodeIds[parentId] == null) {
+ tree.push(d)
+ }
+ }
+
+ for (var t of tree) {
+ adaptToChildrenList(t)
+ }
+
+ function adaptToChildrenList(o) {
+ if (childrenListMap[o[config.id]] !== null) {
+ o[config.childrenList] = childrenListMap[o[config.id]]
+ }
+ if (o[config.childrenList]) {
+ for (var c of o[config.childrenList]) {
+ adaptToChildrenList(c)
+ }
+ }
+ }
+
+ return tree
+}
diff --git a/src/utils/scroll-to.js b/src/utils/scroll-to.js
new file mode 100644
index 0000000..b52731e
--- /dev/null
+++ b/src/utils/scroll-to.js
@@ -0,0 +1,55 @@
+Math.easeInOutQuad = function(t, b, c, d) {
+ t /= d / 2
+ if (t < 1) {
+ return c / 2 * t * t + b
+ }
+ t--
+ return -c / 2 * (t * (t - 2) - 1) + b
+}
+
+var requestAnimFrame = (function() {
+ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 60) }
+})()
+
+/**
+ *
+ * @param {number} amount
+ */
+function move(amount) {
+ document.documentElement.scrollTop = amount
+ document.body.parentNode.scrollTop = amount
+ document.body.scrollTop = amount
+}
+
+function position() {
+ return document.documentElement.scrollTop || document.body.parentNode.scrollTop || document.body.scrollTop
+}
+
+/**
+ * @param {number} to
+ * @param {number} duration
+ * @param {Function} callback
+ */
+export function scrollTo(to, duration, callback) {
+ const start = position()
+ const change = to - start
+ const increment = 20
+ let currentTime = 0
+ duration = (typeof (duration) === 'undefined') ? 500 : duration
+ var animateScroll = function() {
+ currentTime += increment
+
+ var val = Math.easeInOutQuad(currentTime, start, change, duration)
+
+ move(val)
+
+ if (currentTime < duration) {
+ requestAnimFrame(animateScroll)
+ } else {
+ if (callback && typeof (callback) === 'function') {
+ callback()
+ }
+ }
+ }
+ animateScroll()
+}
diff --git a/src/utils/validate.js b/src/utils/validate.js
new file mode 100644
index 0000000..9c6b3e9
--- /dev/null
+++ b/src/utils/validate.js
@@ -0,0 +1,8 @@
+
+/**
+ * @param {string} path
+ * @returns {Boolean}
+ */
+export function isExternal(path) {
+ return /^(https?:|mailto:|tel:)/.test(path)
+}
diff --git a/src/utils/xf.js b/src/utils/xf.js
new file mode 100644
index 0000000..730d248
--- /dev/null
+++ b/src/utils/xf.js
@@ -0,0 +1,186 @@
+/**
+ * 通用js方法封装处理
+ * Copyright (c) 2019 ruoyi
+ */
+
+// 日期格式化
+export function parseTime(time, pattern) {
+ if (arguments.length === 0 || !time) {
+ return null
+ }
+ const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
+ let date
+ if (typeof time === 'object') {
+ date = time
+ } else {
+ if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
+ time = parseInt(time)
+ } else if (typeof time === 'string') {
+ time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
+ }
+ if ((typeof time === 'number') && (time.toString().length === 10)) {
+ time = time * 1000
+ }
+ date = new Date(time)
+ }
+ const formatObj = {
+ y: date.getFullYear(),
+ m: date.getMonth() + 1,
+ d: date.getDate(),
+ h: date.getHours(),
+ i: date.getMinutes(),
+ s: date.getSeconds(),
+ a: date.getDay()
+ }
+ const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
+ let value = formatObj[key]
+ // Note: getDay() returns 0 on Sunday
+ if (key === 'a') {
+ return ['日', '一', '二', '三', '四', '五', '六'][value]
+ }
+ if (result.length > 0 && value < 10) {
+ value = '0' + value
+ }
+ return value || 0
+ })
+ return time_str
+}
+
+// 表单重置
+export function resetForm(refName) {
+ if (this.$refs[refName]) {
+ this.$refs[refName].resetFields();
+ }
+}
+
+// 添加日期范围
+export function addDateRange(params, dateRange, propName) {
+ let search = params;
+ search.params = typeof (search.params) === 'object' && search.params !== null && !Array.isArray(search.params) ? search.params : {};
+ dateRange = Array.isArray(dateRange) ? dateRange : [];
+ if (typeof (propName) === 'undefined') {
+ search.params['beginTime'] = dateRange[0];
+ search.params['endTime'] = dateRange[1];
+ } else {
+ search.params['begin' + propName] = dateRange[0];
+ search.params['end' + propName] = dateRange[1];
+ }
+ return search;
+}
+
+// 回显数据字典
+export function selectDictLabel(datas, value) {
+ var actions = [];
+ Object.keys(datas).some((key) => {
+ if (datas[key].value == ('' + value)) {
+ actions.push(datas[key].label);
+ return true;
+ }
+ })
+ return actions.join('');
+}
+
+// 回显数据字典(字符串数组)
+export function selectDictLabels(datas, value, separator) {
+ var actions = [];
+ var currentSeparator = undefined === separator ? "," : separator;
+ var temp = value.split(currentSeparator);
+ Object.keys(value.split(currentSeparator)).some((val) => {
+ Object.keys(datas).some((key) => {
+ if (datas[key].dictValue == ('' + temp[val])) {
+ actions.push(datas[key].dictLabel + currentSeparator);
+ }
+ })
+ })
+ return actions.join('').substring(0, actions.join('').length - 1);
+}
+
+// 字符串格式化(%s )
+export function sprintf(str) {
+ var args = arguments, flag = true, i = 1;
+ str = str.replace(/%s/g, function () {
+ var arg = args[i++];
+ if (typeof arg === 'undefined') {
+ flag = false;
+ return '';
+ }
+ return arg;
+ });
+ return flag ? str : '';
+}
+
+// 转换字符串,undefined,null等转化为""
+export function praseStrEmpty(str) {
+ if (!str || str == "undefined" || str == "null") {
+ return "";
+ }
+ return str;
+}
+
+// 数据合并
+export function mergeRecursive(source, target) {
+ for (var p in target) {
+ try {
+ if (target[p].constructor == Object) {
+ source[p] = mergeRecursive(source[p], target[p]);
+ } else {
+ source[p] = target[p];
+ }
+ } catch (e) {
+ source[p] = target[p];
+ }
+ }
+ return source
+}
+
+/**
+ * 构造树型结构数据
+ * @param {*} data 数据源
+ * @param {*} id id字段 默认 'id'
+ * @param {*} parentId 父节点字段 默认 'parentId'
+ * @param {*} children 孩子节点字段 默认 'children'
+ */
+export function handleTree(data, id, parentId, children) {
+ var config = {
+ id: id || 'id',
+ parentId: parentId || 'parentId',
+ childrenList: children || 'children'
+ }
+
+ var childrenListMap = {}
+ var nodeIds = {}
+ var tree = []
+
+ for (var d of data) {
+ var parentId = d[config.parentId]
+ if (childrenListMap[parentId] == null) {
+ childrenListMap[parentId] = []
+ }
+ nodeIds[d[config.id]] = d
+ childrenListMap[parentId].push(d)
+ }
+
+ for (var d of data) {
+ var parentId = d[config.parentId];
+ if (nodeIds[parentId] == null) {
+ tree.push(d)
+ }
+ }
+
+ for (var t of tree) {
+ adaptToChildrenList(t)
+ }
+
+ function adaptToChildrenList(o) {
+ if (childrenListMap[o[config.id]] !== null) {
+ o[config.childrenList] = childrenListMap[o[config.id]]
+ }
+ if (o[config.childrenList]) {
+ for (var c of o[config.childrenList]) {
+ adaptToChildrenList(c)
+ }
+ }
+ }
+
+ return tree
+}
diff --git a/src/views/404.vue b/src/views/404.vue
new file mode 100644
index 0000000..9bf87db
--- /dev/null
+++ b/src/views/404.vue
@@ -0,0 +1,225 @@
+
+
+
+
+
+
OOPS!
+
+
Please check that the URL you entered is correct, or click the button below to return to the homepage.
+
Back
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/log/index.vue b/src/views/admin/log/index.vue
new file mode 100644
index 0000000..ba2dddd
--- /dev/null
+++ b/src/views/admin/log/index.vue
@@ -0,0 +1,133 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/log/log.js b/src/views/admin/log/log.js
new file mode 100644
index 0000000..0d00be5
--- /dev/null
+++ b/src/views/admin/log/log.js
@@ -0,0 +1,60 @@
+// 日志列表配置信息
+export const columns = [
+ { type: 'index' },
+ { prop: 'LogCategory', label: 'Category', minWidth: 50, sortable: 'custom', showOverflowTooltip: true },
+ { prop: 'ApiPath', label: 'Api', minWidth: 100, sortable: 'custom', showOverflowTooltip: true },
+ // { prop: 'Params', label: 'Params', minWidth: 150, showOverflowTooltip: false },
+ // { prop: 'Result', label: 'Result', minWidth: 150, showOverflowTooltip: false },
+ { prop: 'RequestTime', label: 'Request Time', minWidth: 100, sortable: 'custom', showOverflowTooltip: true },
+ { prop: 'ElapsedMilliseconds', label: 'Elapsed Milliseconds', minWidth: 100, showOverflowTooltip: true },
+ { prop: 'OptUserName', label: 'Operator', minWidth: 100, sortable: 'custom', showOverflowTooltip: true },
+ { prop: 'ClientIP', label: 'Client IP', minWidth: 100, showOverflowTooltip: true },
+ { prop: 'Status', label: 'Status', minWidth: 70, sortable: 'custom', showOverflowTooltip: true },
+ { prop: 'Message', label: 'Message', minWidth: 70, showOverflowTooltip: true }
+]
+const Category = [
+ { label: 'Reviewer', value: 'Reviewer' },
+ { label: 'Trial', value: 'Trial' },
+ { label: 'Enroll', value: 'Enroll' },
+ { label: 'Workload', value: 'Workload' },
+ { label: 'Common', value: 'Common' },
+ { label: 'Institution', value: 'Institution' },
+ { label: 'Financial', value: 'Financial' },
+ { label: 'Management', value: 'Management' },
+ { label: 'Image', value: 'Image' }
+]
+export const searchForm = [
+ {
+ type: 'Select',
+ label: 'Category:',
+ prop: 'LogCategory',
+ width: '120px',
+ placeholder: '',
+ options: Category,
+ props: { label: 'label', value: 'value' },
+ change: scope => ''
+ },
+ {
+ type: 'Input',
+ label: 'Keyword:',
+ prop: 'Keyword',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Custom',
+ slot: 'beginTimeSlot',
+ label: 'Begin Time:',
+ prop: 'BeginTime'
+ },
+ {
+ type: 'Custom',
+ slot: 'endTimeSlot',
+ label: 'End Time:',
+ prop: 'EndTime'
+ }
+]
+export const searchHandle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' }
+]
diff --git a/src/views/admin/menu/components/MenuForm.vue b/src/views/admin/menu/components/MenuForm.vue
new file mode 100644
index 0000000..2e6ae7d
--- /dev/null
+++ b/src/views/admin/menu/components/MenuForm.vue
@@ -0,0 +1,127 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
+
diff --git a/src/views/admin/menu/index.vue b/src/views/admin/menu/index.vue
new file mode 100644
index 0000000..9e3c337
--- /dev/null
+++ b/src/views/admin/menu/index.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
diff --git a/src/views/admin/menu/menu.js b/src/views/admin/menu/menu.js
new file mode 100644
index 0000000..2b60bdd
--- /dev/null
+++ b/src/views/admin/menu/menu.js
@@ -0,0 +1,6 @@
+export const model_cfg = {
+ visible: false,
+ title: '',
+ width: '600px',
+ showClose: true
+}
diff --git a/src/views/admin/role/components/RoleForm.vue b/src/views/admin/role/components/RoleForm.vue
new file mode 100644
index 0000000..dbfbe3d
--- /dev/null
+++ b/src/views/admin/role/components/RoleForm.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/admin/role/components/RoleFunction.vue b/src/views/admin/role/components/RoleFunction.vue
new file mode 100644
index 0000000..8baf5ca
--- /dev/null
+++ b/src/views/admin/role/components/RoleFunction.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/role/components/RoleMenu.vue b/src/views/admin/role/components/RoleMenu.vue
new file mode 100644
index 0000000..214a049
--- /dev/null
+++ b/src/views/admin/role/components/RoleMenu.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
diff --git a/src/views/admin/role/index.vue b/src/views/admin/role/index.vue
new file mode 100644
index 0000000..96fc5c7
--- /dev/null
+++ b/src/views/admin/role/index.vue
@@ -0,0 +1,149 @@
+
+
+
+
+ New
+
+
+
+ {{ scope.row.Type === 1?'Trial':scope.row.Type === 2?'Reviewer':scope.row.Type === 3?'Other':'' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/admin/role/role.js b/src/views/admin/role/role.js
new file mode 100644
index 0000000..3d1dfcd
--- /dev/null
+++ b/src/views/admin/role/role.js
@@ -0,0 +1,80 @@
+// 角色列表配置信息
+export const role_columns = [
+ { type: 'index' },
+
+ {
+ prop: 'UserType',
+ label: 'User Type',
+ minWidth: 120,
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'UserTypeShortName',
+ label: 'Shortname',
+ minWidth: 100,
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Type',
+ label: 'Group',
+ hidden: true,
+ minWidth: 100,
+ showOverflowTooltip: true,
+ slot: 'TypeSlot'
+ },
+
+ {
+ prop: 'Description',
+ label: 'Description',
+ minWidth: 100,
+ showOverflowTooltip: true },
+ {
+ type: 'operate',
+ label: 'Action',
+ minWidth: 100,
+ operates: [
+ // { name: 'Permission', type: 'primary', emitKey: 'permission' },
+ { name: 'Edit', type: 'primary', emitKey: 'edit' },
+ { name: 'Delete', type: 'danger', emitKey: 'delete' }
+ ] }
+]
+export const model_cfg = {
+ visible: false,
+ title: '',
+ width: '600px',
+ showClose: true
+}
+export const editRoleForm = [
+ {
+ type: 'Input',
+ label: 'Role Name',
+ prop: 'RoleName',
+ width: '100%',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Description',
+ prop: 'RoleDescription',
+ width: '100%',
+ placeholder: ''
+ }
+]
+export const editData = {
+ RoleName: null,
+ RoleDescription: null
+}
+export const editRules = {
+ RoleName: [
+ { required: true, message: 'Please specify', trigger: 'blur' },
+ { max: 50, message: 'The maximum length is 50' }
+ ],
+ RoleDescription: [
+ { max: 500, message: 'The maximum length is 500' }
+ ]
+
+}
+export const editHandle = [
+ { label: 'Cancel', type: 'primary', emitKey: 'cancel' },
+ { label: 'Save', type: 'primary', emitKey: 'save' }
+]
diff --git a/src/views/admin/user/add/index.vue b/src/views/admin/user/add/index.vue
new file mode 100644
index 0000000..ad9ae93
--- /dev/null
+++ b/src/views/admin/user/add/index.vue
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/src/views/admin/user/components/Account.vue b/src/views/admin/user/components/Account.vue
new file mode 100644
index 0000000..2d6293f
--- /dev/null
+++ b/src/views/admin/user/components/Account.vue
@@ -0,0 +1,39 @@
+
+
+
+
+ Reset Password
+
+
+
+
diff --git a/src/views/admin/user/components/UserInfo.vue b/src/views/admin/user/components/UserInfo.vue
new file mode 100644
index 0000000..c77558a
--- /dev/null
+++ b/src/views/admin/user/components/UserInfo.vue
@@ -0,0 +1,217 @@
+
+
+
+
+ Basic Information
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Male
+ Female
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Affiliation
+
+
+
+ Internal
+ External
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save
+
+
+
+
+
diff --git a/src/views/admin/user/edit/index.vue b/src/views/admin/user/edit/index.vue
new file mode 100644
index 0000000..921b2c8
--- /dev/null
+++ b/src/views/admin/user/edit/index.vue
@@ -0,0 +1,40 @@
+
+
+
+
diff --git a/src/views/admin/user/index.vue b/src/views/admin/user/index.vue
new file mode 100644
index 0000000..d559fac
--- /dev/null
+++ b/src/views/admin/user/index.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/views/admin/user/list/index.vue b/src/views/admin/user/list/index.vue
new file mode 100644
index 0000000..e1baab2
--- /dev/null
+++ b/src/views/admin/user/list/index.vue
@@ -0,0 +1,139 @@
+
+
+
+
+ New
+
+
+
+
+ {{ scope.row.Sex?'Male':'Female' }}
+
+
+ {{ scope.row.RoleNameList.map(role => role.RoleName).join(',') }}
+
+
+ {{ scope.row.Status?'Enable':'Disable' }}
+
+
+
+
+
diff --git a/src/views/admin/user/list/list.js b/src/views/admin/user/list/list.js
new file mode 100644
index 0000000..fae4078
--- /dev/null
+++ b/src/views/admin/user/list/list.js
@@ -0,0 +1,136 @@
+// 用户列表配置信息
+export const columns = [
+ { type: 'index' },
+ {
+ prop: 'UserCode',
+ label: 'S/N',
+ width: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'UserName',
+ label: 'User ID',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'RealName',
+ label: 'Name',
+ minWidth: 120,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Sex',
+ label: 'Gender',
+ hidden: true,
+ slot: 'genderSlot',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Phone',
+ label: 'Phone',
+ minWidth: 120,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'EMail',
+ label: 'EMail',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'OrganizationName',
+ label: 'Organization',
+ minWidth: 130,
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'UserType',
+ label: 'User Type',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ // {
+ // prop: 'RoleNameList',
+ // label: 'Roles',
+ // hidden: true,
+ // slot: 'roleSlot',
+ // minWidth: 250,
+ // showOverflowTooltip: true
+ // },
+ {
+ prop: 'Status',
+ label: 'Status',
+ hidden: true,
+ slot: 'statusSlot',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true },
+ { type: 'operate',
+ label: 'Action',
+ minWidth: 200,
+ operates: [
+ { name: 'Edit', type: 'primary', emitKey: 'editCb' },
+ { name: 'Delete', type: 'danger', emitKey: 'deleteCb' }
+ ] }
+]
+
+// 用户列表查询表单配置信息
+export const searchForm = [
+ {
+ type: 'Input',
+ label: 'User ID:',
+ prop: 'UserName',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Phone:',
+ prop: 'Phone',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Organization:',
+ prop: 'OrganizationName',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Select',
+ label: 'Status:',
+ prop: 'UserState',
+ width: '100px',
+ options: [
+ { label: 'Enable', value: 1 },
+ { label: 'Disable', value: 0 }
+ ],
+ props: { label: 'label', value: 'value' },
+ change: scope => '',
+ placeholder: ''
+ },
+ {
+ type: 'Select',
+ label: 'User Type:',
+ prop: 'UserType',
+ width: '160px',
+ options: [], // 下拉选项
+ props: { label: 'UserType', value: 'Id' }, // 下拉选项配置信息,必填
+ placeholder: ''
+ }
+]
+// 用户列表查询表单事件配置信息
+export const searchHandle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' }
+]
diff --git a/src/views/blindResumeInfo/components/Agreements.vue b/src/views/blindResumeInfo/components/Agreements.vue
new file mode 100644
index 0000000..07a78a1
--- /dev/null
+++ b/src/views/blindResumeInfo/components/Agreements.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ View
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/BasicInfo.vue b/src/views/blindResumeInfo/components/BasicInfo.vue
new file mode 100644
index 0000000..e097903
--- /dev/null
+++ b/src/views/blindResumeInfo/components/BasicInfo.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+ {{ basicInfo.BlindName }}
+
+
+
+
+ {{ basicInfo.BlindNameCN }}
+
+
+
+
+ {{ basicInfo.Sex === 0?'Male':'Female' }}
+ {{ basicInfo.Sex === 0?'男':'女' }}
+
+
+
+
+
+ {{ (Array.isArray(basicInfo.Title)&& basicInfo.Title.length > 0) ? basicInfo.TitleList.join(', ') : '' }}
+
+
+ {{ (Array.isArray(basicInfo.TitleCNList)&& basicInfo.TitleCNList.length > 0) ? basicInfo.TitleCNList.join(', ') : '' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/Comment.vue b/src/views/blindResumeInfo/components/Comment.vue
new file mode 100644
index 0000000..664e726
--- /dev/null
+++ b/src/views/blindResumeInfo/components/Comment.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/Credentials.vue b/src/views/blindResumeInfo/components/Credentials.vue
new file mode 100644
index 0000000..d5e6130
--- /dev/null
+++ b/src/views/blindResumeInfo/components/Credentials.vue
@@ -0,0 +1,182 @@
+
+
+
+ Download
+
+
+
+
+
+
+
+
+
+ View
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/EducationTraining.vue b/src/views/blindResumeInfo/components/EducationTraining.vue
new file mode 100644
index 0000000..c3bf8c3
--- /dev/null
+++ b/src/views/blindResumeInfo/components/EducationTraining.vue
@@ -0,0 +1,188 @@
+
+
+
Education (in chronological order)
+
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Degree:scope.row.DegreeCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Major:scope.row.MajorCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Organization:scope.row.OrganizationCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.City:scope.row.CityCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Province:scope.row.ProvinceCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Country:scope.row.CountryCN }}
+
+
+
+
+
+
Postgraduate Training (in chronological order)
+
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Training:scope.row.TrainingCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Major:scope.row.MajorCN }}
+
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Hospital:scope.row.HospitalCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.School:scope.row.SchoolCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.City:scope.row.CityCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Province:scope.row.ProvinceCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Country:scope.row.CountryCN }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/Employment.vue b/src/views/blindResumeInfo/components/Employment.vue
new file mode 100644
index 0000000..f616dbb
--- /dev/null
+++ b/src/views/blindResumeInfo/components/Employment.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+ {{ employment.Department }}
+ {{ employment.DepartmentCN }}
+
+
+
+
+ {{ employment.Rank }}
+ {{ employment.RankCN }}
+
+
+
+
+ {{ employment.Physician }}
+ {{ employment.PhysicianCN }}
+
+
+
+
+ {{ employment.Position }}
+ {{ employment.PositionCN }}
+
+
+
+
+
+
+
+ {{ employment.HospitalName }}
+ {{ employment.HospitalNameCN }}
+
+
+
+
+ {{ employment.UniversityAffiliated }}
+ {{ employment.UniversityAffiliatedCN }}
+
+
+
+
+ {{ employment.City }}
+ {{ employment.CityCN }}
+
+
+
+
+ {{ employment.Province }}
+ {{ employment.ProvinceCN }}
+
+
+
+
+ {{ employment.Country }}
+ {{ employment.CountryCN }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/ResearchPublication.vue b/src/views/blindResumeInfo/components/ResearchPublication.vue
new file mode 100644
index 0000000..4f15d34
--- /dev/null
+++ b/src/views/blindResumeInfo/components/ResearchPublication.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/Resume.vue b/src/views/blindResumeInfo/components/Resume.vue
new file mode 100644
index 0000000..3d9b4bf
--- /dev/null
+++ b/src/views/blindResumeInfo/components/Resume.vue
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Language===1?'CH':scope.row.Language===2?'EN':'' }}
+
+
+
+
+
+ Download
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/Specialty.vue b/src/views/blindResumeInfo/components/Specialty.vue
new file mode 100644
index 0000000..bbda130
--- /dev/null
+++ b/src/views/blindResumeInfo/components/Specialty.vue
@@ -0,0 +1,58 @@
+
+
+
+
+ {{ specialty.Speciality }}
+ {{ specialty.SpecialityCN }}
+
+
+
+ {{ specialty.Subspeciality }}
+ {{ specialty.SubspecialityCNList }}
+
+
+
+ {{ specialty.ReadingType }}
+ {{ specialty.ReadingTypeCNList }}
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/StatusInfo.vue b/src/views/blindResumeInfo/components/StatusInfo.vue
new file mode 100644
index 0000000..9ac7760
--- /dev/null
+++ b/src/views/blindResumeInfo/components/StatusInfo.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+ {{ statusList.Submitted }}
+
+ {{ statusList.Submitted }}
+
+
+
+
+
+ {{ statusList.Approved }}
+
+ {{ statusList.Approved }}
+
+
+
+
+
+ {{ statusList.Reading }}
+
+ {{ statusList.Reading }}
+
+
+
+
+ {{ holiday }}
+ Planned Vacation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/components/TrialExperience.vue b/src/views/blindResumeInfo/components/TrialExperience.vue
new file mode 100644
index 0000000..a5b51bd
--- /dev/null
+++ b/src/views/blindResumeInfo/components/TrialExperience.vue
@@ -0,0 +1,122 @@
+
+
+
Clinical Trial Experience
+
+
+
+
+
+ {{ scope.row.EvaluationCriteriaList.length>0? scope.row.EvaluationCriteriaList.join(', '):'' }}
+
+
+
+
+
+
+
+
+ {{ GCP }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/index.vue b/src/views/blindResumeInfo/index.vue
new file mode 100644
index 0000000..2d9d19a
--- /dev/null
+++ b/src/views/blindResumeInfo/index.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/src/views/blindResumeInfo/info.vue b/src/views/blindResumeInfo/info.vue
new file mode 100644
index 0000000..f07607b
--- /dev/null
+++ b/src/views/blindResumeInfo/info.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
{{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dashboard/bigdata.vue b/src/views/dashboard/bigdata.vue
new file mode 100644
index 0000000..f4cb4bd
--- /dev/null
+++ b/src/views/dashboard/bigdata.vue
@@ -0,0 +1,282 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dashboard/components/distribution-map.vue b/src/views/dashboard/components/distribution-map.vue
new file mode 100644
index 0000000..ed1a44f
--- /dev/null
+++ b/src/views/dashboard/components/distribution-map.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
diff --git a/src/views/dashboard/components/enrollments-of-reviewers.vue b/src/views/dashboard/components/enrollments-of-reviewers.vue
new file mode 100644
index 0000000..d7a5560
--- /dev/null
+++ b/src/views/dashboard/components/enrollments-of-reviewers.vue
@@ -0,0 +1,167 @@
+
+
+
+
diff --git a/src/views/dashboard/components/enrollments-per-quarter.vue b/src/views/dashboard/components/enrollments-per-quarter.vue
new file mode 100644
index 0000000..a360307
--- /dev/null
+++ b/src/views/dashboard/components/enrollments-per-quarter.vue
@@ -0,0 +1,208 @@
+
+
+
+
diff --git a/src/views/dashboard/components/latest-reads.vue b/src/views/dashboard/components/latest-reads.vue
new file mode 100644
index 0000000..34f8fb7
--- /dev/null
+++ b/src/views/dashboard/components/latest-reads.vue
@@ -0,0 +1,199 @@
+
+
+
Latest 10 Reads
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dashboard/components/reviewers-stats.vue b/src/views/dashboard/components/reviewers-stats.vue
new file mode 100644
index 0000000..c22f4bc
--- /dev/null
+++ b/src/views/dashboard/components/reviewers-stats.vue
@@ -0,0 +1,140 @@
+
+
+
+
diff --git a/src/views/dashboard/components/workload-of-months.vue b/src/views/dashboard/components/workload-of-months.vue
new file mode 100644
index 0000000..ba694c5
--- /dev/null
+++ b/src/views/dashboard/components/workload-of-months.vue
@@ -0,0 +1,267 @@
+
+
+
+
diff --git a/src/views/dashboard/components/workload-of-reviewers.vue b/src/views/dashboard/components/workload-of-reviewers.vue
new file mode 100644
index 0000000..9742d6d
--- /dev/null
+++ b/src/views/dashboard/components/workload-of-reviewers.vue
@@ -0,0 +1,266 @@
+
+
+
+
+
diff --git a/src/views/dashboard/components/workload-stats.vue b/src/views/dashboard/components/workload-stats.vue
new file mode 100644
index 0000000..7a16c25
--- /dev/null
+++ b/src/views/dashboard/components/workload-stats.vue
@@ -0,0 +1,152 @@
+
+
+
+
diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue
new file mode 100644
index 0000000..9268863
--- /dev/null
+++ b/src/views/dashboard/index.vue
@@ -0,0 +1,252 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dicom-show/dicom-preview.vue b/src/views/dicom-show/dicom-preview.vue
new file mode 100644
index 0000000..b3242fe
--- /dev/null
+++ b/src/views/dicom-show/dicom-preview.vue
@@ -0,0 +1,308 @@
+
+
+
+
+
+
+
+
+
+ {{ studyTitle }}
+
+
+ {{ seriesCount }} Series
+
+
+
+
+
+
+
+
#{{ item.seriesTitle }}
+
{{ item.instanceCount }} image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dicom-show/dicom-series.vue b/src/views/dicom-show/dicom-series.vue
new file mode 100644
index 0000000..64c1019
--- /dev/null
+++ b/src/views/dicom-show/dicom-series.vue
@@ -0,0 +1,422 @@
+
+
+
+
+
+
+
+
+
+ {{ studyCode }}
+
+
+ {{ description }}
+
+
+ {{ modality }} : {{ seriesCount }} Series
+
+
+
+
+
+
+
+ #{{ item.seriesNumber }}
+
+
+ {{ item.modality }}: {{ item.instanceCount }} image
+
+
+ T: {{ item.sliceThickness }}
+
+
+ {{ item.description }}
+
+
+ {{ item.prefetchInstanceCount }}/{{ item.instanceCount }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dicom-show/dicom-study.vue b/src/views/dicom-show/dicom-study.vue
new file mode 100644
index 0000000..81ca2ab
--- /dev/null
+++ b/src/views/dicom-show/dicom-study.vue
@@ -0,0 +1,729 @@
+/* eslint-disable vue/this-in-template */
+
+
+
+
+
+
+
+
+
+
+ {{ studyCode }}
+
+
+ {{ description }}
+
+
+ {{ modality }} : {{ seriesCount }} Series
+
+
+
+
+
+
+
![]()
+
+
+ Key Images
+
+
+ #{{ item.seriesNumber }}
+
+
+ {{ item.modality }}: {{ item.instanceCount }} image
+
+
+ T: {{ item.sliceThickness }}
+
+
+ {{ item.description }}
+
+
+ {{ item.prefetchInstanceCount }}/{{ item.instanceCount }}
+
+
+
+
+
+
+ {{ $t('trials:audit:table:isReading') }}
+
+
+ {{ $t('trials:audit:table:isDelete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dicom-show/dicom-visit.vue b/src/views/dicom-show/dicom-visit.vue
new file mode 100644
index 0000000..eb883b5
--- /dev/null
+++ b/src/views/dicom-show/dicom-visit.vue
@@ -0,0 +1,761 @@
+
+
+
+
+
+
+
+
+
+ {{ visitInfo }}
+
+
+
+
+
+ {{ study.StudyCode }}
+
+
+ {{ study.Description }}
+
+
+ {{ study.Modalities }} : {{ study.SeriesCount }} Series
+
+
+
+
+
+
![]()
+
+
+ #{{ series.seriesNumber }}
+
+
+ {{ series.modality }}: {{ series.instanceCount }} image
+
+
+ T: {{ series.sliceThickness }}
+
+
+ {{ series.description }}
+
+
+ {{ series.prefetchInstanceCount }}/{{ series.instanceCount }}
+
+
+
+
+
+
+ {{ $t('trials:audit:table:isReading') }}
+
+
+ {{ $t('trials:audit:table:isDelete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ study.VisitName }}
+
: {{ study.StudyCode }}
+
+
+ {{ study.Modalities }} : {{ study.SeriesCount }} Series
+
+
+ {{ study.Description }}
+
+
+
+
+
+
+
+
![]()
+
+
+
+ Key Images
+
+
+ #{{ seriesItem.seriesNumber }}
+
+
+ {{ seriesItem.modality }}: {{ seriesItem.instanceCount }} image
+
+
+ T: {{ seriesItem.sliceThickness }}
+
+
+ {{ seriesItem.description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dicom-show/server-dicom-temporary.vue b/src/views/dicom-show/server-dicom-temporary.vue
new file mode 100644
index 0000000..3422185
--- /dev/null
+++ b/src/views/dicom-show/server-dicom-temporary.vue
@@ -0,0 +1,465 @@
+/* eslint-disable vue/this-in-template */
+
+
+
+
+
+
+
+
+
+
+ {{ studyCode }}
+
+
+ {{ description }}
+
+
+ {{ modality }} : {{ seriesCount }} Series
+
+
+
+
+
+
+
+ Key Images
+
+
+ #{{ item.seriesNumber }}
+
+
+ {{ item.modality }}: {{ item.instanceCount }} image
+
+
+ T: {{ item.sliceThickness }}
+
+
+ {{ item.description }}
+
+
+ {{ item.prefetchInstanceCount }}/{{ item.instanceCount }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/CommonTemplate/TemplateForm.vue b/src/views/dictionary/attachment/components/CommonTemplate/TemplateForm.vue
new file mode 100644
index 0000000..8d2dc3b
--- /dev/null
+++ b/src/views/dictionary/attachment/components/CommonTemplate/TemplateForm.vue
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select
+
+ (must be in xlsx/xls/doc/docx format)
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/CommonTemplate/index.vue b/src/views/dictionary/attachment/components/CommonTemplate/index.vue
new file mode 100644
index 0000000..a7ff714
--- /dev/null
+++ b/src/views/dictionary/attachment/components/CommonTemplate/index.vue
@@ -0,0 +1,233 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Common_File_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+
+ 下载
+
+
+
+ 编辑
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/EmailTemplate/TemplateForm.vue b/src/views/dictionary/attachment/components/EmailTemplate/TemplateForm.vue
new file mode 100644
index 0000000..1c99050
--- /dev/null
+++ b/src/views/dictionary/attachment/components/EmailTemplate/TemplateForm.vue
@@ -0,0 +1,288 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select
+
+
+ (must be in xlsx/xls/doc/docx format)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/EmailTemplate/index.vue b/src/views/dictionary/attachment/components/EmailTemplate/index.vue
new file mode 100644
index 0000000..6fd797f
--- /dev/null
+++ b/src/views/dictionary/attachment/components/EmailTemplate/index.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Common_File_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+
+
+
+ {{ $fd('CriterionType',scope.row.CriterionTypeEnum) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+ 下载
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/ExportTemplate/TemplateForm.vue b/src/views/dictionary/attachment/components/ExportTemplate/TemplateForm.vue
new file mode 100644
index 0000000..5cf8ec3
--- /dev/null
+++ b/src/views/dictionary/attachment/components/ExportTemplate/TemplateForm.vue
@@ -0,0 +1,273 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select
+
+ (must be in xlsx/xls/doc/docx format)
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/ExportTemplate/index.vue b/src/views/dictionary/attachment/components/ExportTemplate/index.vue
new file mode 100644
index 0000000..a04a427
--- /dev/null
+++ b/src/views/dictionary/attachment/components/ExportTemplate/index.vue
@@ -0,0 +1,247 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Common_File_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+
+ 下载
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/SignatureTemplate/TemplateForm.vue b/src/views/dictionary/attachment/components/SignatureTemplate/TemplateForm.vue
new file mode 100644
index 0000000..b64df2b
--- /dev/null
+++ b/src/views/dictionary/attachment/components/SignatureTemplate/TemplateForm.vue
@@ -0,0 +1,281 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Select
+
+ (must be in pdf format)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/SignatureTemplate/index.vue b/src/views/dictionary/attachment/components/SignatureTemplate/index.vue
new file mode 100644
index 0000000..f0f5456
--- /dev/null
+++ b/src/views/dictionary/attachment/components/SignatureTemplate/index.vue
@@ -0,0 +1,313 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.NeedConfirmedUserTypes?scope.row.NeedConfirmedUserTypes.join(', '):'' }}
+
+
+
+
+ {{ scope.row.IsDeleted?'Yes':'No' }}
+
+
+
+
+
+
+
+ 预览
+
+
+ 编辑
+
+
+ 废除
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/UploadTemplate/TemplateForm.vue b/src/views/dictionary/attachment/components/UploadTemplate/TemplateForm.vue
new file mode 100644
index 0000000..328311e
--- /dev/null
+++ b/src/views/dictionary/attachment/components/UploadTemplate/TemplateForm.vue
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select
+
+ (must be in xlsx/xls/doc/docx format)
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/components/UploadTemplate/index.vue b/src/views/dictionary/attachment/components/UploadTemplate/index.vue
new file mode 100644
index 0000000..f14580b
--- /dev/null
+++ b/src/views/dictionary/attachment/components/UploadTemplate/index.vue
@@ -0,0 +1,243 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Common_File_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+ 下载
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/attachment/index.vue b/src/views/dictionary/attachment/index.vue
new file mode 100644
index 0000000..c667b8c
--- /dev/null
+++ b/src/views/dictionary/attachment/index.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/checkConfig/index.vue b/src/views/dictionary/checkConfig/index.vue
new file mode 100644
index 0000000..0564e03
--- /dev/null
+++ b/src/views/dictionary/checkConfig/index.vue
@@ -0,0 +1,1182 @@
+
+
+
+
+
+
diff --git a/src/views/dictionary/checkConfig/oldIndex.vue b/src/views/dictionary/checkConfig/oldIndex.vue
new file mode 100644
index 0000000..43ffe8e
--- /dev/null
+++ b/src/views/dictionary/checkConfig/oldIndex.vue
@@ -0,0 +1,411 @@
+
+
+
+
+
+
diff --git a/src/views/dictionary/dictionary/components/DictionaryForm.vue b/src/views/dictionary/dictionary/components/DictionaryForm.vue
new file mode 100644
index 0000000..bc35f0d
--- /dev/null
+++ b/src/views/dictionary/dictionary/components/DictionaryForm.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/dictionary/dictionary.js b/src/views/dictionary/dictionary/dictionary.js
new file mode 100644
index 0000000..bc13706
--- /dev/null
+++ b/src/views/dictionary/dictionary/dictionary.js
@@ -0,0 +1,91 @@
+export const dictionary_col1 = [
+ { type: 'index' },
+ {
+ prop: 'KeyName',
+ label: 'Key',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Value',
+ label: 'Value',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'ValueCN',
+ label: 'Value CN',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'ShowOrder',
+ label: 'Show Order',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Description',
+ label: 'Description',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ { type: 'operate',
+ label: 'Action',
+ minWidth: 150,
+ operates: [
+ { name: 'Edit', type: 'primary', emitKey: 'edit' },
+ { name: 'Delete', type: 'danger', emitKey: 'delete' }
+ ] }
+]
+export const dictionary_col2 = [
+ { type: 'index' },
+ {
+ prop: 'KeyName',
+ label: 'Key',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Value',
+ label: 'Value',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'ShowOrder',
+ label: 'Show Order',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Description',
+ label: 'Description',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ { type: 'operate',
+ label: 'Action',
+ minWidth: 150,
+ operates: [
+ { name: 'Edit', type: 'primary', emitKey: 'edit' },
+ { name: 'Delete', type: 'danger', emitKey: 'delete' }
+ ] }
+]
+export const dictionary_form = []
+export const dictionary_handle = []
+export const dictionary_model = {
+ visible: false,
+ title: '',
+ width: '600px',
+ showClose: true
+}
diff --git a/src/views/dictionary/dictionary/index.vue b/src/views/dictionary/dictionary/index.vue
new file mode 100644
index 0000000..a09eeb2
--- /dev/null
+++ b/src/views/dictionary/dictionary/index.vue
@@ -0,0 +1,184 @@
+
+
+
+
+
diff --git a/src/views/dictionary/email/components/EmailForm.vue b/src/views/dictionary/email/components/EmailForm.vue
new file mode 100644
index 0000000..5459236
--- /dev/null
+++ b/src/views/dictionary/email/components/EmailForm.vue
@@ -0,0 +1,212 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+ 是
+ 否
+
+
+
+
+ 是
+ 否
+
+
+
+
+ 是
+ 否
+
+
+
+
+ 点击上传
+
+
+
+
+ 点击上传
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/email/index.vue b/src/views/dictionary/email/index.vue
new file mode 100644
index 0000000..fc4396f
--- /dev/null
+++ b/src/views/dictionary/email/index.vue
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+ 场景配置
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.IsReturnRequired?'是':'否' }}
+
+
+
+
+ {{ scope.row.IsUrgent?'是':'否' }}
+
+
+
+
+ {{ scope.row.IsAutoSend?'是':'否' }}
+
+
+
+
+ {{ scope.row.IsEnable?'是':'否' }}
+
+
+
+
+
+
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/components/CROs.vue b/src/views/dictionary/institutions/components/CROs.vue
new file mode 100644
index 0000000..711d1f7
--- /dev/null
+++ b/src/views/dictionary/institutions/components/CROs.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+ Search
+ Reset
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/components/CroForm.vue b/src/views/dictionary/institutions/components/CroForm.vue
new file mode 100644
index 0000000..63552c0
--- /dev/null
+++ b/src/views/dictionary/institutions/components/CroForm.vue
@@ -0,0 +1,86 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/components/HospitalForm.vue b/src/views/dictionary/institutions/components/HospitalForm.vue
new file mode 100644
index 0000000..9c5897c
--- /dev/null
+++ b/src/views/dictionary/institutions/components/HospitalForm.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/components/Hospitals.vue b/src/views/dictionary/institutions/components/Hospitals.vue
new file mode 100644
index 0000000..180b327
--- /dev/null
+++ b/src/views/dictionary/institutions/components/Hospitals.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Search
+ Reset
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/components/SiteForm.vue b/src/views/dictionary/institutions/components/SiteForm.vue
new file mode 100644
index 0000000..1e05b53
--- /dev/null
+++ b/src/views/dictionary/institutions/components/SiteForm.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/components/Sites.vue b/src/views/dictionary/institutions/components/Sites.vue
new file mode 100644
index 0000000..6c9c520
--- /dev/null
+++ b/src/views/dictionary/institutions/components/Sites.vue
@@ -0,0 +1,277 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Search
+ Reset
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/components/SponsorForm.vue b/src/views/dictionary/institutions/components/SponsorForm.vue
new file mode 100644
index 0000000..d7d55c5
--- /dev/null
+++ b/src/views/dictionary/institutions/components/SponsorForm.vue
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/components/Sponsors.vue b/src/views/dictionary/institutions/components/Sponsors.vue
new file mode 100644
index 0000000..db31ad9
--- /dev/null
+++ b/src/views/dictionary/institutions/components/Sponsors.vue
@@ -0,0 +1,194 @@
+
+
+
+
+
+
+
+
+ Search
+ Reset
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/index.vue b/src/views/dictionary/institutions/index.vue
new file mode 100644
index 0000000..621d1a1
--- /dev/null
+++ b/src/views/dictionary/institutions/index.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/institutions/rindex.vue b/src/views/dictionary/institutions/rindex.vue
new file mode 100644
index 0000000..53ecc6d
--- /dev/null
+++ b/src/views/dictionary/institutions/rindex.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/bool/index.vue b/src/views/dictionary/newdictionary/bool/index.vue
new file mode 100644
index 0000000..31a6fd7
--- /dev/null
+++ b/src/views/dictionary/newdictionary/bool/index.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ 新建
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ 编辑
+
+
+ 子项
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/components/DictionaryChild.vue b/src/views/dictionary/newdictionary/components/DictionaryChild.vue
new file mode 100644
index 0000000..93b3913
--- /dev/null
+++ b/src/views/dictionary/newdictionary/components/DictionaryChild.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+ 新建
+
+
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/components/DictionaryChildAddOrUpdateForm.vue b/src/views/dictionary/newdictionary/components/DictionaryChildAddOrUpdateForm.vue
new file mode 100644
index 0000000..24b0aee
--- /dev/null
+++ b/src/views/dictionary/newdictionary/components/DictionaryChildAddOrUpdateForm.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/components/DictionaryTypeConfigForm.vue b/src/views/dictionary/newdictionary/components/DictionaryTypeConfigForm.vue
new file mode 100644
index 0000000..2894fc9
--- /dev/null
+++ b/src/views/dictionary/newdictionary/components/DictionaryTypeConfigForm.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/config/index.vue b/src/views/dictionary/newdictionary/config/index.vue
new file mode 100644
index 0000000..0355d9c
--- /dev/null
+++ b/src/views/dictionary/newdictionary/config/index.vue
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ 配置字典分组
+ 新建
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ 编辑
+
+
+ 子项
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/enum/index.vue b/src/views/dictionary/newdictionary/enum/index.vue
new file mode 100644
index 0000000..fc0f0a3
--- /dev/null
+++ b/src/views/dictionary/newdictionary/enum/index.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ 新建
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ 编辑
+
+
+ 子项
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/index.vue b/src/views/dictionary/newdictionary/index.vue
new file mode 100644
index 0000000..3648748
--- /dev/null
+++ b/src/views/dictionary/newdictionary/index.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/list/components/BatchAddForm.vue b/src/views/dictionary/newdictionary/list/components/BatchAddForm.vue
new file mode 100644
index 0000000..0b663f7
--- /dev/null
+++ b/src/views/dictionary/newdictionary/list/components/BatchAddForm.vue
@@ -0,0 +1,294 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+ {{ $t('common:button:delete') }}
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/list/components/DictionaryChild.vue b/src/views/dictionary/newdictionary/list/components/DictionaryChild.vue
new file mode 100644
index 0000000..68e4be0
--- /dev/null
+++ b/src/views/dictionary/newdictionary/list/components/DictionaryChild.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+ 新建
+
+
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/list/components/DictionaryChildAddOrUpdateForm.vue b/src/views/dictionary/newdictionary/list/components/DictionaryChildAddOrUpdateForm.vue
new file mode 100644
index 0000000..22dc8db
--- /dev/null
+++ b/src/views/dictionary/newdictionary/list/components/DictionaryChildAddOrUpdateForm.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/list/components/DictionaryTypeConfigForm.vue b/src/views/dictionary/newdictionary/list/components/DictionaryTypeConfigForm.vue
new file mode 100644
index 0000000..09a9e42
--- /dev/null
+++ b/src/views/dictionary/newdictionary/list/components/DictionaryTypeConfigForm.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/list/index.vue b/src/views/dictionary/newdictionary/list/index.vue
new file mode 100644
index 0000000..1d99476
--- /dev/null
+++ b/src/views/dictionary/newdictionary/list/index.vue
@@ -0,0 +1,253 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ 新建
+ 批量新建
+
+
+
+
+
+
+
+ {{ DataTypeEnumList[scope.row.DataTypeEnum] }}
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ 编辑
+
+
+ 子项
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/select/index.vue b/src/views/dictionary/newdictionary/select/index.vue
new file mode 100644
index 0000000..3ab7d35
--- /dev/null
+++ b/src/views/dictionary/newdictionary/select/index.vue
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ 配置字典分组
+ 新建
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ 编辑
+
+
+ 子项
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/setting/DictionaryTypeConfigForm.vue b/src/views/dictionary/newdictionary/setting/DictionaryTypeConfigForm.vue
new file mode 100644
index 0000000..f161f92
--- /dev/null
+++ b/src/views/dictionary/newdictionary/setting/DictionaryTypeConfigForm.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/newdictionary/setting/index.vue b/src/views/dictionary/newdictionary/setting/index.vue
new file mode 100644
index 0000000..b50f580
--- /dev/null
+++ b/src/views/dictionary/newdictionary/setting/index.vue
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ New
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/sign/components/SceneConfigForm.vue b/src/views/dictionary/sign/components/SceneConfigForm.vue
new file mode 100644
index 0000000..7d4ca13
--- /dev/null
+++ b/src/views/dictionary/sign/components/SceneConfigForm.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/sign/components/SceneList.vue b/src/views/dictionary/sign/components/SceneList.vue
new file mode 100644
index 0000000..4a68db9
--- /dev/null
+++ b/src/views/dictionary/sign/components/SceneList.vue
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+ Add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Edit
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/sign/components/SignTemplateForm.vue b/src/views/dictionary/sign/components/SignTemplateForm.vue
new file mode 100644
index 0000000..d8869a5
--- /dev/null
+++ b/src/views/dictionary/sign/components/SignTemplateForm.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/sign/index.vue b/src/views/dictionary/sign/index.vue
new file mode 100644
index 0000000..f1340a6
--- /dev/null
+++ b/src/views/dictionary/sign/index.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+ 场景配置
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/AddCriterion.vue b/src/views/dictionary/template/components/AddCriterion.vue
new file mode 100644
index 0000000..06e1ec7
--- /dev/null
+++ b/src/views/dictionary/template/components/AddCriterion.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/AddDICOMConfig.vue b/src/views/dictionary/template/components/AddDICOMConfig.vue
new file mode 100644
index 0000000..f4d63eb
--- /dev/null
+++ b/src/views/dictionary/template/components/AddDICOMConfig.vue
@@ -0,0 +1,125 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/template/components/Anonymization.vue b/src/views/dictionary/template/components/Anonymization.vue
new file mode 100644
index 0000000..d976aca
--- /dev/null
+++ b/src/views/dictionary/template/components/Anonymization.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/ClinicalDataConfig.vue b/src/views/dictionary/template/components/ClinicalDataConfig.vue
new file mode 100644
index 0000000..6a57e13
--- /dev/null
+++ b/src/views/dictionary/template/components/ClinicalDataConfig.vue
@@ -0,0 +1,279 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+ 查询
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+ {{ $fd('ClinicalDataUploadRole',scope.row.UploadRole) }}
+
+
+
+
+ {{ $fd('ClinicalLevel',scope.row.ClinicalDataLevel) }}
+
+
+
+
+
+ {{ $fd('ClinicalUploadType',scope.row.ClinicalUploadType) }}
+
+
+
+
+ {{ scope.row.CriterionEnumList.map(v => $fd('CriterionType', v)).toString() }}
+
+
+
+
+ {{ scope.row.FileName }}
+
+
+
+
+ 启用
+ 禁用
+
+
+
+
+
+
+
+ 问题配置
+
+
+ 下载
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/ClinicalDataForm.vue b/src/views/dictionary/template/components/ClinicalDataForm.vue
new file mode 100644
index 0000000..00c7a83
--- /dev/null
+++ b/src/views/dictionary/template/components/ClinicalDataForm.vue
@@ -0,0 +1,312 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 选择
+
+ (必须是doc/docx格式)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/ClinicalQuestionConfig.vue b/src/views/dictionary/template/components/ClinicalQuestionConfig.vue
new file mode 100644
index 0000000..0049f63
--- /dev/null
+++ b/src/views/dictionary/template/components/ClinicalQuestionConfig.vue
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+
+ {{ $fd('ClinicalQuestionType',scope.row.ClinicalQuestionType) }}
+
+
+
+
+
+
+ {{ $fd('ShowQuestion',scope.row.ClinicalQuestionShowEnum) }}
+
+
+
+
+ {{ $fd('QuestionRequired',scope.row.IsRequired) }}
+
+
+
+
+
+ 编辑
+
+
+ 查看
+
+
+ 表格问题
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/ClinicalQuestionForm.vue b/src/views/dictionary/template/components/ClinicalQuestionForm.vue
new file mode 100644
index 0000000..1139e53
--- /dev/null
+++ b/src/views/dictionary/template/components/ClinicalQuestionForm.vue
@@ -0,0 +1,519 @@
+
+
+
+
+ {typeChange(val, form)})">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {isShowQuestionChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/ClinicalQuestionTableForm.vue b/src/views/dictionary/template/components/ClinicalQuestionTableForm.vue
new file mode 100644
index 0000000..304ab6d
--- /dev/null
+++ b/src/views/dictionary/template/components/ClinicalQuestionTableForm.vue
@@ -0,0 +1,472 @@
+
+
+
+
+ {qsTypeChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+ {qsTypeChange(val, form)})"
+ >
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {relevanceQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/ClinicalQuestionTableQsList.vue b/src/views/dictionary/template/components/ClinicalQuestionTableQsList.vue
new file mode 100644
index 0000000..8482ce0
--- /dev/null
+++ b/src/views/dictionary/template/components/ClinicalQuestionTableQsList.vue
@@ -0,0 +1,220 @@
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ClinicalTableQuestionType',scope.row.ClinicalTableQuestionType) }}
+
+
+
+
+
+ {{ $fd('QuestionRequired',scope.row.IsRequired) }}
+
+
+
+
+
+ 查看
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/CriterionDictionary.vue b/src/views/dictionary/template/components/CriterionDictionary.vue
new file mode 100644
index 0000000..5b3e07f
--- /dev/null
+++ b/src/views/dictionary/template/components/CriterionDictionary.vue
@@ -0,0 +1,266 @@
+
+
+
+
+
+
+ {{scope.$index + 1}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 配置
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+ {{ scope.$index + 1}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/CriterionDictionaryConfig.vue b/src/views/dictionary/template/components/CriterionDictionaryConfig.vue
new file mode 100644
index 0000000..e1ac28b
--- /dev/null
+++ b/src/views/dictionary/template/components/CriterionDictionaryConfig.vue
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+ {{scope.$index + 1}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {crterionDictionaryGroupChange(v, scope.row)}" size="mini">
+ {{item.label}}
+
+
+
+
+
+
+
+
+
+ 保存
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/CriterionFormItem.vue b/src/views/dictionary/template/components/CriterionFormItem.vue
new file mode 100644
index 0000000..2fab9c3
--- /dev/null
+++ b/src/views/dictionary/template/components/CriterionFormItem.vue
@@ -0,0 +1,406 @@
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/CriterionQuestionForm.vue b/src/views/dictionary/template/components/CriterionQuestionForm.vue
new file mode 100644
index 0000000..3f99de4
--- /dev/null
+++ b/src/views/dictionary/template/components/CriterionQuestionForm.vue
@@ -0,0 +1,794 @@
+
+
+
+
+ {typeChange(val, form)})">
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {questionGenreChange(val, form)})"
+ >
+
+ 无
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {form.DefaultValue = null}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {isShowQuestionChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+ {isJudgeQuestionChange(val, form)})">
+ {{ item.label }}
+
+
+
+ {isRequiredChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+ {relevanceQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/CriterionsBaseData.vue b/src/views/dictionary/template/components/CriterionsBaseData.vue
new file mode 100644
index 0000000..817f745
--- /dev/null
+++ b/src/views/dictionary/template/components/CriterionsBaseData.vue
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/CriterionsConfig.vue b/src/views/dictionary/template/components/CriterionsConfig.vue
new file mode 100644
index 0000000..b2b50bd
--- /dev/null
+++ b/src/views/dictionary/template/components/CriterionsConfig.vue
@@ -0,0 +1,380 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Criterion_Question_Type',scope.row.Type) }}
+
+
+
+
+ {{ $fd('QuestionRequired',scope.row.IsRequired) }}
+
+
+
+
+ {{ $fd('ShowQuestion',scope.row.ShowQuestion) }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsJudgeQuestion) }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsShowInDicom) }}
+
+
+
+
+
+
+
+ {{ $fd('GlobalReadingShowType', scope.row.GlobalReadingShowType) }}
+
+
+
+
+
+ {{ $fd('LimitEdit', scope.row.LimitEdit) }}
+
+
+
+
+
+ 编辑
+
+
+ 查看
+
+
+ 表格问题
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/CriterionsTmp.vue b/src/views/dictionary/template/components/CriterionsTmp.vue
new file mode 100644
index 0000000..4143101
--- /dev/null
+++ b/src/views/dictionary/template/components/CriterionsTmp.vue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+ 重置
+ 查询
+
+
+
+ 添加
+
+
+
+
+
+
+
+
+
+ {{ $fd('CriterionType',scope.row.CriterionType) }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsCompleteConfig) }}
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+ 编辑
+
+
+ eCRF
+
+
+ 基础数据
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/DictionaryTypeConfig.vue b/src/views/dictionary/template/components/DictionaryTypeConfig.vue
new file mode 100644
index 0000000..3bf49d6
--- /dev/null
+++ b/src/views/dictionary/template/components/DictionaryTypeConfig.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/DictionaryTypeConfigForm.vue b/src/views/dictionary/template/components/DictionaryTypeConfigForm.vue
new file mode 100644
index 0000000..459b33b
--- /dev/null
+++ b/src/views/dictionary/template/components/DictionaryTypeConfigForm.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/template/components/ECRF.vue b/src/views/dictionary/template/components/ECRF.vue
new file mode 100644
index 0000000..13e92fb
--- /dev/null
+++ b/src/views/dictionary/template/components/ECRF.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/EfficacyAssessment.vue b/src/views/dictionary/template/components/EfficacyAssessment.vue
new file mode 100644
index 0000000..b2e290f
--- /dev/null
+++ b/src/views/dictionary/template/components/EfficacyAssessment.vue
@@ -0,0 +1,263 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(item.DictionaryKey ,Number(scope.row[item.ColumnKey])) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/EfficacyAssessmentForm.vue b/src/views/dictionary/template/components/EfficacyAssessmentForm.vue
new file mode 100644
index 0000000..de7737c
--- /dev/null
+++ b/src/views/dictionary/template/components/EfficacyAssessmentForm.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/EvaluationOfGlobalConfig.vue b/src/views/dictionary/template/components/EvaluationOfGlobalConfig.vue
new file mode 100644
index 0000000..91e28fe
--- /dev/null
+++ b/src/views/dictionary/template/components/EvaluationOfGlobalConfig.vue
@@ -0,0 +1,319 @@
+
+
+
+ 阅片规则
+
+ {{ $fd('YesOrNo', IsMustGlobalReading) }}
+
+
+ 配置
+
+
+
+ 阅片问题
+
+ 配置
+
+
+
+
+
+
+ {{scope.$index + 1}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsBaseLineUse) }}
+ {{ $fd('YesOrNo', scope.row.IsBaseLineUse) }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsFollowVisitUse) }}
+ {{ $fd('YesOrNo', scope.row.IsFollowVisitUse) }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $forceUpdate()"
+ >
+
+ {{$fd('YesOrNo', scope.row.IsBaseLineUse)}}
+
+
+
+
+ $forceUpdate()"
+ >
+
+ {{$fd('YesOrNo', scope.row.IsFollowVisitUse)}}
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/EvaluationOfOncologyConfig.vue b/src/views/dictionary/template/components/EvaluationOfOncologyConfig.vue
new file mode 100644
index 0000000..7431c70
--- /dev/null
+++ b/src/views/dictionary/template/components/EvaluationOfOncologyConfig.vue
@@ -0,0 +1,219 @@
+
+
+
+ 阅片规则
+
+ {{ $fd('YesOrNo', IsOncologyReading)}}
+
+
+ 配置
+
+
+
+ 阅片问题
+
+ 配置
+
+
+
+
+
+
+
+ {{scope.$index + 1}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/IncreaseFields.vue b/src/views/dictionary/template/components/IncreaseFields.vue
new file mode 100644
index 0000000..2a52609
--- /dev/null
+++ b/src/views/dictionary/template/components/IncreaseFields.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/LesionTypeForm.vue b/src/views/dictionary/template/components/LesionTypeForm.vue
new file mode 100644
index 0000000..b6aa2d8
--- /dev/null
+++ b/src/views/dictionary/template/components/LesionTypeForm.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/LesionTypeTbl.vue b/src/views/dictionary/template/components/LesionTypeTbl.vue
new file mode 100644
index 0000000..313d085
--- /dev/null
+++ b/src/views/dictionary/template/components/LesionTypeTbl.vue
@@ -0,0 +1,216 @@
+
+
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('LesionType',scope.row.LesionType) }}
+
+
+
+
+ {{ $fd('OrganType',scope.row.OrganType) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/MedicalAudit.vue b/src/views/dictionary/template/components/MedicalAudit.vue
new file mode 100644
index 0000000..96406c9
--- /dev/null
+++ b/src/views/dictionary/template/components/MedicalAudit.vue
@@ -0,0 +1,280 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 重置
+ 查询
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('LanguageType', scope.row.LanguageType) }}
+
+
+
+
+
+ {{ $fd('QcType', scope.row.Type) }}
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+
+ {{$fd('CriterionType', scope.row.CriterionTypeEnum)}}
+
+
+
+
+
+
+ {{$fd('YesOrNo', scope.row.IsGeneral)}}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/MedicalAuditForm.vue b/src/views/dictionary/template/components/MedicalAuditForm.vue
new file mode 100644
index 0000000..7cef95d
--- /dev/null
+++ b/src/views/dictionary/template/components/MedicalAuditForm.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {typeChange(val, form)})">
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', form.IsGeneral) }}
+
+
+
+
+
+
+
+
+ {readingCategoryChange(val, form)})">
+
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+ 启用
+ 停用
+
+
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
diff --git a/src/views/dictionary/template/components/OrganForm.vue b/src/views/dictionary/template/components/OrganForm.vue
new file mode 100644
index 0000000..26dac22
--- /dev/null
+++ b/src/views/dictionary/template/components/OrganForm.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/OrgansTbl.vue b/src/views/dictionary/template/components/OrgansTbl.vue
new file mode 100644
index 0000000..04eed43
--- /dev/null
+++ b/src/views/dictionary/template/components/OrgansTbl.vue
@@ -0,0 +1,489 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+ {{ $t('trials:readingUnit:baseDataCfg:button:set') }}
+
+
+
+ 病灶关联配置
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('OrganType',scope.row.OrganType) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo', scope.row.IsLymphNodes) }}
+
+ {{ $fd('ReadingYesOrNo', scope.row.IsLymphNodes) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsCanEditPosition) }}
+
+ {{ $fd('YesOrNo', scope.row.IsCanEditPosition) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/QSFormItem.vue b/src/views/dictionary/template/components/QSFormItem.vue
new file mode 100644
index 0000000..26320fd
--- /dev/null
+++ b/src/views/dictionary/template/components/QSFormItem.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+ {{ val }}
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/QcQuestionForm.vue b/src/views/dictionary/template/components/QcQuestionForm.vue
new file mode 100644
index 0000000..7d2daa9
--- /dev/null
+++ b/src/views/dictionary/template/components/QcQuestionForm.vue
@@ -0,0 +1,234 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {typeChange(val, form)})">
+
+
+
+
+
+
+
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+ 启用
+ 停用
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/dictionary/template/components/QcQuestionPreview.vue b/src/views/dictionary/template/components/QcQuestionPreview.vue
new file mode 100644
index 0000000..005cb0c
--- /dev/null
+++ b/src/views/dictionary/template/components/QcQuestionPreview.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/QcQuestions.vue b/src/views/dictionary/template/components/QcQuestions.vue
new file mode 100644
index 0000000..11e7a58
--- /dev/null
+++ b/src/views/dictionary/template/components/QcQuestions.vue
@@ -0,0 +1,249 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+ Preview
+
+ New
+
+
+
+
+
+
+
+
+
+ {{ $fd('LanguageType', scope.row.LanguageType) }}
+
+
+
+
+ {{ scope.row.Type=== 'radio'?'单选框':scope.row.Type=== 'select'?'下拉框':scope.row.Type=== 'input'?'文本框':scope.row.Type=== 'textarea'?'多行文本框':'' }}
+
+
+
+
+
+
+
+
+ {{ scope.row.IsRequired?'是':'否' }}
+
+
+
+
+ {{ scope.row.IsEnable?'启用':'停用' }}
+
+
+
+
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/SettingForm.vue b/src/views/dictionary/template/components/SettingForm.vue
new file mode 100644
index 0000000..0d10318
--- /dev/null
+++ b/src/views/dictionary/template/components/SettingForm.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/TableQsForm.vue b/src/views/dictionary/template/components/TableQsForm.vue
new file mode 100644
index 0000000..f1771b1
--- /dev/null
+++ b/src/views/dictionary/template/components/TableQsForm.vue
@@ -0,0 +1,642 @@
+
+
+
+
+ {qsTypeChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+ {tableQuestionTypeChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {isShowQuestionChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+ {isRequiredChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+ {relevanceQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/TableQsList.vue b/src/views/dictionary/template/components/TableQsList.vue
new file mode 100644
index 0000000..565b4b3
--- /dev/null
+++ b/src/views/dictionary/template/components/TableQsList.vue
@@ -0,0 +1,300 @@
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Criterion_Question_Type',scope.row.Type) }}
+
+
+
+
+ {{ $fd('TableQuestionType',scope.row.TableQuestionType) }}
+
+
+
+
+
+
+
+ {{ $fd('OrganColumn',scope.row.DataTableColumn) }}
+
+
+
+
+ {{ $fd('ShowQuestion',scope.row.ShowQuestion) }}
+
+
+
+
+ {{ $fd('QuestionRequired',scope.row.IsRequired) }}
+
+
+
+
+ {{ $fd('YesOrNo',scope.row.IsJudgeQuestion) }}
+
+
+
+
+
+
+
+
+ {{ scope.row.Type === 'upload'?scope.row.ImageCount:'' }}
+
+
+
+
+ {{ scope.row.MaxRowCount?scope.row.MaxRowCount:'' }}
+
+
+
+
+
+
+ 查看
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/components/TemplateForm.vue b/src/views/dictionary/template/components/TemplateForm.vue
new file mode 100644
index 0000000..c584741
--- /dev/null
+++ b/src/views/dictionary/template/components/TemplateForm.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
+
diff --git a/src/views/dictionary/template/email/components/AttachmentForm.vue b/src/views/dictionary/template/email/components/AttachmentForm.vue
new file mode 100644
index 0000000..2dc7e59
--- /dev/null
+++ b/src/views/dictionary/template/email/components/AttachmentForm.vue
@@ -0,0 +1,261 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Select
+
+ (must be in xlsx/xls/doc/docx format)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/email/components/AttachmentList.vue b/src/views/dictionary/template/email/components/AttachmentList.vue
new file mode 100644
index 0000000..490886d
--- /dev/null
+++ b/src/views/dictionary/template/email/components/AttachmentList.vue
@@ -0,0 +1,249 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('Common_File_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+
+
+
+ {{ $fd('CriterionType',scope.row.CriterionTypeEnum) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+ 下载
+
+
+ 编辑
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/email/components/EmailForm.vue b/src/views/dictionary/template/email/components/EmailForm.vue
new file mode 100644
index 0000000..de98c38
--- /dev/null
+++ b/src/views/dictionary/template/email/components/EmailForm.vue
@@ -0,0 +1,364 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {v === 1 ? form.EmailCron = null : null}" clearable class="mr">
+
+
+
+
+
+
+
+ 生成 cron
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+ {form.CriterionTypeEnum = null}">
+ 是
+ 否
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+ 点击上传
+
+
+
+
+
+
+ 点击上传
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/email/components/EmailList.vue b/src/views/dictionary/template/email/components/EmailList.vue
new file mode 100644
index 0000000..6b5bfbf
--- /dev/null
+++ b/src/views/dictionary/template/email/components/EmailList.vue
@@ -0,0 +1,397 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+ 重置
+
+
+
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TrialCriterionName }}
+
+
+
+
+
+
+ {{ $fd('BusinessLevel',scope.row.BusinessLevelEnum) }}
+
+
+
+
+ {{ $fd('BusinessModule',scope.row.BusinessModuleEnum) }}
+
+
+
+
+ {{ $fd('Email_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+
+ {{ scope.row.ToUserTypeList.length > 0?scope.row.ToUserTypeList.map(v => $fd('UserType', v)).join('、'):'' }}
+
+
+
+
+
+ {{ scope.row.CopyUserTypeList.length > 0?scope.row.CopyUserTypeList.map(v => $fd('UserType', v)).join('、'):'' }}
+
+
+
+
+ {{ $fd('EmailUrgent',scope.row.EmailUrgentEnum) }}
+
+
+
+
+
+
+
+ {{ scope.row.FileName }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
+
+ {{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsAutoSend) }}
+
+ {{ $fd('YesOrNo', scope.row.IsAutoSend) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/email/index.vue b/src/views/dictionary/template/email/index.vue
new file mode 100644
index 0000000..1b167f4
--- /dev/null
+++ b/src/views/dictionary/template/email/index.vue
@@ -0,0 +1,123 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/index.vue b/src/views/dictionary/template/index.vue
new file mode 100644
index 0000000..78f1aad
--- /dev/null
+++ b/src/views/dictionary/template/index.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/list.vue b/src/views/dictionary/template/list.vue
new file mode 100644
index 0000000..f5579c8
--- /dev/null
+++ b/src/views/dictionary/template/list.vue
@@ -0,0 +1,188 @@
+
+
+
+
+
+
+
+ New
+ Setting
+
+
+
+
+
+
+
+ Name:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/rindex.vue b/src/views/dictionary/template/rindex.vue
new file mode 100644
index 0000000..e0ecc11
--- /dev/null
+++ b/src/views/dictionary/template/rindex.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/setting.vue b/src/views/dictionary/template/setting.vue
new file mode 100644
index 0000000..437fd98
--- /dev/null
+++ b/src/views/dictionary/template/setting.vue
@@ -0,0 +1,182 @@
+
+
+
+
+
+ New
+
+
+
+
+
+ {{ scope.row.ModalityList && scope.row.ModalityList.length>0?scope.row.ModalityList.join(', '):'' }}
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/sign/components/SceneConfigForm.vue b/src/views/dictionary/template/sign/components/SceneConfigForm.vue
new file mode 100644
index 0000000..7d4ca13
--- /dev/null
+++ b/src/views/dictionary/template/sign/components/SceneConfigForm.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/sign/components/SceneList.vue b/src/views/dictionary/template/sign/components/SceneList.vue
new file mode 100644
index 0000000..4a68db9
--- /dev/null
+++ b/src/views/dictionary/template/sign/components/SceneList.vue
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+ Add
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Edit
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/sign/components/SignTemplateForm.vue b/src/views/dictionary/template/sign/components/SignTemplateForm.vue
new file mode 100644
index 0000000..d8869a5
--- /dev/null
+++ b/src/views/dictionary/template/sign/components/SignTemplateForm.vue
@@ -0,0 +1,91 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/sign/index.vue b/src/views/dictionary/template/sign/index.vue
new file mode 100644
index 0000000..f1340a6
--- /dev/null
+++ b/src/views/dictionary/template/sign/index.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+ 场景配置
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/dictionary/template/template.js b/src/views/dictionary/template/template.js
new file mode 100644
index 0000000..e417d99
--- /dev/null
+++ b/src/views/dictionary/template/template.js
@@ -0,0 +1,102 @@
+/** ** template list config data *****/
+export const template_cols = [
+ { type: 'index' },
+ {
+ prop: 'Name',
+ label: 'Name',
+ minWidth: 110,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Modality',
+ label: 'Modality',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Description',
+ label: 'Description',
+ minWidth: 110,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ { type: 'operate',
+ label: 'Action',
+ minWidth: 150,
+ operates: [
+ { name: 'Items', type: 'primary', emitKey: 'items' },
+ { name: 'Edit', type: 'primary', emitKey: 'edit' },
+ { name: 'Delete', type: 'danger', emitKey: 'delete' }
+ ] }
+]
+export const template_form = [
+ {
+ type: 'Input',
+ label: 'Name:',
+ prop: 'Name',
+ width: '120px',
+ placeholder: ''
+ }
+]
+export const template_handle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' }
+]
+export const template_model = {
+ visible: false,
+ title: '',
+ width: '600px',
+ showClose: true
+}
+
+/** ** template settings config data *****/
+export const setting_cols = [
+ { type: 'index' },
+ {
+ prop: 'Name',
+ label: 'Item',
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'ModalityList',
+ label: 'Modality',
+ hidden: true,
+ slot: 'modalitySlot',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Description',
+ label: 'Description',
+ showOverflowTooltip: true
+ },
+ { type: 'operate',
+ label: 'Action',
+ minWidth: 150,
+ operates: [
+ { name: 'Edit', type: 'primary', emitKey: 'edit' },
+ { name: 'Delete', type: 'danger', emitKey: 'delete' }
+ ] }
+]
+export const setting_form = [
+ {
+ type: 'Select2',
+ label: 'Modality:',
+ prop: 'ModalityId',
+ width: '150px',
+ options: {}, // 下拉选项
+ placeholder: ''
+ }
+]
+export const setting_handle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' }
+]
+export const setting_model = {
+ visible: false,
+ title: '',
+ width: '600px',
+ showClose: true
+}
diff --git a/src/views/email-recompose/index.vue b/src/views/email-recompose/index.vue
new file mode 100644
index 0000000..6de9175
--- /dev/null
+++ b/src/views/email-recompose/index.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+ {{ $t('recompose:title:init') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('recompose:button:cancel') }}
+
+
+
+ {{ $t('recompose:button:save') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/ad/AD.vue b/src/views/enrollmentTrials/Reading/ad/AD.vue
new file mode 100644
index 0000000..95d2798
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/ad/AD.vue
@@ -0,0 +1,226 @@
+
+
+
+
+
+ Subject ID:
+
+
+ Status:
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+
+
+
+
+ {{ scope.row.Expedited==0?'No':scope.row.Expedited==1?'24H':'48H' }}
+
+
+
+
+
+
+
+ {{ handleStatus(scope.row.Status) }}
+
+
+
+
+
+
+
+ Detail
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/ad/adTask.vue b/src/views/enrollmentTrials/Reading/ad/adTask.vue
new file mode 100644
index 0000000..ef85ace
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/ad/adTask.vue
@@ -0,0 +1,517 @@
+
+
+
+
+
+
+
+ Global1
+
+
+
+
+
+
+ {{ scope.row.VisitName + ' ' }}
+ CRF
+ Image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Global2
+
+
+
+
+
+
+ {{ scope.row.VisitName + ' ' }}
+ CRF
+ Image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Global1
+ Global2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/global/Global.vue b/src/views/enrollmentTrials/Reading/global/Global.vue
new file mode 100644
index 0000000..134138c
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/global/Global.vue
@@ -0,0 +1,227 @@
+
+
+
+
+
+ Subject ID:
+
+
+ Status:
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+
+
+
+
+ {{ scope.row.Expedited==0?'No':scope.row.Expedited==1?'24H':'48H' }}
+
+
+
+
+
+
+
+
+ {{ handleStatus(scope.row.Status) }}
+
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/global/globalTask.vue b/src/views/enrollmentTrials/Reading/global/globalTask.vue
new file mode 100644
index 0000000..9e61f0c
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/global/globalTask.vue
@@ -0,0 +1,335 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.VisitName + ' ' }}
+ CRF
+ Image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/index.vue b/src/views/enrollmentTrials/Reading/index.vue
new file mode 100644
index 0000000..a202fa2
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/index.vue
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/routerView.vue b/src/views/enrollmentTrials/Reading/routerView.vue
new file mode 100644
index 0000000..7d4275d
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/routerView.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/tp/TP.vue b/src/views/enrollmentTrials/Reading/tp/TP.vue
new file mode 100644
index 0000000..c3ec28c
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/tp/TP.vue
@@ -0,0 +1,220 @@
+
+
+
+
+ Subject ID:
+
+
+ Status:
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+
+
+
+
+ {{ scope.row.Expedited==0?'No':scope.row.Expedited==1?'24H':'48H' }}
+
+
+
+
+
+
+
+
+ {{ handleStatus(scope.row.Status) }}
+
+
+
+
+
+
+ Read
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/tp/baselineTask.vue b/src/views/enrollmentTrials/Reading/tp/baselineTask.vue
new file mode 100644
index 0000000..e43b4eb
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/tp/baselineTask.vue
@@ -0,0 +1,855 @@
+
+
+
+
+
+
+
+ Qualified
+ Non-Qualified
+
+
+
+
+ Affect
+ Non-Affect
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.TULOC + ' ' + scope.row.TULAT + ' ' + scope.row.TUDIR
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.TULOC + ' ' + scope.row.TULAT + ' ' + scope.row.TUDIR
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.TULOC + ' ' + scope.row.TULAT + ' ' + scope.row.TUDIR
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SOD(mm):
+
+
+ Non-nodular Lesions SOD(mm):
+
+
+
+
+
+
+
+
+ Present
+ Absent
+ NE
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/Reading/tp/visitTask.vue b/src/views/enrollmentTrials/Reading/tp/visitTask.vue
new file mode 100644
index 0000000..8469dee
--- /dev/null
+++ b/src/views/enrollmentTrials/Reading/tp/visitTask.vue
@@ -0,0 +1,2912 @@
+
+
+
+
+
+
+
+ Qualified
+ Non-Qualified
+
+
+
+
+
+
+ Lesions Operate:
+ Merge
+ SplitCount:
+
+ Split
+
+
+
+
+
+
+
+
+
+ {{
+ (scope.row.TULOC || '') +
+ ' ' +
+ (scope.row.TULAT || '') +
+ ' ' +
+ (scope.row.TUDIR || '')
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delete
+
+
+
+
+
+
+
+
+ Lesions Operate:
+ Merge
+ SplitCount:
+
+ Split
+
+
+
+
+
+
+
+
+
+ {{
+ (scope.row.TULOC || '') +
+ ' ' +
+ (scope.row.TULAT || '') +
+ ' ' +
+ (scope.row.TUDIR || '')
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.TULOC +
+ ' ' +
+ scope.row.TULAT +
+ ' ' +
+ scope.row.TUDIR
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.TULOC +
+ ' ' +
+ scope.row.TULAT +
+ ' ' +
+ scope.row.TUDIR
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.TULOC +
+ ' ' +
+ scope.row.TULAT +
+ ' ' +
+ scope.row.TUDIR
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.TULOC +
+ ' ' +
+ scope.row.TULAT +
+ ' ' +
+ scope.row.TUDIR
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Sum of Diameter(SOD)(mm) :{{ SumOfDiameter }}
+
+
+ Non-nodular Lesions SOD(mm) :{{ NonnodularLesionsSOD }}
+
+
+ Baseline SOD :{{ BaselineSOD }}
+
+
+
+ Baseline SOD % change :{{ BaselineSODChange }}
+
+
+
+
+
+ Timepoint of Nadir SOD :{{
+ TimepointOfNadirSOD + '(' + MinVisitInfo.MinSum + ')'
+ }}
+
+
+
+ Nadir SOD increase(mm) :{{ NadirSODIncrease }}
+
+
+ Nadir SOD % increase :{{ NadirSODIncreasePercent }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/enrollmentTrials/index.vue b/src/views/enrollmentTrials/index.vue
new file mode 100644
index 0000000..38c84b8
--- /dev/null
+++ b/src/views/enrollmentTrials/index.vue
@@ -0,0 +1,352 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+
+
+
+
+
+ {{
+ scope.row.Expedited == 0
+ ? 'No'
+ : scope.row.Expedited == 1
+ ? '24H'
+ : '48H'
+ }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ WorkLoad
+ Enroll
+
+
+
+
+
+
+
+ Reject Enroll
+ Confirm Enroll
+
+
+
+
+
+
diff --git a/src/views/error.vue b/src/views/error.vue
new file mode 100644
index 0000000..db3aa91
--- /dev/null
+++ b/src/views/error.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
{{$t('common:title:error')}}!
+
{{ message }}
+
{{ $t('common:title:goHome') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/analysis/components/ReviewerAnalysis.vue b/src/views/financials/analysis/components/ReviewerAnalysis.vue
new file mode 100644
index 0000000..85540d8
--- /dev/null
+++ b/src/views/financials/analysis/components/ReviewerAnalysis.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+ {{ scope.row.PaymentUSD | rounding }}
+
+
+
+
+
+ {{ scope.row.RevenusUSD | rounding }}
+ ({{ scope.row.MissingTrialCodes.join(',') }} need setting trial unit price)
+
+ {{ scope.row.RevenusUSD | rounding }}
+
+
+
+
+ {{ scope.row.GrossProfit | rounding }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/analysis/components/TrialAnanlysis.vue b/src/views/financials/analysis/components/TrialAnanlysis.vue
new file mode 100644
index 0000000..b4c1f06
--- /dev/null
+++ b/src/views/financials/analysis/components/TrialAnanlysis.vue
@@ -0,0 +1,265 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.Expedited==0?'No':scope.row.Expedited==1?'24H':'48H' }}
+
+
+
+
+
+ {{ scope.row.PaymentUSD | rounding }}
+
+
+
+
+
+ Missing Trial unit price
+
+ {{ scope.row.RevenusUSD | rounding }}
+
+
+
+
+ {{ scope.row.GrossProfit | rounding }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/analysis/index.vue b/src/views/financials/analysis/index.vue
new file mode 100644
index 0000000..5a2647b
--- /dev/null
+++ b/src/views/financials/analysis/index.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To
+
+ Reset
+ Search
+ Export Excel
+ Verify
+
+
+
+
+
+
+
+ Month:
+ {{ item.YearMonth }}
+ ({{ item.ReviewerNameList.join(', ') }} not locked)
+
+
+
+
+ Trial ID:
+ {{ item.trialCode }}
+ ({{ item.priceType.join(', ') }} did not set unit price)
+
+
+
+
+
+
diff --git a/src/views/financials/index.vue b/src/views/financials/index.vue
new file mode 100644
index 0000000..2ab3832
--- /dev/null
+++ b/src/views/financials/index.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/adjustment.vue b/src/views/financials/monthlyPayment/adjustment.vue
new file mode 100644
index 0000000..3b0d70b
--- /dev/null
+++ b/src/views/financials/monthlyPayment/adjustment.vue
@@ -0,0 +1,242 @@
+
+
+
+
+
+ Reset
+ Search
+ New
+
+
+
+
+
+ {{ scope.row.LastName + ' / ' + scope.row.FirstName }}
+
+
+
+
+ {{ scope.row.AdjustPaymentUSD | rounding }}
+
+
+
+ {{ scope.row.AdjustPaymentCNY | rounding }}
+
+
+
+
+
+
+ Edit
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/AdjustmentForm.vue b/src/views/financials/monthlyPayment/components/AdjustmentForm.vue
new file mode 100644
index 0000000..8634362
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/AdjustmentForm.vue
@@ -0,0 +1,144 @@
+
+
+
+
+
+ {{ item.info }}
+ {{ item.ChineseName }}
+
+
+
+
+
+
+
+
+ Tips: Exchange Rate: {{ exchangeRate }}
+ Amount(¥): {{ (adjustmentForm.AdjustPaymentUSD*exchangeRate).toFixed(2) }}
+ Exchange rate is not set.
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/ExchangeRate.vue b/src/views/financials/monthlyPayment/components/ExchangeRate.vue
new file mode 100644
index 0000000..0020389
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/ExchangeRate.vue
@@ -0,0 +1,198 @@
+
+
+
+
+ Reset
+ Search
+ New
+
+
+
+
+
+
+
+
+
+
+
+ Edit
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/RankBasedRates.vue b/src/views/financials/monthlyPayment/components/RankBasedRates.vue
new file mode 100644
index 0000000..40450dc
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/RankBasedRates.vue
@@ -0,0 +1,324 @@
+
+
+
+
Rank-Based Rates
+
New
+
+
+
+
+
+
+ {{ scope.row.Training | rounding }}
+
+
+
+
+ {{ scope.row.RefresherTraining | rounding }}
+
+
+
+
+
+ {{ scope.row.Timepoint | rounding }}
+
+
+
+
+
+ {{ scope.row.TimepointIn48H | rounding }}
+
+
+
+
+ {{ scope.row.TimepointIn24H | rounding }}
+
+
+
+
+
+
+ {{ scope.row.Adjudication | rounding }}
+
+
+
+
+
+ {{ scope.row.AdjudicationIn48H | rounding }}
+
+
+
+
+ {{ scope.row.AdjudicationIn24H | rounding }}
+
+
+
+
+
+ {{ scope.row.Global | rounding }}
+
+
+
+
+
+ {{ scope.row.Downtime | rounding }}
+
+
+
+
+
+ Edit
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/RevenusForm.vue b/src/views/financials/monthlyPayment/components/RevenusForm.vue
new file mode 100644
index 0000000..3bf757f
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/RevenusForm.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/ReviewersData.vue b/src/views/financials/monthlyPayment/components/ReviewersData.vue
new file mode 100644
index 0000000..d4c2545
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/ReviewersData.vue
@@ -0,0 +1,313 @@
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+
+ {{ scope.row.LastName + ' / ' + scope.row.FirstName }}
+
+
+
+ {{ scope.row.DoctorNameInBank?scope.row.DoctorNameInBank:scope.row.ChineseName }}
+
+
+
+
+
+
+
+ {{ scope.row.Additional | rounding }}
+
+
+
+
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/TrialsData.vue b/src/views/financials/monthlyPayment/components/TrialsData.vue
new file mode 100644
index 0000000..6185354
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/TrialsData.vue
@@ -0,0 +1,392 @@
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+
+
+
+
+ {{ scope.row.Expedited == 0?'No':scope.row.Expedited == 1?'24-Hour':'48-Hour' }}
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+
+
+ close
+
+
+ {{ scope.row.DoctorsNames }}
+
+
+
+
+
+
+
+ View
+ Delete
+
+
+ Upload
+
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/TrialsDataReviewers.vue b/src/views/financials/monthlyPayment/components/TrialsDataReviewers.vue
new file mode 100644
index 0000000..6ebbb34
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/TrialsDataReviewers.vue
@@ -0,0 +1,173 @@
+
+
+
+
+
+
+ {{ scope.row.LastName + scope.row.FirstName }}
+
+
+
+
+
+
+
+ {{ scope.row.Training | rounding }}
+
+
+
+
+ {{ scope.row.RefresherTraining | rounding }}
+
+
+
+
+
+ {{ scope.row.Timepoint | rounding }}
+
+
+
+
+ {{ scope.row.Timepoint48H | rounding }}
+
+
+
+
+ {{ scope.row.Timepoint24H | rounding }}
+
+
+
+
+
+
+ {{ scope.row.Adjudication | rounding }}
+
+
+
+
+ {{ scope.row.Adjudication48H | rounding }}
+
+
+
+
+ {{ scope.row.Adjudication24H | rounding }}
+
+
+
+
+
+ {{ scope.row.Global | rounding }}
+
+
+
+
+
+ {{ scope.row.Downtime | rounding }}
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/TrialsDataReviewersForm.vue b/src/views/financials/monthlyPayment/components/TrialsDataReviewersForm.vue
new file mode 100644
index 0000000..740c39d
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/TrialsDataReviewersForm.vue
@@ -0,0 +1,205 @@
+
+
+
+
+ {{ form.ReviewerCode }}
+
+
+
+ {{ form.LastName + form.FirstName }}
+
+
+
+ {{ form.ChineseName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/UploadSow.vue b/src/views/financials/monthlyPayment/components/UploadSow.vue
new file mode 100644
index 0000000..f24d6a2
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/UploadSow.vue
@@ -0,0 +1,132 @@
+
+
+
+ Upload
+ (must be in pdf format)
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/components/VolumeReward.vue b/src/views/financials/monthlyPayment/components/VolumeReward.vue
new file mode 100644
index 0000000..0850234
--- /dev/null
+++ b/src/views/financials/monthlyPayment/components/VolumeReward.vue
@@ -0,0 +1,349 @@
+
+
+
+
Volume Reward
+
{{ tipInfo }}
+
Save
+
New
+
+
+
+
+
+
+
+ {{ scope.row.Price | rounding }}
+
+
+
+
+ Edit
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/detail.vue b/src/views/financials/monthlyPayment/detail.vue
new file mode 100644
index 0000000..41de2d2
--- /dev/null
+++ b/src/views/financials/monthlyPayment/detail.vue
@@ -0,0 +1,559 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Export Excel
+ Export PDF
+
+
+
+
+
+
+ {{ scope.row.TrialCode!='Adjustment'? scope.row.PaymentType :scope.row.AdjustmentView.AdjustType }}
+
+
+
+
+ {{ scope.row.TrialCode!='Adjustment'? scope.row.Count : scope.row.AdjustmentView.Note }}
+
+
+
+
+ {{ scope.row.BasePrice | rounding }}
+
+
+
+
+ {{ scope.row.PersonalAdditional | rounding }}
+
+
+
+
+ {{ scope.row.TrialAdditional | rounding }}
+
+
+
+
+ {{ scope.row.TotalUnitPrice | rounding }}
+
+
+
+
+ {{ scope.row.PaymentUSD | rounding }}
+
+
+
+
+ {{ 'Setting Needed' }}
+ {{ scope.row.PaymentCNY }}
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/index.vue b/src/views/financials/monthlyPayment/index.vue
new file mode 100644
index 0000000..c0339e2
--- /dev/null
+++ b/src/views/financials/monthlyPayment/index.vue
@@ -0,0 +1,1267 @@
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+ Lock
+ Calculate
+ Export Summary
+ Export Details
+
+ Export Payrolls
+
+ Adjustment
+ Settings
+
+
+
+
+
+
+ {{ scope.row.LastName + ' / ' + scope.row.FirstName }}
+
+
+ {{ scope.row.DoctorNameInBank?scope.row.DoctorNameInBank:scope.row.ChineseName }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ 'Current month: ' + scope.row.PaymentUSD }}
+
+ {{ 'Adjustment: ' + scope.row.AdjustPaymentUSD }}
+
+
+ {{
+ !scope.row.IDCard || !scope.row.BankCardNumber || !scope.row.RankName
+ ? 'Setting Needed'
+ : scope.row.TotalPaymentUSD.toFixed(2)
+ }}
+
+
+
+
+
+
+
+
+ {{ scope.row.ExchangeRate | rounding }}
+
+
+
+
+
+
+ {{ 'Current month: ' + scope.row.PaymentCNY }}
+
+ {{ 'Adjustment: ' + scope.row.AdjustPaymentCNY }}
+
+
+ {{ scope.row.ExchangeRate > 0 ? scope.row.TotalPaymentCNY : 'Setting Needed' }}
+
+
+
+
+ {{ scope.row.IsLock?'Locked':'Pending' }}
+
+
+
+ Detail
+
+ Setting
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/monthlyPayment/setting.vue b/src/views/financials/monthlyPayment/setting.vue
new file mode 100644
index 0000000..0347fa4
--- /dev/null
+++ b/src/views/financials/monthlyPayment/setting.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/paymentHistory/components/AdjustmentList.vue b/src/views/financials/paymentHistory/components/AdjustmentList.vue
new file mode 100644
index 0000000..7f43603
--- /dev/null
+++ b/src/views/financials/paymentHistory/components/AdjustmentList.vue
@@ -0,0 +1,255 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName + ' / ' + scope.row.FirstName }}
+
+
+
+
+
+ {{ scope.row.AdjustPaymentUSD | rounding }}
+
+
+
+
+ {{ scope.row.AdjustPaymentCNY }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/paymentHistory/components/PaymentList.vue b/src/views/financials/paymentHistory/components/PaymentList.vue
new file mode 100644
index 0000000..d7fa6bf
--- /dev/null
+++ b/src/views/financials/paymentHistory/components/PaymentList.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+ {{ scope.row.TotalUSD | rounding }}
+
+
+
+
+ {{ scope.row.TotalCNY }}
+
+
+
+
+ Detail
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/paymentHistory/detail.vue b/src/views/financials/paymentHistory/detail.vue
new file mode 100644
index 0000000..0bbd18e
--- /dev/null
+++ b/src/views/financials/paymentHistory/detail.vue
@@ -0,0 +1,203 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TrialPaymentList?scope.row.TrialPaymentList.filter(item=>item.TrialCode==val.TrialCode)[0]==null?0:scope.row.TrialPaymentList.filter(item=>item.TrialCode==val.TrialCode)[0].TrialPayment:0 }}
+
+
+
+
+
+ {{ scope.row.VolumeReward | rounding }}
+
+
+
+
+ {{ scope.row.AdjustmentUSD | rounding }}
+
+
+
+
+ {{ scope.row.TotalUSD | rounding }}
+
+
+
+
+
+
+ {{ scope.row.TotalCNY }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/financials/paymentHistory/index.vue b/src/views/financials/paymentHistory/index.vue
new file mode 100644
index 0000000..3d5297e
--- /dev/null
+++ b/src/views/financials/paymentHistory/index.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+ To
+
+ Reset
+ Search
+ Export Excel
+
+
+
+
+
+
diff --git a/src/views/financials/revenues/components/RevenusForm.vue b/src/views/financials/revenues/components/RevenusForm.vue
new file mode 100644
index 0000000..c9b0781
--- /dev/null
+++ b/src/views/financials/revenues/components/RevenusForm.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save
+
+
+
+
diff --git a/src/views/financials/revenues/index.vue b/src/views/financials/revenues/index.vue
new file mode 100644
index 0000000..760da37
--- /dev/null
+++ b/src/views/financials/revenues/index.vue
@@ -0,0 +1,478 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To
+
+ Reset
+ Search
+ Export Excel
+ Verify
+ Settings
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Total | rounding }}
+ (Need setting trial unit price)
+
+
+ {{ scope.row.Total | rounding }}
+ ({{ scope.row.MissingTrialCodes.join(',') }} need setting trial unit price)
+
+ {{ scope.row.Total | rounding }}
+
+
+
+
+
+
+
+
+ Trial ID:
+ {{ item.trialCode }}
+ ({{ item.priceType.join(', ') }} did not set unit price)
+
+
+
+
+ No data.
+
+
+
+
+
+
diff --git a/src/views/financials/revenues/revenues.js b/src/views/financials/revenues/revenues.js
new file mode 100644
index 0000000..997f26a
--- /dev/null
+++ b/src/views/financials/revenues/revenues.js
@@ -0,0 +1,29 @@
+const cols1 = [
+ { label: 'Trial ID', width: '90', prop: 'TrialCode' },
+ { label: 'Expedited', width: '110', prop: 'Expedited' },
+ { label: 'Indication', width: '110', prop: 'Indication' },
+
+ { label: 'CRO', width: '90', prop: 'Cro' },
+ { label: 'Name', width: '90', prop: 'FullName' },
+ { label: 'Name CN', width: '100', prop: 'ChineseName' },
+ { label: 'Reviewer ID', width: '115', prop: 'ReviewerCode' },
+ { label: 'Month', width: '100', prop: 'YearMonth' }
+]
+const cols2 = [
+ { label: 'Trial ID', width: '105', prop: 'TrialCode' },
+ { label: 'Expedited', width: '105', prop: 'Expedited' },
+ { label: 'Indication', width: '105', prop: 'Indication' },
+ { label: 'CRO', width: '105', prop: 'Cro' }
+
+]
+const cols3 = [
+ { label: 'Name', width: '105', prop: 'FullName' },
+ { label: 'Name CN', width: '105', prop: 'ChineseName' },
+ { label: 'Reviewer ID', width: '120', prop: 'ReviewerCode' }
+]
+
+const cols4 = [{ label: 'Month', width: '100', prop: 'YearMonth' }]
+
+export function getColumns(type) {
+ return type === 0 ? cols1 : type === 1 ? cols2 : type === 2 ? cols3 : type === 3 ? cols4 : []
+}
diff --git a/src/views/financials/revenues/setting.vue b/src/views/financials/revenues/setting.vue
new file mode 100644
index 0000000..3bfb02b
--- /dev/null
+++ b/src/views/financials/revenues/setting.vue
@@ -0,0 +1,272 @@
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Expedited === 0? 'No':scope.row.Expedited === 1? '24-Hour':'48-Hour' }}
+
+
+
+
+
+ {{ scope.row.Training | rounding }}
+
+
+
+
+ {{ scope.row.RefresherTraining | rounding }}
+
+
+
+
+
+ {{ scope.row.Timepoint | rounding }}
+
+
+
+
+ {{ scope.row.TimepointIn48H | rounding }}
+
+
+
+
+ {{ scope.row.TimepointIn24H | rounding }}
+
+
+
+
+
+
+ {{ scope.row.Adjudication | rounding }}
+
+
+
+
+ {{ scope.row.AdjudicationIn48H | rounding }}
+
+
+
+
+ {{ scope.row.AdjudicationIn24H | rounding }}
+
+
+
+
+
+ {{ scope.row.Global | rounding }}
+
+
+
+
+
+ {{ scope.row.Downtime | rounding }}
+
+
+
+
+
+ Edit
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/forgetpassword/index.vue b/src/views/forgetpassword/index.vue
new file mode 100644
index 0000000..0f9e888
--- /dev/null
+++ b/src/views/forgetpassword/index.vue
@@ -0,0 +1,274 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ sendTitle }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('passwordReset:button:verify') }}
+
+
+
+
+
+
+
+ {{ item.UserName }}
+ {{ item.UserType }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('passwordReset:button:cancel') }}
+
+
+
+ {{ $t('passwordReset:button:submit') }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/joinVerify/index.vue b/src/views/joinVerify/index.vue
new file mode 100644
index 0000000..ef1bab1
--- /dev/null
+++ b/src/views/joinVerify/index.vue
@@ -0,0 +1,143 @@
+
+
+
+
+ 是否参与的临床试验项目:{{ trialInfo.ExperimentName }}(试验方案号:{{ trialInfo.ResearchProgramNo }}) 的独立影像评估工作。请选择:
+
+
+
+ 是
+ 否
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
new file mode 100644
index 0000000..dcf8655
--- /dev/null
+++ b/src/views/login/index.vue
@@ -0,0 +1,455 @@
+
+
+
+
+
+
+
+
+
{{ $t('login:title:system') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('login:button:login') }}
+
+
+
+
+ {{ $t('login:button:forgetPassword') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/login/topLang.vue b/src/views/login/topLang.vue
new file mode 100644
index 0000000..9a18a56
--- /dev/null
+++ b/src/views/login/topLang.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+ 中文
+
+ English
+
+
+
+
+
+
+
+
diff --git a/src/views/none-dicom-show/components/form.vue b/src/views/none-dicom-show/components/form.vue
new file mode 100644
index 0000000..b0d3a4d
--- /dev/null
+++ b/src/views/none-dicom-show/components/form.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 保存
+ 重置
+
+
+
+
diff --git a/src/views/none-dicom-show/components/image-viewer.vue b/src/views/none-dicom-show/components/image-viewer.vue
new file mode 100644
index 0000000..984d00a
--- /dev/null
+++ b/src/views/none-dicom-show/components/image-viewer.vue
@@ -0,0 +1,456 @@
+/* eslint-disable no-unused-vars */
+
+
+
+
+
+
+ {{ `${index+1} / ${urlList.length}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/none-dicom-show/components/preview.vue b/src/views/none-dicom-show/components/preview.vue
new file mode 100644
index 0000000..5736ad8
--- /dev/null
+++ b/src/views/none-dicom-show/components/preview.vue
@@ -0,0 +1,345 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
![]()
+
+ {{ `${index+1}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/none-dicom-show/index.vue b/src/views/none-dicom-show/index.vue
new file mode 100644
index 0000000..803e337
--- /dev/null
+++ b/src/views/none-dicom-show/index.vue
@@ -0,0 +1,264 @@
+
+
+
+
+ {{ $t('trials:none-dicom-show:fileList') }}
+
+
+
+
+
+ {{ study.CodeView }}
+ {{ study.Modality }}
+ {{ getBodyPart(study.BodyPart) }}
+
+
+
+ 暂无数据
+
+
+
+ {{ `${j+1}. ${item.FileName}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/none-dicom-show/multiple.vue b/src/views/none-dicom-show/multiple.vue
new file mode 100644
index 0000000..f203fb0
--- /dev/null
+++ b/src/views/none-dicom-show/multiple.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+
{{ `${item.CodeView} (Modality: ${item.Modality})` }}
+
+
+ -
+ {{ file.FileName }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:message:downloadFile') }}
+ {{ $t('common:button:download') }}
+
+
+
+
+
+
diff --git a/src/views/none-dicom-show/single.vue b/src/views/none-dicom-show/single.vue
new file mode 100644
index 0000000..e59c70b
--- /dev/null
+++ b/src/views/none-dicom-show/single.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:message:downloadFile') }}
+ {{ $t('common:button:download') }}
+
+
+
+
+
+
+
diff --git a/src/views/recompose/index.vue b/src/views/recompose/index.vue
new file mode 100644
index 0000000..c82c456
--- /dev/null
+++ b/src/views/recompose/index.vue
@@ -0,0 +1,163 @@
+
+
+
+
+
+ {{ $t('recompose:title:init') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('recompose:button:cancel') }}
+
+
+
+ {{ $t('recompose:button:save') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/redirect.vue b/src/views/redirect.vue
new file mode 100644
index 0000000..db4c1d6
--- /dev/null
+++ b/src/views/redirect.vue
@@ -0,0 +1,12 @@
+
diff --git a/src/views/redirect/index.vue b/src/views/redirect/index.vue
new file mode 100644
index 0000000..386e40b
--- /dev/null
+++ b/src/views/redirect/index.vue
@@ -0,0 +1,17 @@
+
diff --git a/src/views/research/components/BaseInfo.vue b/src/views/research/components/BaseInfo.vue
new file mode 100644
index 0000000..686e577
--- /dev/null
+++ b/src/views/research/components/BaseInfo.vue
@@ -0,0 +1,270 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
diff --git a/src/views/research/components/EquipmentForm.vue b/src/views/research/components/EquipmentForm.vue
new file mode 100644
index 0000000..7b802af
--- /dev/null
+++ b/src/views/research/components/EquipmentForm.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/research/components/EquipmentList.vue b/src/views/research/components/EquipmentList.vue
new file mode 100644
index 0000000..ca7b2b0
--- /dev/null
+++ b/src/views/research/components/EquipmentList.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:edit') }}
+
+
+
+ {{ $t('common:button:delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/research/components/HistoricalParticipant.vue b/src/views/research/components/HistoricalParticipant.vue
new file mode 100644
index 0000000..6488b82
--- /dev/null
+++ b/src/views/research/components/HistoricalParticipant.vue
@@ -0,0 +1,208 @@
+
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.LastName} / ${scope.row.FirstName}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsUserExitTrial', scope.row.IsHistoryUserOriginDeleted) }}
+ {{ $fd('IsUserExitTrial', scope.row.IsHistoryUserOriginDeleted) }}
+
+
+
+
+
+ {{ $fd('IsUserExitTrial', scope.row.IsHistoryUserDeleted) }}
+ {{ $fd('IsUserExitTrial', scope.row.IsHistoryUserDeleted) }}
+
+
+
+
+
+
+
+ {{ $t('common:button:edit') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/research/components/HistoricalParticipantForm.vue b/src/views/research/components/HistoricalParticipantForm.vue
new file mode 100644
index 0000000..458b1c7
--- /dev/null
+++ b/src/views/research/components/HistoricalParticipantForm.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.UserType }}
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+ {{ errorMsg }}
+
+
+
+
+
+
+
diff --git a/src/views/research/components/HistoricalRecord.vue b/src/views/research/components/HistoricalRecord.vue
new file mode 100644
index 0000000..07e654f
--- /dev/null
+++ b/src/views/research/components/HistoricalRecord.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+ {{ `${item.UserName}(${$fd('ResearchRecord', item.State)})` }}
+
+
+
+
+
+
+
+
diff --git a/src/views/research/components/ParticipantForm.vue b/src/views/research/components/ParticipantForm.vue
new file mode 100644
index 0000000..a1c3ead
--- /dev/null
+++ b/src/views/research/components/ParticipantForm.vue
@@ -0,0 +1,305 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ errorMsg }}
+
+
+
+
+
+
+
diff --git a/src/views/research/components/ParticipantList.vue b/src/views/research/components/ParticipantList.vue
new file mode 100644
index 0000000..432e35d
--- /dev/null
+++ b/src/views/research/components/ParticipantList.vue
@@ -0,0 +1,233 @@
+
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.LastName} / ${scope.row.FirstName}` }}
+
+
+
+
+
+ {{ $fd('SiteSurvey_UserRoles',scope.row.TrialRoleCode) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsJoin', scope.row.IsJoin) }}
+ {{ $fd('IsJoin', scope.row.IsJoin) }}
+
+
+
+
+
+
+
+
+ {{ $t('common:button:edit') }}
+
+
+
+ {{ $t('common:button:delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/research/components/ResearchForm.vue b/src/views/research/components/ResearchForm.vue
new file mode 100644
index 0000000..a296451
--- /dev/null
+++ b/src/views/research/components/ResearchForm.vue
@@ -0,0 +1,357 @@
+
+
+
+
+
diff --git a/src/views/research/form.vue b/src/views/research/form.vue
new file mode 100644
index 0000000..9b8c19c
--- /dev/null
+++ b/src/views/research/form.vue
@@ -0,0 +1,412 @@
+
+
+
+
+
diff --git a/src/views/research/login.vue b/src/views/research/login.vue
new file mode 100644
index 0000000..d162f3e
--- /dev/null
+++ b/src/views/research/login.vue
@@ -0,0 +1,349 @@
+
+
+
+
+
+ {{ $t('trials:researchForm:title:question') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:researchForm:button:updateQsForm') }}
+
+
+
+ {{ $t('trials:researchForm:button:cancelUpdateQsForm') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ this.$t('trials:researchForm:button:send') }} {{ sendTitle ? `${sendTitle}` : null }}
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+
+ {{ $t('common:button:submit') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/research/topLang.vue b/src/views/research/topLang.vue
new file mode 100644
index 0000000..9a18a56
--- /dev/null
+++ b/src/views/research/topLang.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+ 中文
+
+ English
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/Agreements.vue b/src/views/resumeInfo/components/Agreements.vue
new file mode 100644
index 0000000..dd9e7a1
--- /dev/null
+++ b/src/views/resumeInfo/components/Agreements.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ View
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/BasicInfo.vue b/src/views/resumeInfo/components/BasicInfo.vue
new file mode 100644
index 0000000..e22bcfc
--- /dev/null
+++ b/src/views/resumeInfo/components/BasicInfo.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+ {{ basicInfo.LastName }}
+
+
+
+
+ {{ basicInfo.FirstName }}
+
+
+
+
+ {{ basicInfo.ChineseName }}
+
+
+
+
+ {{ basicInfo.ReviewerCode }}
+
+
+
+
+
+
+
+ {{ basicInfo.Sex === 0?'Male':'Female' }}
+ {{ basicInfo.Sex === 0?'男':'女' }}
+
+
+
+
+
+ {{ (Array.isArray(basicInfo.Title)&& basicInfo.Title.length > 0) ? basicInfo.TitleList.join(', ') : '' }}
+
+
+ {{ (Array.isArray(basicInfo.TitleCNList)&& basicInfo.TitleCNList.length > 0) ? basicInfo.TitleCNList.join(', ') : '' }}
+
+
+
+
+
+ {{ basicInfo.Phone }}
+
+
+
+
+ {{ basicInfo.EMail }}
+
+
+
+
+
+
+
+ {{ basicInfo.WeChat }}
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/Comment.vue b/src/views/resumeInfo/components/Comment.vue
new file mode 100644
index 0000000..664e726
--- /dev/null
+++ b/src/views/resumeInfo/components/Comment.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/Credentials.vue b/src/views/resumeInfo/components/Credentials.vue
new file mode 100644
index 0000000..cecd3d9
--- /dev/null
+++ b/src/views/resumeInfo/components/Credentials.vue
@@ -0,0 +1,185 @@
+
+
+
+ Download
+
+
+
+
+
+
+
+
+
+
+
+
+ View
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/EducationTraining.vue b/src/views/resumeInfo/components/EducationTraining.vue
new file mode 100644
index 0000000..98d6ada
--- /dev/null
+++ b/src/views/resumeInfo/components/EducationTraining.vue
@@ -0,0 +1,194 @@
+
+
+
Education (in chronological order)
+
+
+
+
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Degree:scope.row.DegreeCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Major:scope.row.MajorCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Organization:scope.row.OrganizationCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.City:scope.row.CityCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Province:scope.row.ProvinceCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Country:scope.row.CountryCN }}
+
+
+
+
+
+
Postgraduate Training (in chronological order)
+
+
+
+
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Training:scope.row.TrainingCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Major:scope.row.MajorCN }}
+
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Hospital:scope.row.HospitalCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.School:scope.row.SchoolCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.City:scope.row.CityCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Province:scope.row.ProvinceCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.Country:scope.row.CountryCN }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/Employment.vue b/src/views/resumeInfo/components/Employment.vue
new file mode 100644
index 0000000..f616dbb
--- /dev/null
+++ b/src/views/resumeInfo/components/Employment.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+ {{ employment.Department }}
+ {{ employment.DepartmentCN }}
+
+
+
+
+ {{ employment.Rank }}
+ {{ employment.RankCN }}
+
+
+
+
+ {{ employment.Physician }}
+ {{ employment.PhysicianCN }}
+
+
+
+
+ {{ employment.Position }}
+ {{ employment.PositionCN }}
+
+
+
+
+
+
+
+ {{ employment.HospitalName }}
+ {{ employment.HospitalNameCN }}
+
+
+
+
+ {{ employment.UniversityAffiliated }}
+ {{ employment.UniversityAffiliatedCN }}
+
+
+
+
+ {{ employment.City }}
+ {{ employment.CityCN }}
+
+
+
+
+ {{ employment.Province }}
+ {{ employment.ProvinceCN }}
+
+
+
+
+ {{ employment.Country }}
+ {{ employment.CountryCN }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/ResearchPublication.vue b/src/views/resumeInfo/components/ResearchPublication.vue
new file mode 100644
index 0000000..34fd0fe
--- /dev/null
+++ b/src/views/resumeInfo/components/ResearchPublication.vue
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/Resume.vue b/src/views/resumeInfo/components/Resume.vue
new file mode 100644
index 0000000..e10d1cd
--- /dev/null
+++ b/src/views/resumeInfo/components/Resume.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Language===1?'CH':scope.row.Language===2?'EN':'' }}
+
+
+
+
+
+ Download
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/Specialty.vue b/src/views/resumeInfo/components/Specialty.vue
new file mode 100644
index 0000000..bbda130
--- /dev/null
+++ b/src/views/resumeInfo/components/Specialty.vue
@@ -0,0 +1,58 @@
+
+
+
+
+ {{ specialty.Speciality }}
+ {{ specialty.SpecialityCN }}
+
+
+
+ {{ specialty.Subspeciality }}
+ {{ specialty.SubspecialityCNList }}
+
+
+
+ {{ specialty.ReadingType }}
+ {{ specialty.ReadingTypeCNList }}
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/StatusInfo.vue b/src/views/resumeInfo/components/StatusInfo.vue
new file mode 100644
index 0000000..9ac7760
--- /dev/null
+++ b/src/views/resumeInfo/components/StatusInfo.vue
@@ -0,0 +1,189 @@
+
+
+
+
+
+
+
+ {{ statusList.Submitted }}
+
+ {{ statusList.Submitted }}
+
+
+
+
+
+ {{ statusList.Approved }}
+
+ {{ statusList.Approved }}
+
+
+
+
+
+ {{ statusList.Reading }}
+
+ {{ statusList.Reading }}
+
+
+
+
+ {{ holiday }}
+ Planned Vacation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/components/TrialExperience.vue b/src/views/resumeInfo/components/TrialExperience.vue
new file mode 100644
index 0000000..35d8ba9
--- /dev/null
+++ b/src/views/resumeInfo/components/TrialExperience.vue
@@ -0,0 +1,131 @@
+
+
+
Clinical Trial Experience
+
+
+
+
+
+
+
+
+ {{ scope.row.EvaluationCriteriaList.length>0? scope.row.EvaluationCriteriaList.join(', '):'' }}
+
+
+
+
+
+
+
+
+ {{ GCP }}
+ View
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/resumeInfo/index.vue b/src/views/resumeInfo/index.vue
new file mode 100644
index 0000000..c796ee3
--- /dev/null
+++ b/src/views/resumeInfo/index.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+
{{ title }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/reviewers/ReviewersResearch.vue b/src/views/reviewers/ReviewersResearch.vue
new file mode 100644
index 0000000..84b8f39
--- /dev/null
+++ b/src/views/reviewers/ReviewersResearch.vue
@@ -0,0 +1,249 @@
+
+
+
+
+
+ 独立阅片人信息填写
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ sendTitle }}
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+
+ {{ $t('common:button:submit') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/reviewers/ReviewersResearchForm.vue b/src/views/reviewers/ReviewersResearchForm.vue
new file mode 100644
index 0000000..ae9b990
--- /dev/null
+++ b/src/views/reviewers/ReviewersResearchForm.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/reviewers/components/Agreements.vue b/src/views/reviewers/components/Agreements.vue
new file mode 100644
index 0000000..1bfda4b
--- /dev/null
+++ b/src/views/reviewers/components/Agreements.vue
@@ -0,0 +1,316 @@
+
+
+
+
Consultant Agreement
+
+
+
+
(must be in pdf format)
+
+
+
+
+
+
+
+
+ View
+ Delete
+
+
+
+
+
+
+ {{$t('trials:enrolledReviews:message:SOW')}}
+
+ Upload
+
+
+ Template
+
+
+
+
+
+
+ {{ scope.row.CriterionName }}
+
+
+
+
+
+
+
+
+
+
+
+
+ View
+ Edit
+ Delete
+
+
+
+
+
+ {{$t('trials:enrolledReviews:message:EQC')}}
+
+ Upload
+
+
+
+
+
+ {{ scope.row.CriterionName }}
+
+
+
+
+
+
+
+
+
+
+
+
+ View
+ Edit
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击上传
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
+
+
diff --git a/src/views/reviewers/components/BasicInfo.vue b/src/views/reviewers/components/BasicInfo.vue
new file mode 100644
index 0000000..8463d6c
--- /dev/null
+++ b/src/views/reviewers/components/BasicInfo.vue
@@ -0,0 +1,276 @@
+
+
+
+
+
diff --git a/src/views/reviewers/components/Credentials.vue b/src/views/reviewers/components/Credentials.vue
new file mode 100644
index 0000000..d8dcc3e
--- /dev/null
+++ b/src/views/reviewers/components/Credentials.vue
@@ -0,0 +1,120 @@
+
+
+
+
+ Diploma of the highest medical degree 最高医学学位毕业证书
+
+
+
+
+ Template
+
+
+
+
+ Medical Qualification Certificate 医师资格证
+
+
+ Template
+
+
+
+
+
+
+ Practice License 医师执业证
+
+
+ Template
+
+
+
+
+
+
Modality Certificate 大型医用设备上岗证
+
+
+ CT
+
+
+ Template
+
+
+
+
+
+
+ MRI
+
+
+ Template
+
+
+
+
+
+
+ NM
+
+
+ Template
+
+
+
+
+
+
+ US
+
+
+ Template
+
+
+
+
+
+
+
+
+
diff --git a/src/views/reviewers/components/EducationTraining.vue b/src/views/reviewers/components/EducationTraining.vue
new file mode 100644
index 0000000..0ae527f
--- /dev/null
+++ b/src/views/reviewers/components/EducationTraining.vue
@@ -0,0 +1,651 @@
+
+
+
+
+
diff --git a/src/views/reviewers/components/Employment.vue b/src/views/reviewers/components/Employment.vue
new file mode 100644
index 0000000..ca6fd2d
--- /dev/null
+++ b/src/views/reviewers/components/Employment.vue
@@ -0,0 +1,463 @@
+
+
+
+
+
diff --git a/src/views/reviewers/components/GcpCertificate.vue b/src/views/reviewers/components/GcpCertificate.vue
new file mode 100644
index 0000000..597f601
--- /dev/null
+++ b/src/views/reviewers/components/GcpCertificate.vue
@@ -0,0 +1,213 @@
+
+
+
+ Yes
+ No
+
+
+
+ Upload
+ (must be in pdf format)
+
+
+
+
+ Save
+
+
+
+
+
+
diff --git a/src/views/reviewers/components/ResearchPublication.vue b/src/views/reviewers/components/ResearchPublication.vue
new file mode 100644
index 0000000..7b0362c
--- /dev/null
+++ b/src/views/reviewers/components/ResearchPublication.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save
+
+
+
+
+
diff --git a/src/views/reviewers/components/Resumes.vue b/src/views/reviewers/components/Resumes.vue
new file mode 100644
index 0000000..1c2c157
--- /dev/null
+++ b/src/views/reviewers/components/Resumes.vue
@@ -0,0 +1,353 @@
+
+
+
+
Resume
+
+
+
(must be in doc,docx format)
+
+
+
+
+
+
+
+
+ {{ scope.row.IsOfficial === true?'Yes':'No' }}
+
+
+
+
+ {{ scope.row.Language===1?'中文':'English' }}
+
+
+
+
+
+ Download
+ Delete
+ Set as Official
+
+
+
+
+
+
+
中文简历
+
+
(必须是 doc,docx 格式)
+
+
+
+
+
+
+
+
+ {{ scope.row.IsOfficial === true?'Yes':'No' }}
+
+
+
+
+ {{ scope.row.Language===1?'中文':'English' }}
+
+
+
+
+
+ Download
+ Delete
+ Set as Official
+
+
+
+
+
+ Language:
+
+ English
+ 中文
+
+
+
+
+
+
+
diff --git a/src/views/reviewers/components/ReviewerList.vue b/src/views/reviewers/components/ReviewerList.vue
new file mode 100644
index 0000000..d6d4f04
--- /dev/null
+++ b/src/views/reviewers/components/ReviewerList.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+ {{ scope.row.LastName + ' / ' + scope.row.FirstName }}
+
+
+
+
+
+
+
+ {{ scope.row.Reading }}
+
+ {{ scope.row.Reading }}
+
+
+
+
+
+ {{ scope.row.Finished }}
+
+ {{ scope.row.Finished }}
+
+
+
+
+
+ {{ scope.row.SpecialityId === otherId ? scope.row.SpecialityOther : isEnglish?scope.row.Speciality:scope.row.SpecialityCN }}
+
+
+
+
+
+
+ {{ scope.row.SubspecialityList.length>0?scope.row.SubspecialityList.join(', '):'' }}
+
+
+ {{ scope.row.SubspecialityCNList.length>0?scope.row.SubspecialityCNList.join(', '):'' }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.HospitalName:scope.row.HospitalNameCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.City:scope.row.CityCN }}
+
+
+
+
+
+
+ Detail
+
+
+ Edit
+
+
+
+
+
+
diff --git a/src/views/reviewers/components/Setting.vue b/src/views/reviewers/components/Setting.vue
new file mode 100644
index 0000000..e4cf68e
--- /dev/null
+++ b/src/views/reviewers/components/Setting.vue
@@ -0,0 +1,327 @@
+
+
+
+
diff --git a/src/views/reviewers/components/Specialty.vue b/src/views/reviewers/components/Specialty.vue
new file mode 100644
index 0000000..b362d63
--- /dev/null
+++ b/src/views/reviewers/components/Specialty.vue
@@ -0,0 +1,294 @@
+
+
+
+
+
diff --git a/src/views/reviewers/components/TrialExperience.vue b/src/views/reviewers/components/TrialExperience.vue
new file mode 100644
index 0000000..d6dfa7f
--- /dev/null
+++ b/src/views/reviewers/components/TrialExperience.vue
@@ -0,0 +1,302 @@
+
+
+
+
diff --git a/src/views/reviewers/detail.vue b/src/views/reviewers/detail.vue
new file mode 100644
index 0000000..2af48b6
--- /dev/null
+++ b/src/views/reviewers/detail.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/src/views/reviewers/edit.vue b/src/views/reviewers/edit.vue
new file mode 100644
index 0000000..dd4c749
--- /dev/null
+++ b/src/views/reviewers/edit.vue
@@ -0,0 +1,114 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/reviewers/index.vue b/src/views/reviewers/index.vue
new file mode 100644
index 0000000..62d13bd
--- /dev/null
+++ b/src/views/reviewers/index.vue
@@ -0,0 +1,770 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Search
+ Reset
+ Download CV
+
+ 采集链接
+
+
+
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Search
+ Reset
+ Back
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName + ' / ' + scope.row.FirstName }}
+
+
+
+
+
+
+
+
+ {{ scope.row.Reading }}
+
+ {{ scope.row.Reading }}
+
+
+
+
+
+ {{ scope.row.Finished }}
+
+ {{ scope.row.Finished }}
+
+
+
+
+
+ {{ scope.row.SpecialityId === otherId ? scope.row.SpecialityOther : isEnglish?scope.row.Speciality:scope.row.SpecialityCN }}
+
+
+
+
+
+
+ {{ scope.row.SubspecialityList.length>0?scope.row.SubspecialityList.join(', '):'' }}
+
+
+ {{ scope.row.SubspecialityCNList.length>0?scope.row.SubspecialityCNList.join(', '):'' }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.HospitalName:scope.row.HospitalNameCN }}
+
+
+
+
+
+
+ {{ isEnglish?scope.row.City:scope.row.CityCN }}
+
+
+
+
+
+
+ {{ scope.row.IsVirtual ? 'Yes' : 'No' }}
+
+
+
+
+
+
+ {{ scope.row.ReviewStatus === 1 ? 'Yes' : 'No' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 成功创建分享链接
+
+
+ 个人简历填写链接:
+
+
+ 复制链接
+
+
+
+
+
+
+
+
+ English
+ 中文
+
+
+
+ Cancel
+ Ok
+
+
+
+
+
+
diff --git a/src/views/reviewers/new.vue b/src/views/reviewers/new.vue
new file mode 100644
index 0000000..9eafd86
--- /dev/null
+++ b/src/views/reviewers/new.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/reviewers/trialStats.vue b/src/views/reviewers/trialStats.vue
new file mode 100644
index 0000000..e85094e
--- /dev/null
+++ b/src/views/reviewers/trialStats.vue
@@ -0,0 +1,190 @@
+
+
+
+ {{ doctorName }} ' {{ listQuery.Status==5?"Pending":listQuery.Status==8?"Approved":"Reading" }} trials
+
+
+
+
+
+
+
+ {{ scope.row.Expedited==0?'No':scope.row.Expedited==1?'24H':'48H' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/share/images.vue b/src/views/share/images.vue
new file mode 100644
index 0000000..2052098
--- /dev/null
+++ b/src/views/share/images.vue
@@ -0,0 +1,79 @@
+
+
+
+
IRC Management System
+
+ 请输入提取码:
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
diff --git a/src/views/statistics/components/ByReviewer.vue b/src/views/statistics/components/ByReviewer.vue
new file mode 100644
index 0000000..33bdc40
--- /dev/null
+++ b/src/views/statistics/components/ByReviewer.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.EntryRate }}%
+
+
+
+
+
+
+
+
diff --git a/src/views/statistics/components/ByTrial.vue b/src/views/statistics/components/ByTrial.vue
new file mode 100644
index 0000000..0d93eb6
--- /dev/null
+++ b/src/views/statistics/components/ByTrial.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.Expedited==0?'No':scope.row.Expedited==1?'24H':'48H' }}
+
+
+
+
+
+ {{ scope.row.ReviewerNameList }}
+
+
+ {{ scope.row.ReviewerNameCNList }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/statistics/components/EnrollmentsStats.vue b/src/views/statistics/components/EnrollmentsStats.vue
new file mode 100644
index 0000000..42b201c
--- /dev/null
+++ b/src/views/statistics/components/EnrollmentsStats.vue
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ To
+
+ Reset
+ Search
+ Export Excel
+
+
+
+
+
+
+
+
+
diff --git a/src/views/statistics/components/EnrollmentsStatsByReviewer.vue b/src/views/statistics/components/EnrollmentsStatsByReviewer.vue
new file mode 100644
index 0000000..ba94365
--- /dev/null
+++ b/src/views/statistics/components/EnrollmentsStatsByReviewer.vue
@@ -0,0 +1,374 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Export Excel
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.EntryRate }}%
+
+
+
+
+
+
diff --git a/src/views/statistics/components/ParticipatesStats.vue b/src/views/statistics/components/ParticipatesStats.vue
new file mode 100644
index 0000000..a7638c2
--- /dev/null
+++ b/src/views/statistics/components/ParticipatesStats.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ trialInfo.row.Expedited===0?'No':trialInfo.row.Expedited===1?'24H':'48H' }}
+
+
+
+
+
+
+
+
+ {{ scope.row.TrialCount }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/statistics/components/TrialEnrollmentsStats.vue b/src/views/statistics/components/TrialEnrollmentsStats.vue
new file mode 100644
index 0000000..922759b
--- /dev/null
+++ b/src/views/statistics/components/TrialEnrollmentsStats.vue
@@ -0,0 +1,341 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Export Excel
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Expedited==0?'No':scope.row.Expedited==1?'24H':'48H' }}
+
+
+
+
+
+
+ {{ scope.row.ReviewerNameList }}
+
+
+ {{ scope.row.ReviewerNameCNList }}
+
+
+
+
+
+
+
diff --git a/src/views/statistics/components/WorkloadStats.vue b/src/views/statistics/components/WorkloadStats.vue
new file mode 100644
index 0000000..e270215
--- /dev/null
+++ b/src/views/statistics/components/WorkloadStats.vue
@@ -0,0 +1,511 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Export Excel
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/statistics/index.vue b/src/views/statistics/index.vue
new file mode 100644
index 0000000..ff23d8f
--- /dev/null
+++ b/src/views/statistics/index.vue
@@ -0,0 +1,97 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/statistics/statistics.js b/src/views/statistics/statistics.js
new file mode 100644
index 0000000..b102a1f
--- /dev/null
+++ b/src/views/statistics/statistics.js
@@ -0,0 +1,145 @@
+/** ** workload statistics list config data ** **/
+export const workloadStats_form = [
+ {
+ type: 'Custom',
+ slot: 'croSlot',
+ label: 'CRO:',
+ prop: 'CROId'
+ },
+ {
+ type: 'Input',
+ label: 'Trial ID:',
+ prop: 'TrialCode',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Custom',
+ slot: 'hospitalSlot',
+ label: 'Hospital:',
+ prop: 'HospitalId'
+ },
+ {
+ type: 'Input',
+ label: 'Reviewer ID:',
+ prop: 'Reviewer',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Custom',
+ slot: 'beginDateSlot',
+ label: 'Begin Date:',
+ prop: 'BeginDate'
+ },
+ {
+ type: 'Custom',
+ slot: 'endDateSlot',
+ label: 'End Date:',
+ prop: 'EndDate'
+ }
+]
+export const workloadStats_handle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' },
+ { label: 'Export', type: 'primary', emitKey: 'export', slot: 'exportSlot' }
+]
+
+/** ** reviewer enrollment statistics list config data ** **/
+export const enrollStats_form = [
+ {
+ type: 'Custom',
+ slot: 'hospitalSlot',
+ label: 'Hospital:',
+ prop: 'HospitalId'
+ },
+ {
+ type: 'Input',
+ label: 'Reviewer ID:',
+ prop: 'Reviewer',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Custom',
+ slot: 'beginDateSlot',
+ label: 'Begin Date:',
+ prop: 'BeginDate'
+ },
+ {
+ type: 'Custom',
+ slot: 'endDateSlot',
+ label: 'End Date:',
+ prop: 'EndDate'
+ }
+]
+export const enrollStats_handle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' },
+ { label: 'Export', type: 'primary', emitKey: 'export', slot: 'exportSlot' }
+]
+
+/** ** trial enrollment statistics list config data ** **/
+export const trialStats_form = [
+ {
+ type: 'Custom',
+ slot: 'croSlot',
+ label: 'CRO:',
+ prop: 'CroId'
+ },
+ {
+ type: 'Input',
+ label: 'Trial ID:',
+ prop: 'TrialCode',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Indication:',
+ prop: 'Indication',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Custom',
+ slot: 'beginDateSlot',
+ label: 'Begin Date:',
+ prop: 'BeginDate'
+ },
+ {
+ type: 'Custom',
+ slot: 'endDateSlot',
+ label: 'End Date:',
+ prop: 'EndDate'
+ }
+]
+export const trialStats_handle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' },
+ { label: 'Export', type: 'primary', emitKey: 'export', slot: 'exportSlot' }
+]
+
+/** ** participate statistics list config data ** **/
+export const participate_form = [
+ {
+ type: 'Input',
+ label: 'User Name:',
+ prop: 'UserInfo',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Organization:',
+ prop: 'OrganizationName',
+ width: '120px',
+ placeholder: ''
+ }
+]
+export const participate_handle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' }
+ // { label: 'Export', type: 'primary', emitKey: 'export', slot: 'exportSlot' }
+]
+
diff --git a/src/views/system/i18n/components/BatchAddForm.vue b/src/views/system/i18n/components/BatchAddForm.vue
new file mode 100644
index 0000000..ebe88ec
--- /dev/null
+++ b/src/views/system/i18n/components/BatchAddForm.vue
@@ -0,0 +1,218 @@
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+ {{ $t('common:button:delete') }}
+
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
diff --git a/src/views/system/i18n/components/I18nForm.vue b/src/views/system/i18n/components/I18nForm.vue
new file mode 100644
index 0000000..91f7d24
--- /dev/null
+++ b/src/views/system/i18n/components/I18nForm.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
diff --git a/src/views/system/i18n/index.vue b/src/views/system/i18n/index.vue
new file mode 100644
index 0000000..01de7af
--- /dev/null
+++ b/src/views/system/i18n/index.vue
@@ -0,0 +1,344 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+ 新增
+
+
+ 批量新增
+
+
+
+
+
+
+
+
+ {{ $fd('InternationalizationType', scope.row.InternationalizationType) }}
+
+
+ {{ $fd('InternationalizationType', scope.row.InternationalizationType) }}
+
+
+ {{ $fd('InternationalizationType', scope.row.InternationalizationType) }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('InternationalizationKeyState', scope.row.State) }}
+
+
+ {{ $fd('InternationalizationKeyState', scope.row.State) }}
+
+
+ {{ $fd('InternationalizationKeyState', scope.row.State) }}
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/login-log/index.vue b/src/views/system/login-log/index.vue
new file mode 100644
index 0000000..6b18a46
--- /dev/null
+++ b/src/views/system/login-log/index.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+
+
+
+
+
+ {{ $fd('UserOptType',scope.row.OptType) }}
+
+
+
+
+
+
+
+ {{ $fd('UserType',scope.row.LoginUserTypeEnum) }}
+
+
+
+
+
+ {{ $fd('UserType',scope.row.OptUserTypeEnum) }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue
new file mode 100644
index 0000000..2414a4d
--- /dev/null
+++ b/src/views/system/menu/index.vue
@@ -0,0 +1,498 @@
+
+
+
+
+
+
diff --git a/src/views/system/menu/menu.js b/src/views/system/menu/menu.js
new file mode 100644
index 0000000..e94b552
--- /dev/null
+++ b/src/views/system/menu/menu.js
@@ -0,0 +1,127 @@
+[
+ {
+ 'MenuType': 'M',
+ 'MenuIcon': 'Trials',
+ 'MenuName': 'Trials',
+ 'Path': '/trials',
+ 'Component': '',
+ 'ShowOrder': 3,
+ 'IsEnable': true,
+ 'IsCache': false,
+ 'IsDisplay': true,
+ 'IsInTabDisplay': false,
+ 'IsExternalLink': false,
+ 'PermissionStr': '',
+ 'Meta': '{ title: `Trials`}',
+ 'Children': [
+ {
+ 'MenuType': 'C',
+ 'MenuIcon': '',
+ 'MenuName': 'TrialsPanel',
+ 'Path': '/trials/trials-panel',
+ 'Component': 'views/trials/trials-panel/index',
+ 'ShowOrder': 2,
+ 'IsEnable': false,
+ 'IsCache': false,
+ 'IsDisplay': false,
+ 'IsInTabDisplay': false,
+ 'IsExternalLink': false,
+ 'PermissionStr': 'trials:trials-panel',
+ 'Meta': '{ title: `panel`,breadcrumb: true, activeMenu: `/trials/trials-list` }',
+ 'Children': [
+ {
+ 'MenuType': 'C',
+ 'MenuIcon': '',
+ 'MenuName': 'enrolled-reviewers',
+ 'Path': '/trials/trials-panel/enrolled-reviewers',
+ 'Component': 'views/trials/trials-panel/enrolled-reviewers/index',
+ 'ShowOrder': 3,
+ 'IsEnable': false,
+ 'IsCache': false,
+ 'IsDisplay': false,
+ 'IsInTabDisplay': false,
+ 'IsExternalLink': false,
+ 'PermissionStr': 'trials:trials-panel:enrolled-reviewers',
+ 'Meta': '{ breadcrumb: false, hidden: true, activeMenu: `/trials/trials-list` }',
+ 'Children': [{
+ 'MenuType': 'C',
+ 'MenuIcon': '',
+ 'MenuName': 'enroll-list',
+ 'Path': '/trials/trials-panel/enrolled-reviewers/list',
+ 'Component': 'views/trials/trials-panel/enrolled-reviewers/list/index',
+ 'ShowOrder': 1,
+ 'IsEnable': false,
+ 'IsCache': false,
+ 'IsDisplay': false,
+ 'IsInTabDisplay': false,
+ 'IsExternalLink': false,
+ 'PermissionStr': 'trials:trials-panel:enrolled-reviewers:list',
+ 'Meta': '{ title: `Enrolled-reviewers`, hidden: true, activeMenu: `/trials/trials-list` }',
+ 'Children': []
+ }, {
+ 'MenuType': 'C',
+ 'MenuIcon': '',
+ 'MenuName': 'enroll',
+ 'Path': '/trials/trials-panel/enrolled-reviewers/enroll',
+ 'Component': 'views/trials/trials-panel/enrolled-reviewers/enroll/index',
+ 'ShowOrder': 2,
+ 'IsEnable': false,
+ 'IsCache': false,
+ 'IsDisplay': false,
+ 'IsInTabDisplay': false,
+ 'IsExternalLink': false,
+ 'PermissionStr': 'trials:trials-panel:enrolled-reviewers:enroll',
+ 'Meta': '{ title: `Enroll`, hidden: true, activeMenu: `/trials/trials-list` }',
+ 'Children': []
+ }, {
+ 'MenuType': 'C',
+ 'MenuIcon': '',
+ 'MenuName': 'stats',
+ 'Path': '/trials/trials-panel/enrolled-reviewers/stats',
+ 'Component': 'views/trials/trials-panel/enrolled-reviewers/stats/index',
+ 'ShowOrder': 3,
+ 'IsEnable': false,
+ 'IsCache': false,
+ 'IsDisplay': false,
+ 'IsInTabDisplay': false,
+ 'IsExternalLink': false,
+ 'PermissionStr': 'trials:trials-panel:enrolled-reviewers:stats',
+ 'Meta': '{ title: `Stats`, hidden: true, activeMenu: `/trials/trials-list` }',
+ 'Children': []
+ }]
+ }
+ ]
+ }]
+ },
+ {
+ 'MenuType': 'M',
+ 'MenuIcon': 'druid',
+ 'MenuName': 'Statistics',
+ 'Path': '/statistics',
+ 'Component': '',
+ 'ShowOrder': 4,
+ 'IsEnable': true,
+ 'IsCache': false,
+ 'IsDisplay': true,
+ 'IsInTabDisplay': false,
+ 'IsExternalLink': false,
+ 'PermissionStr': '',
+ 'Meta': '',
+ 'Children': [{
+ 'MenuType': 'C',
+ 'MenuIcon': '',
+ 'MenuName': 'StatisticsList',
+ 'Path': '/statistics/statistics-list',
+ 'Component': 'views/statistics/index',
+ 'ShowOrder': 1,
+ 'IsEnable': false,
+ 'IsCache': false,
+ 'IsDisplay': false,
+ 'IsInTabDisplay': false,
+ 'IsExternalLink': false,
+ 'PermissionStr': 'statistics:statistics-list',
+ 'Meta': '{ title: `Statistics`, breadcrumb: false, }',
+ 'Children': []
+ }]
+ }
+]
diff --git a/src/views/system/notice/components/from.vue b/src/views/system/notice/components/from.vue
new file mode 100644
index 0000000..42dd642
--- /dev/null
+++ b/src/views/system/notice/components/from.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击上传
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue
new file mode 100644
index 0000000..f427477
--- /dev/null
+++ b/src/views/system/notice/index.vue
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 新增
+
+
+
+
+
+
+ {{ $fd('NoteLevel', scope.row.NoticeLevelEnum) }}
+
+
+
+
+ {{ $fd('NoteType', scope.row.NoticeTypeEnum) }}
+
+
+
+
+ {{ scope.row.NoticeContent }}
+
+
+
+
+
+ {{ $fd('NoticeState', scope.row.ActualNoticeStateEnum) }}
+
+
+
+
+
+ {{ $fd('NoticeApplicableTrial', scope.row.ApplicableProjectEnum) }}
+
+
+
+
+ {{ $fd('NoticeUserTypeList', scope.row.UserTypeShortName) }}
+
+
+
+
+ {{ dict.type.NoticeMode.find(v => {return v.raw.Code * 1 === scope.row.NoticeModeEnum}) ? dict.type.NoticeMode.find(v => {return v.raw.Code * 1 === scope.row.NoticeModeEnum}).label : '' }}
+
+
+
+
+ {{ scope.row.StartDate }}-{{ scope.row.EndDate }}
+
+
+
+
+
+
+ {{ scope.row.StartDate ? scope.row.StartDate: scope.row.CreateTime }}
+
+
+
+
+ {{ scope.row.FileName }}
+
+
+
+
+ 编辑
+ 发布
+ 撤回
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/public-log/components/LogForm.vue b/src/views/system/public-log/components/LogForm.vue
new file mode 100644
index 0000000..6e71ade
--- /dev/null
+++ b/src/views/system/public-log/components/LogForm.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+ 保存
+
+
+
+
diff --git a/src/views/system/public-log/index.vue b/src/views/system/public-log/index.vue
new file mode 100644
index 0000000..6336fc9
--- /dev/null
+++ b/src/views/system/public-log/index.vue
@@ -0,0 +1,238 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ 查询
+
+
+ 新增
+
+
+
+
+
+
+
+
+
+ {{ scope.row.PublishTime?moment(scope.row.PublishTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/role/components/RoleForm.vue b/src/views/system/role/components/RoleForm.vue
new file mode 100644
index 0000000..ce44f7f
--- /dev/null
+++ b/src/views/system/role/components/RoleForm.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 展开/折叠
+ 全选/全不选
+ 父子联动
+
+
+
+
+
+
+ Cancel
+
+ Save
+
+
+
+
diff --git a/src/views/system/role/components/RoleFunction.vue b/src/views/system/role/components/RoleFunction.vue
new file mode 100644
index 0000000..8baf5ca
--- /dev/null
+++ b/src/views/system/role/components/RoleFunction.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/role/components/RoleMenu.vue b/src/views/system/role/components/RoleMenu.vue
new file mode 100644
index 0000000..214a049
--- /dev/null
+++ b/src/views/system/role/components/RoleMenu.vue
@@ -0,0 +1,122 @@
+
+
+
+
+
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
new file mode 100644
index 0000000..af573cc
--- /dev/null
+++ b/src/views/system/role/index.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 新增
+
+
+
+
+
+
+
+
+ {{ scope.row.UserTypeGroupList.map(v => {return v.GroupName}).toString() }}
+
+
+
+
+
+ {{ $fd('UserType',scope.row.UserTypeEnum) }}
+
+
+
+
+
+ Edit
+ Delete
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/system/role/role.js b/src/views/system/role/role.js
new file mode 100644
index 0000000..3d1dfcd
--- /dev/null
+++ b/src/views/system/role/role.js
@@ -0,0 +1,80 @@
+// 角色列表配置信息
+export const role_columns = [
+ { type: 'index' },
+
+ {
+ prop: 'UserType',
+ label: 'User Type',
+ minWidth: 120,
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'UserTypeShortName',
+ label: 'Shortname',
+ minWidth: 100,
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Type',
+ label: 'Group',
+ hidden: true,
+ minWidth: 100,
+ showOverflowTooltip: true,
+ slot: 'TypeSlot'
+ },
+
+ {
+ prop: 'Description',
+ label: 'Description',
+ minWidth: 100,
+ showOverflowTooltip: true },
+ {
+ type: 'operate',
+ label: 'Action',
+ minWidth: 100,
+ operates: [
+ // { name: 'Permission', type: 'primary', emitKey: 'permission' },
+ { name: 'Edit', type: 'primary', emitKey: 'edit' },
+ { name: 'Delete', type: 'danger', emitKey: 'delete' }
+ ] }
+]
+export const model_cfg = {
+ visible: false,
+ title: '',
+ width: '600px',
+ showClose: true
+}
+export const editRoleForm = [
+ {
+ type: 'Input',
+ label: 'Role Name',
+ prop: 'RoleName',
+ width: '100%',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Description',
+ prop: 'RoleDescription',
+ width: '100%',
+ placeholder: ''
+ }
+]
+export const editData = {
+ RoleName: null,
+ RoleDescription: null
+}
+export const editRules = {
+ RoleName: [
+ { required: true, message: 'Please specify', trigger: 'blur' },
+ { max: 50, message: 'The maximum length is 50' }
+ ],
+ RoleDescription: [
+ { max: 500, message: 'The maximum length is 500' }
+ ]
+
+}
+export const editHandle = [
+ { label: 'Cancel', type: 'primary', emitKey: 'cancel' },
+ { label: 'Save', type: 'primary', emitKey: 'save' }
+]
diff --git a/src/views/system/user/add/index.vue b/src/views/system/user/add/index.vue
new file mode 100644
index 0000000..ad9ae93
--- /dev/null
+++ b/src/views/system/user/add/index.vue
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/src/views/system/user/components/Account.vue b/src/views/system/user/components/Account.vue
new file mode 100644
index 0000000..2d6293f
--- /dev/null
+++ b/src/views/system/user/components/Account.vue
@@ -0,0 +1,39 @@
+
+
+
+
+ Reset Password
+
+
+
+
diff --git a/src/views/system/user/components/UserInfo.vue b/src/views/system/user/components/UserInfo.vue
new file mode 100644
index 0000000..fea53bb
--- /dev/null
+++ b/src/views/system/user/components/UserInfo.vue
@@ -0,0 +1,240 @@
+
+
+
+
+ Basic Information
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Male
+ Female
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Affiliation
+
+
+
+ Internal
+ External
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save
+
+
+
+
+
+
+
diff --git a/src/views/system/user/edit/index.vue b/src/views/system/user/edit/index.vue
new file mode 100644
index 0000000..921b2c8
--- /dev/null
+++ b/src/views/system/user/edit/index.vue
@@ -0,0 +1,40 @@
+
+
+
+
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
new file mode 100644
index 0000000..d559fac
--- /dev/null
+++ b/src/views/system/user/index.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/views/system/user/list/index.vue b/src/views/system/user/list/index.vue
new file mode 100644
index 0000000..e5d77f7
--- /dev/null
+++ b/src/views/system/user/list/index.vue
@@ -0,0 +1,150 @@
+
+
+
+
+ New
+
+
+
+
+ {{ scope.row.Sex?'Male':'Female' }}
+
+
+ {{ scope.row.RoleNameList.map(role => role.RoleName).join(',') }}
+
+
+ {{scope.row.IsZhiZhun ? 'Internal' : 'External'}}
+
+
+ {{scope.row.IsTestUser ? 'Yes' : 'No'}}
+
+
+ {{ scope.row.Status?'Enable':'Disable' }}
+
+
+
+
+
+
diff --git a/src/views/system/user/list/list.js b/src/views/system/user/list/list.js
new file mode 100644
index 0000000..5fffb38
--- /dev/null
+++ b/src/views/system/user/list/list.js
@@ -0,0 +1,185 @@
+// 用户列表配置信息
+export const columns = [
+ { type: 'index' },
+ {
+ prop: 'UserCode',
+ label: 'S/N',
+ width: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'UserName',
+ label: 'User Name',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'RealName',
+ label: 'Real Name',
+ minWidth: 120,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Sex',
+ label: 'Gender',
+ hidden: true,
+ slot: 'genderSlot',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'Phone',
+ label: 'Phone',
+ minWidth: 120,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'EMail',
+ label: 'EMail',
+ minWidth: 150,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'OrganizationName',
+ label: 'Organization',
+ minWidth: 130,
+ showOverflowTooltip: true
+ },
+ {
+ prop: 'UserType',
+ label: 'User Type',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true
+ },
+ // {
+ // prop: 'RoleNameList',
+ // label: 'Roles',
+ // hidden: true,
+ // slot: 'roleSlot',
+ // minWidth: 250,
+ // showOverflowTooltip: true
+ // },
+ {
+ prop: 'IsZhiZhun',
+ label: 'Internal Or External:',
+ hidden: true,
+ slot: 'isZhiZhunSlot',
+ minWidth: 140,
+ sortable: 'custom',
+ showOverflowTooltip: true },
+ {
+ prop: 'IsTestUser',
+ label: 'Is Test User',
+ hidden: true,
+ slot: 'isTestUserSlot',
+ minWidth: 120,
+ sortable: 'custom',
+ showOverflowTooltip: true },
+ {
+ prop: 'Status',
+ label: 'Status',
+ hidden: true,
+ slot: 'statusSlot',
+ minWidth: 100,
+ sortable: 'custom',
+ showOverflowTooltip: true },
+ { type: 'operate',
+ label: 'Action',
+ minWidth: 200,
+ operates: [
+ { name: 'Edit', type: 'primary', emitKey: 'editCb' },
+ { name: 'Delete', type: 'danger', emitKey: 'deleteCb' }
+ ] }
+]
+
+// 用户列表查询表单配置信息
+export const searchForm = [
+ {
+ type: 'Input',
+ label: 'User Name:',
+ prop: 'UserName',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Real Name:',
+ prop: 'RealName',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Phone:',
+ prop: 'Phone',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Input',
+ label: 'Organization:',
+ prop: 'OrganizationName',
+ width: '120px',
+ placeholder: ''
+ },
+ {
+ type: 'Select',
+ label: 'Internal Or External:',
+ prop: 'IsZhiZhun',
+ width: '100px',
+ options: [
+ { label: 'Internal', value: true },
+ { label: 'External', value: false }
+ ],
+ props: { label: 'label', value: 'value' },
+ change: scope => '',
+ placeholder: ''
+ },
+ {
+ type: 'Select',
+ label: 'Is Test User:',
+ prop: 'IsTestUser',
+ width: '100px',
+ options: [
+ { label: 'Yes', value: true },
+ { label: 'No', value: false }
+ ],
+ props: { label: 'label', value: 'value' },
+ change: scope => '',
+ placeholder: ''
+ },
+ {
+ type: 'Select',
+ label: 'Status:',
+ prop: 'UserState',
+ width: '100px',
+ options: [
+ { label: 'Enable', value: 1 },
+ { label: 'Disable', value: 0 }
+ ],
+ props: { label: 'label', value: 'value' },
+ change: scope => '',
+ placeholder: ''
+ },
+ {
+ type: 'Select',
+ label: 'User Type:',
+ prop: 'UserType',
+ width: '100px',
+ options: [], // 下拉选项
+ props: { label: 'UserType', value: 'Id' }, // 下拉选项配置信息,必填
+ placeholder: ''
+ }
+]
+// 用户列表查询表单事件配置信息
+export const searchHandle = [
+ { label: 'Reset', type: 'primary', emitKey: 'reset' },
+ { label: 'Search', type: 'primary', emitKey: 'search' }
+]
diff --git a/src/views/test/videos/index.vue b/src/views/test/videos/index.vue
new file mode 100644
index 0000000..f72016c
--- /dev/null
+++ b/src/views/test/videos/index.vue
@@ -0,0 +1,146 @@
+
+
+
上传视频文件
+
选择dicom文件
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/test/videos/index2.vue b/src/views/test/videos/index2.vue
new file mode 100644
index 0000000..790d1e1
--- /dev/null
+++ b/src/views/test/videos/index2.vue
@@ -0,0 +1,98 @@
+
+
+ 选择dicom文件
+
+
+
+
+
+
+
diff --git a/src/views/trials/components/SignForm.vue b/src/views/trials/components/SignForm.vue
new file mode 100644
index 0000000..966c88f
--- /dev/null
+++ b/src/views/trials/components/SignForm.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
diff --git a/src/views/trials/components/newSignForm.vue b/src/views/trials/components/newSignForm.vue
new file mode 100644
index 0000000..f0db698
--- /dev/null
+++ b/src/views/trials/components/newSignForm.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+
diff --git a/src/views/trials/hot-keys/components/HotKeyInput.vue b/src/views/trials/hot-keys/components/HotKeyInput.vue
new file mode 100644
index 0000000..eb9b3fa
--- /dev/null
+++ b/src/views/trials/hot-keys/components/HotKeyInput.vue
@@ -0,0 +1,286 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/hot-keys/components/HotKeysList.vue b/src/views/trials/hot-keys/components/HotKeysList.vue
new file mode 100644
index 0000000..c4b2b39
--- /dev/null
+++ b/src/views/trials/hot-keys/components/HotKeysList.vue
@@ -0,0 +1,148 @@
+
+
+
+
+
+
+ {{ $fd('ShortcutKey',item.label) }}
+
+
+
+
+
+
+ {{ $t('common:button:reset') }}
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/hot-keys/index.vue b/src/views/trials/hot-keys/index.vue
new file mode 100644
index 0000000..f29b195
--- /dev/null
+++ b/src/views/trials/hot-keys/index.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-layout/components/noticeMarquee.vue b/src/views/trials/trials-layout/components/noticeMarquee.vue
new file mode 100644
index 0000000..6d4cd1b
--- /dev/null
+++ b/src/views/trials/trials-layout/components/noticeMarquee.vue
@@ -0,0 +1,81 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-layout/components/topLang.vue b/src/views/trials/trials-layout/components/topLang.vue
new file mode 100644
index 0000000..fb37e5a
--- /dev/null
+++ b/src/views/trials/trials-layout/components/topLang.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+ 中文
+
+ English
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-layout/components/trialsMain.vue b/src/views/trials/trials-layout/components/trialsMain.vue
new file mode 100644
index 0000000..8b10d92
--- /dev/null
+++ b/src/views/trials/trials-layout/components/trialsMain.vue
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-layout/components/trialsNavbar.vue b/src/views/trials/trials-layout/components/trialsNavbar.vue
new file mode 100644
index 0000000..d40af98
--- /dev/null
+++ b/src/views/trials/trials-layout/components/trialsNavbar.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-layout/index.vue b/src/views/trials/trials-layout/index.vue
new file mode 100644
index 0000000..d006b18
--- /dev/null
+++ b/src/views/trials/trials-layout/index.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-list/components/DoneList.vue b/src/views/trials/trials-list/components/DoneList.vue
new file mode 100644
index 0000000..e65b290
--- /dev/null
+++ b/src/views/trials/trials-list/components/DoneList.vue
@@ -0,0 +1,242 @@
+
+
+
+
+ {{$fd('UserType', scope.row.UserType)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.Reading_PM_ToBeApprovalCount + scope.row.Reading_SPM_ToBeApprovalCount}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-list/components/SignForm.vue b/src/views/trials/trials-list/components/SignForm.vue
new file mode 100644
index 0000000..2f4269c
--- /dev/null
+++ b/src/views/trials/trials-list/components/SignForm.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-list/components/TrialForm.vue b/src/views/trials/trials-list/components/TrialForm.vue
new file mode 100644
index 0000000..cec81a1
--- /dev/null
+++ b/src/views/trials/trials-list/components/TrialForm.vue
@@ -0,0 +1,539 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:trials-list:form:cancel') }}
+
+
+ {{ $t('trials:trials-list:form:save') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-list/components/TrialStatusForm.vue b/src/views/trials/trials-list/components/TrialStatusForm.vue
new file mode 100644
index 0000000..2d6391f
--- /dev/null
+++ b/src/views/trials/trials-list/components/TrialStatusForm.vue
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+ {{ $fd('TrialStatusEnum', 'Initializing') }}
+ {{ $fd('TrialStatusEnum', 'Ongoing') }}
+
+ {{ $fd('TrialStatusEnum', 'Stopped') }}
+
+
+ {{ $fd('TrialStatusEnum', 'Completed') }}
+
+
+
+
+
+
+
+
+ {{ warningMessage }}
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
diff --git a/src/views/trials/trials-list/index.vue b/src/views/trials/trials-list/index.vue
new file mode 100644
index 0000000..e984fbd
--- /dev/null
+++ b/src/views/trials/trials-list/index.vue
@@ -0,0 +1,797 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Search
+ Reset
+ Back
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}
+ {{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}
+ {{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}
+ {{ $fd('TrialStatusEnum', scope.row.TrialStatusStr) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-myinfo/index.vue b/src/views/trials/trials-myinfo/index.vue
new file mode 100644
index 0000000..b8ed88c
--- /dev/null
+++ b/src/views/trials/trials-myinfo/index.vue
@@ -0,0 +1,385 @@
+
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:title:avater') }}
+
+
+
+ {{ user.LastName }}
+
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:title:basicInfo') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Male
+ Female
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:button:save') }}
+
+
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:title:accountInfo') }}
+
+
+
+
+ {{ user.UserName }}
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:button:update') }}
+
+
+
+
+ {{ user.Phone }}
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:button:update') }}
+
+
+
+
+ {{ user.EMail }}
+
+
+
+ {{ sendTitle }}
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:button:update') }}
+
+
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:title:updatePaasord') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:trials-myinfo:button:save') }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-notice/index.vue b/src/views/trials/trials-notice/index.vue
new file mode 100644
index 0000000..b71a197
--- /dev/null
+++ b/src/views/trials/trials-notice/index.vue
@@ -0,0 +1,246 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('NoteType', scope.row.NoticeTypeEnum) }}
+
+
+
+
+
+
+
+ {{ $fd('NoticeState', scope.row.ActualNoticeStateEnum) }}
+
+
+
+
+
+
+
+
+ {{ scope.row.FileName }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsRead) }}
+ {{ $fd('YesOrNo', scope.row.IsRead) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/SPMEnrollment/components/Approval.vue b/src/views/trials/trials-panel/attachments/SPMEnrollment/components/Approval.vue
new file mode 100644
index 0000000..744192b
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/SPMEnrollment/components/Approval.vue
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+ {{ $t('trials:seletctedReviews:button:approve') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.SpecialityId === otherId?(scope.row.SpecialityOther?scope.row.SpecialityOther:'Other'): scope.row.Speciality }}
+
+
+
+
+
+ {{ scope.row.SubspecialityIds.map(v => {return $fd('Subspeciality', v, 'id')}).toString() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/SPMEnrollment/index.vue b/src/views/trials/trials-panel/attachments/SPMEnrollment/index.vue
new file mode 100644
index 0000000..207f79b
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/SPMEnrollment/index.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
+
{{ $t('trials:seletctedReviews:title:trialInfor') }}
+
+
+
+
+
+ {{ $fd('Indication', trialInfo.IndicationEnum) }}{{ trialInfo.Indication ? '-' + trialInfo.Indication : '' }}
+
+
+
+ {{ (trialInfo.CriterionList && trialInfo.CriterionList.length>0)? trialInfo.CriterionList.join(', '): '' }}
+
+
+
+
+ {{ trialInfo.Modalitys }}
+
+
+
+
+
+
+
+
+
{{ $t('trials:spmEnroll:title:userList') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/attachment-management/index.vue b/src/views/trials/trials-panel/attachments/attachment-management/index.vue
new file mode 100644
index 0000000..ca48b82
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/attachment-management/index.vue
@@ -0,0 +1,309 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.RealName }}
+
+ {{ item.UserName }}
+
+
+
+
+
+
+
+
+ {{ item.UserType }}
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsSystemDoc', scope.row.IsSystemDoc) }}
+ {{ $fd('IsSystemDoc', scope.row.IsSystemDoc) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/enrollment/components/Approval.vue b/src/views/trials/trials-panel/attachments/enrollment/components/Approval.vue
new file mode 100644
index 0000000..ff64e65
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/enrollment/components/Approval.vue
@@ -0,0 +1,172 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('DoctorTrialState', scope.row.DoctorTrialState) }}
+ {{ $fd('DoctorTrialState', scope.row.DoctorTrialState) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/enrollment/components/Confirmation.vue b/src/views/trials/trials-panel/attachments/enrollment/components/Confirmation.vue
new file mode 100644
index 0000000..ddd24a3
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/enrollment/components/Confirmation.vue
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+ {{ $t('trials:seletctedReviews:button:confirm') }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('DoctorTrialState', scope.row.DoctorTrialState) }}
+ {{ $fd('DoctorTrialState', scope.row.DoctorTrialState) }}
+ {{ $fd('DoctorTrialState', scope.row.DoctorTrialState) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/enrollment/components/Selection.vue b/src/views/trials/trials-panel/attachments/enrollment/components/Selection.vue
new file mode 100644
index 0000000..9c85b37
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/enrollment/components/Selection.vue
@@ -0,0 +1,372 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+ {{ $t('trials:seletctedReviews:button:select') }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('DoctorTrialState', 16) }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.ReadingTypeIds.map(v => {return $fd('ReadingType', v, 'id')}).toString() }}
+
+
+
+
+
+ {{ scope.row.SpecialityId === otherId?(scope.row.SpecialityOther?scope.row.SpecialityOther:'Other'): scope.row.Speciality }}
+
+
+
+
+
+ {{ scope.row.SubspecialityIds.map(v => {return $fd('Subspeciality', v, 'id')}).toString() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/enrollment/components/Submission.vue b/src/views/trials/trials-panel/attachments/enrollment/components/Submission.vue
new file mode 100644
index 0000000..0213ab3
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/enrollment/components/Submission.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+ {{ $t('trials:seletctedReviews:button:submit') }}
+
+
+
+ {{ $t('trials:seletctedReviews:button:submissionDownAll') }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('DoctorTrialState', scope.row.DoctorTrialState) }}
+ {{ $fd('DoctorTrialState', 16) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:seletctedReviews:label:language') }}:
+
+ English
+ 中文
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/enrollment/index.vue b/src/views/trials/trials-panel/attachments/enrollment/index.vue
new file mode 100644
index 0000000..5b457ff
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/enrollment/index.vue
@@ -0,0 +1,251 @@
+
+
+
+
+
+
{{ $t('trials:seletctedReviews:title:trialInfor') }}
+
+
+
+
+
+ {{ $fd('Indication', trialInfo.IndicationEnum) }}{{ trialInfo.Indication ? '-' + trialInfo.Indication : '' }}
+
+
+
+ {{ (trialInfo.CriterionList && trialInfo.CriterionList.length>0)? trialInfo.CriterionList.join(', '): '' }}
+
+
+
+
+ {{ trialInfo.Modalitys }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:seletctedReviews:title:enrollment') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/index.vue b/src/views/trials/trials-panel/attachments/index.vue
new file mode 100644
index 0000000..5353de1
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/index.vue
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/reReading-tracking/index.vue b/src/views/trials/trials-panel/attachments/reReading-tracking/index.vue
new file mode 100644
index 0000000..0339a8d
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/reReading-tracking/index.vue
@@ -0,0 +1,807 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('ArmEnum', scope.row.OriginalReReadingTask.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.OriginalReReadingTask.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.OriginalReReadingTask.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.OriginalReReadingTask.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.OriginalReReadingTask.ArmEnum) }}
+
+
+
+
+
+ {{ scope.row.OriginalReReadingTask.UserName }}({{ scope.row.OriginalReReadingTask.FullName }})
+
+
+
+
+
+
+
+
+ {{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}
+ {{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.RequestReReadingRejectReason }}
+
+ {{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
+
{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/self-attachment/components/SignForm.vue b/src/views/trials/trials-panel/attachments/self-attachment/components/SignForm.vue
new file mode 100644
index 0000000..1aff22d
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/self-attachment/components/SignForm.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/self-attachment/index.vue b/src/views/trials/trials-panel/attachments/self-attachment/index.vue
new file mode 100644
index 0000000..3487f86
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/self-attachment/index.vue
@@ -0,0 +1,355 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:message:signTip') }}
+ {{ `(${currentMinMinutes * 60 - duration}s)` }}
+
+
+
+ {{ $t('common:button:sign') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/site-research/components/users.vue b/src/views/trials/trials-panel/attachments/site-research/components/users.vue
new file mode 100644
index 0000000..d63dbd6
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/site-research/components/users.vue
@@ -0,0 +1,403 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.UserType }}
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+ {{ $t('trials:researchRecord:dialogButton:sendEmail') }}
+
+
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.TrialSiteSurvey.TrialSiteCode}` }}
+
+
+
+ {{ `${scope.row.TrialSiteSurvey.SiteName}` }}
+
+
+
+ {{ `${scope.row.LastName} / ${scope.row.FirstName}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsGenerateAccount) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsJoin', scope.row.IsJoin) }}
+ {{ $fd('IsJoin', scope.row.IsJoin) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/attachments/site-research/index.vue b/src/views/trials/trials-panel/attachments/site-research/index.vue
new file mode 100644
index 0000000..93499ad
--- /dev/null
+++ b/src/views/trials/trials-panel/attachments/site-research/index.vue
@@ -0,0 +1,403 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:researchRecord:button:questionStaffs') }}
+
+
+
+ {{ $t('trials:researchRecord:button:questionLink') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.PreliminaryUser?scope.row.PreliminaryUser.RealName:"" }}
+
+
+
+
+
+ {{ scope.row.ReviewerUser?scope.row.ReviewerUser.RealName:"" }}
+
+
+
+
+
+ {{ $fd('ResearchRecord', scope.row.State) }}
+ {{ $fd('ResearchRecord', scope.row.State) }}
+ {{ $fd('ResearchRecord', scope.row.State) }}
+ {{ $fd('ResearchRecord', scope.row.State) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:researchRecord:message:createLinkSuccessfully') }}
+
+
+
+ {{ $t('trials:researchRecord:label:link') }}
+
+
+
+
+
+ {{ $t('trials:researchRecord:button:copyLink') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/clinical-data/index.vue b/src/views/trials/trials-panel/clinical-data/index.vue
new file mode 100644
index 0000000..a60dc2d
--- /dev/null
+++ b/src/views/trials/trials-panel/clinical-data/index.vue
@@ -0,0 +1,466 @@
+
+
+
+
+
+ {{ `${otherInfo.SubjectCode}` }}
+ ({{ `${otherInfo.ReadingNameOrTaskBlindName}` }})
+
+
+
+
{{ item.ClinicalDataSetName }}
+
+
+ {{ file.FileName }}
+
+
+
+
+ {{ from.CheckDate ? from.CheckDate.split(' ')[0] : item.ClinicalDataSetName + (index + 1) }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:table') }}
+
+
+
+
+ {{ $t('trials:clinicaldara:title:nodata') }}
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:pastTreatment') }}
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ $fd('IsPdEnum', scope.row.IsPD) }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:pastSurgery') }}
+
+
+
+
+
+
+
+ {{ scope.row.OperationTime?moment(scope.row.OperationTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:others') }}
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+ {{ type === 'unconfirm' ? '审批通过' : $t('common:button:confirm') }}
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
{{ $t('trials:readingPeriod:verify:title:result') }}
+
+
+
+
+
+ {{ $fd('YesOrNo', true) }}
+ N/A
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', true) }}
+ N/A
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/components/SignForm.vue b/src/views/trials/trials-panel/components/SignForm.vue
new file mode 100644
index 0000000..bcd2e5a
--- /dev/null
+++ b/src/views/trials/trials-panel/components/SignForm.vue
@@ -0,0 +1,129 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/components/UploadAcksow.vue b/src/views/trials/trials-panel/enrolled-reviewers/components/UploadAcksow.vue
new file mode 100644
index 0000000..2e640e8
--- /dev/null
+++ b/src/views/trials/trials-panel/enrolled-reviewers/components/UploadAcksow.vue
@@ -0,0 +1,138 @@
+
+
+
+ Upload
+ (must be in pdf format)
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/enroll/index.vue b/src/views/trials/trials-panel/enrolled-reviewers/enroll/index.vue
new file mode 100644
index 0000000..e69de29
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/index.vue b/src/views/trials/trials-panel/enrolled-reviewers/index.vue
new file mode 100644
index 0000000..7e163d9
--- /dev/null
+++ b/src/views/trials/trials-panel/enrolled-reviewers/index.vue
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/list/components/UploadAcksow.vue b/src/views/trials/trials-panel/enrolled-reviewers/list/components/UploadAcksow.vue
new file mode 100644
index 0000000..cac18df
--- /dev/null
+++ b/src/views/trials/trials-panel/enrolled-reviewers/list/components/UploadAcksow.vue
@@ -0,0 +1,136 @@
+
+
+
+ {{ $t('trials:enrolledReviews:button:upload') }}
+ {{ `(${$t('trials:enrolledReviews:label:mustBepdf')})` }}
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue b/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue
new file mode 100644
index 0000000..cd4f7bf
--- /dev/null
+++ b/src/views/trials/trials-panel/enrolled-reviewers/list/index.vue
@@ -0,0 +1,822 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName }} / {{ scope.row.FirstName }}
+
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.EnrollTime}` }}
+
+
+
+
+
+
+ {return isEnableChange(scope.row, v)}"
+ />
+ {{$fd('IsEnable', scope.row.IsEnable)}}
+
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', item) + ' & ' + $fd('ReadingCategory', 2) }}
+
+ {{ $fd('ReadingCategory', item) }}
+ {{ $fd('ReadingCategory', item) }}
+
+
+ {{ $t('trials:enrolledReviews:button:config') }}
+
+
+
+
+
+
+ {return v.TrialReadingCriterionId === ite.TrialReadingCriterionId}).StatementCriterionFileList[0].FilePath)">View
+
+
+ {{ $t('trials:enrolledReviews:label:notUpload') }}
+
+
+ {{ $t('trials:enrolledReviews:button:upload') }}
+
+
+
+
+
+
+
+ {return v.TrialReadingCriterionId === ite.TrialReadingCriterionId}).AcknowledgementCriterionFileList[0].FilePath)">View
+
+
+ {{ $t('trials:enrolledReviews:label:notUpload') }}
+
+
+ {{ $t('trials:enrolledReviews:button:upload') }}
+
+
+
+
+
+
+
+ {{ scope.row.CriterionCategoryList.find(v => {return v.TrialReadingCriterionId === ite.TrialReadingCriterionId}).PendingCount }}
+ /
+ {{ scope.row.CriterionCategoryList.find(v => {return v.TrialReadingCriterionId === ite.TrialReadingCriterionId}).ComplectedCount }}
+ /
+ {{ scope.row.CriterionCategoryList.find(v => {return v.TrialReadingCriterionId === ite.TrialReadingCriterionId}).TotalCount }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 点击上传
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/resume/index.vue b/src/views/trials/trials-panel/enrolled-reviewers/resume/index.vue
new file mode 100644
index 0000000..b63ce3e
--- /dev/null
+++ b/src/views/trials/trials-panel/enrolled-reviewers/resume/index.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/stats/components/AddWorkload.vue b/src/views/trials/trials-panel/enrolled-reviewers/stats/components/AddWorkload.vue
new file mode 100644
index 0000000..5b47add
--- /dev/null
+++ b/src/views/trials/trials-panel/enrolled-reviewers/stats/components/AddWorkload.vue
@@ -0,0 +1,441 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:training')} ${info.clientData.Training}` }}
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:refresherTraining')} ${info.clientData.RefresherTraining}` }}
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:tp')} ${info.clientData.Timepoint}` }}
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:ad')} ${info.clientData.Adjudication}` }}
+
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:tp24H')} ${info.clientData.TimepointIn24H}` }}
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:ad24H')} ${info.clientData.AdjudicationIn24H}` }}
+
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:tp48H')} ${info.clientData.TimepointIn48H}` }}
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:ad48H')} ${info.clientData.AdjudicationIn48H}` }}
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:global')} ${info.clientData.Global}` }}
+
+
+
+
+
+
+
+ {{ `${$t('trials:stats:message:downtime')} ${info.clientData.Downtime}` }}
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/enrolled-reviewers/stats/index.vue b/src/views/trials/trials-panel/enrolled-reviewers/stats/index.vue
new file mode 100644
index 0000000..1cf8a2e
--- /dev/null
+++ b/src/views/trials/trials-panel/enrolled-reviewers/stats/index.vue
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.WorkTimeStr }}
+
+
+
+
+ {{ scope.row.DataFrom===0?'Reviewer':scope.row.DataFrom===1?'Client':'Reconciled' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/index.vue b/src/views/trials/trials-panel/index.vue
new file mode 100644
index 0000000..5b75e3e
--- /dev/null
+++ b/src/views/trials/trials-panel/index.vue
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/ad-review/index.vue b/src/views/trials/trials-panel/reading/ad-review/index.vue
new file mode 100644
index 0000000..5afc17b
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/ad-review/index.vue
@@ -0,0 +1,731 @@
+
+
+
+
+
+ {{ $t('trials:adReview:title:subject') }}
+ {{ subjectCode }}
+ ({{ taskBlindName }})
+
+
+
+
+
+
+
{{ $t('trials:adReview:title:result') }}
+
+
+ {{ $t('trials:adReview:title:clinicalData') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].DictionaryCode, parseInt(scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer )) }}
+ {{ scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer }}
+
+
+
+ {{ $fd('YesOrNo', scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer ) }}
+
+
+ {{ $t('trials:adReview:table:view') }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer ) }}
+
+
+ {{ scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+ R1
+
+
+
+ R2
+
+
+
+
+
+
+
+
+
+ R1
+
+
+
+ R2
+
+
+
+
+
+
+
+
+ {{ $t('trials:adReview:title:adResult') }}
+
+
+
+
+
+
+ {{ $fd('ArmEnum', t.ArmEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:adReview:title:loading') }}...
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+ {{ $t('common:button:submit') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:adReview:title:previousRes') }}
+
+
+
+
+
+
+
+ {{ $fd('ArmEnum', scope.row.JudgeResultArm) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/audit-records/components/ChatForm.vue b/src/views/trials/trials-panel/reading/audit-records/components/ChatForm.vue
new file mode 100644
index 0000000..414e7ee
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/audit-records/components/ChatForm.vue
@@ -0,0 +1,256 @@
+
+
+
+
+
+
![PI]()
+
![SR]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+ {{ $t('trials:auditRecord:title:auditResult') }} {{ $fd('PIAuditState',record.PIAuditState) }}
+
+ {{ $t('trials:auditRecord:title:notAgreeReason') }} {{ record.NotAgreeReason }}
+
+ {{ $t('trials:auditRecord:title:note') }} {{ record.PIAuditNote }}
+
+
+ {{ $t('trials:auditRecord:title:screenshot') }}
+
+
+
+
+
+
+
+ {{ record.ReplyContent }}
+
+
+ {{ record.ReplyContent }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:loading') }}...
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/audit-records/index.vue b/src/views/trials/trials-panel/reading/audit-records/index.vue
new file mode 100644
index 0000000..8550fd9
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/audit-records/index.vue
@@ -0,0 +1,408 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+ {{ scope.row.UserName }}({{ scope.row.FullName }})
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+
+
+
+ {{ item.DictionaryCode ? $fd(item.DictionaryCode, parseInt(scope.row.PIReadingResultList.find(v => v.QuestionId === item.QuestionId).Answer)) : scope.row.PIReadingResultList.find(v => v.QuestionId === item.QuestionId).Answer}}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnrollment) }}
+
+ {{ $fd('YesOrNo', scope.row.IsEnrollment) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsPDConfirm) }}
+
+ {{ $fd('YesOrNo', scope.row.IsPDConfirm) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/clinical-data/index.vue b/src/views/trials/trials-panel/reading/clinical-data/index.vue
new file mode 100644
index 0000000..aa92f91
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/clinical-data/index.vue
@@ -0,0 +1,355 @@
+
+
+
+
+ {{ `${otherInfo.SubjectCode}` }}
+ ({{ `${otherInfo.ReadingNameOrTaskBlindName}` }})
+
+
+
+
{{ item.ClinicalDataSetName }}
+
+
+ {{ file.FileName }}
+
+
+
+
+ {{ from.CheckDate ? from.CheckDate.split(' ')[0] : item.ClinicalDataSetName }}
+
+
+
+ {{ $t('trials:uploadClinicalData:title:table') }}
+
+
+
+
+ {{ $t('trials:clinicaldara:title:nodata') }}
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:pastTreatment') }}
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ $fd('IsPdEnum', scope.row.IsPD) }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:pastSurgery') }}
+
+
+
+
+
+
+
+ {{ scope.row.OperationTime?moment(scope.row.OperationTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:others') }}
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/confirmation/index.vue b/src/views/trials/trials-panel/reading/confirmation/index.vue
new file mode 100644
index 0000000..9c48b44
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/confirmation/index.vue
@@ -0,0 +1,510 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:pendingReview:title:urgentReason')}${$fd('TaskUrgentType',scope.row.TaskUrgentType)}` }}
+ {{ scope.row.TaskUrgentRemake?`${$t('trials:pendingReview:title:urgentNote')}${scope.row.TaskUrgentRemake}`:'' }}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+
+
+
+
+
+ {{ scope.row.UserName }}({{ scope.row.FullName }})
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+
+
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+
+
+
+
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnrollment) }}
+
+ {{ $fd('YesOrNo', scope.row.IsEnrollment) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsPDConfirm) }}
+
+ {{ $fd('YesOrNo', scope.row.IsPDConfirm) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/consistency-analysis/components/DoctorConsistentRuleSubjectTable.vue b/src/views/trials/trials-panel/reading/consistency-analysis/components/DoctorConsistentRuleSubjectTable.vue
new file mode 100644
index 0000000..1442dbf
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/consistency-analysis/components/DoctorConsistentRuleSubjectTable.vue
@@ -0,0 +1,172 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsReReadingOrBackInfluenceAnalysis) }}
+ {{ $fd('YesOrNo', scope.row.IsReReadingOrBackInfluenceAnalysis) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/consistency-analysis/components/GroupConsistentRuleSubjectTable.vue b/src/views/trials/trials-panel/reading/consistency-analysis/components/GroupConsistentRuleSubjectTable.vue
new file mode 100644
index 0000000..ba3b039
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/consistency-analysis/components/GroupConsistentRuleSubjectTable.vue
@@ -0,0 +1,182 @@
+/* eslint-disable */
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/consistency-analysis/components/ReaderRulesForm.vue b/src/views/trials/trials-panel/reading/consistency-analysis/components/ReaderRulesForm.vue
new file mode 100644
index 0000000..f53c98a
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/consistency-analysis/components/ReaderRulesForm.vue
@@ -0,0 +1,171 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/consistency-analysis/index.vue b/src/views/trials/trials-panel/reading/consistency-analysis/index.vue
new file mode 100644
index 0000000..971afa0
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/consistency-analysis/index.vue
@@ -0,0 +1,962 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{$t('trials:consistencyAnalysis:button:exportSelf')}}
+
+
+
+ {{$t('trials:consistencyAnalysis:button:exportGroup')}}
+
+
+
+ {{$t('trials:consistencyAnalysis:button:self')}}
+
+
+
+ {{$t('trials:consistencyAnalysis:button:group')}}
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+ {{scope.row.SubjectCode}}
+
+
+ {{$t('trials:consistencyAnalysis:table:impact')}}
+
+
+
+
+
+
+ {{scope.row.TaskName}}
+
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('IsSelfAnalysis', scope.row.IsSelfAnalysis) }}
+ {{ $fd('IsSelfAnalysis', scope.row.IsSelfAnalysis) }}
+
+
+
+
+
+ {{$fd('ArmEnum', scope.row.ArmEnum)}}
+ {{$fd('ArmEnum', scope.row.ArmEnum)}}
+ {{$fd('ArmEnum', scope.row.ArmEnum)}}
+ {{$fd('ArmEnum', scope.row.ArmEnum)}}
+ {{$fd('ArmEnum', scope.row.ArmEnum)}}
+ {{$fd('ArmEnum', scope.row.ArmEnum)}}
+
+
+
+
+
+ {{scope.row.UserName}}({{scope.row.FullName}})
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+
+
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsReReadingOrBackInfluenceAnalysis) }}
+ {{ $fd('YesOrNo', scope.row.IsReReadingOrBackInfluenceAnalysis) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:selftConsistencyAnalysis:button:config')}}
+
+
+
+
+
+
+ {{scope.row.AnalysisDoctorUser.UserName}}({{scope.row.AnalysisDoctorUser.FullName}})
+
+
+
+
+
+
+
+
+
+
+
+ {{$fd('YesOrNo', scope.row.IsHaveReadingPeriod)}}
+ {{$fd('YesOrNo', scope.row.IsHaveReadingPeriod)}}
+
+
+
+
+
+ {{$fd('YesOrNo', scope.row.IsGenerateGlobalTask)}}
+ {{$fd('YesOrNo', scope.row.IsGenerateGlobalTask)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:grouptConsistencyAnalysis:button:config')}}
+
+ {ReaderRulesVisible2 = false; ; rowData = {}}" @getList="getList()" />
+
+
+
+
+ {ReaderRulesFormVisible = false; rowData = {}}" @getList="openTaskConsistentRule(IsSelfAnalysis)" />
+
+
+
+ {DoctorConsistentRuleSubjectTableVisible = false; ; rowData = {}}" @getList="openTaskConsistentRule(IsSelfAnalysis)" />
+
+
+
+
+
+
+
+
+
+ {{$t('trials:consistencyAnalysis:applyReread:imageReload')}}
+
+ {{$t('trials:consistencyAnalysis:applyReread:other')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue b/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue
new file mode 100644
index 0000000..4110c17
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/AdditionalAssessment.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/AssessmentFormItem.vue b/src/views/trials/trials-panel/reading/dicoms/components/AssessmentFormItem.vue
new file mode 100644
index 0000000..e76c663
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/AssessmentFormItem.vue
@@ -0,0 +1,145 @@
+
+
+
+
+ {{ language==='en'?question.GroupEnName:question.GroupName }}
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+ {{ item.label }}
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm.vue
new file mode 100644
index 0000000..b7a815f
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/CustomWwwcForm.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue b/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue
new file mode 100644
index 0000000..c23a0ea
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomCanvas.vue
@@ -0,0 +1,2111 @@
+
+
+
+
+
+
+
+
+ {{ stack.taskName }}
+
+
+
+
+
+
+
{{ subjectCode }} {{ stack.taskName }}
+
Series: #{{ dicomInfo.series }}
+
Image: #{{ dicomInfo.frame }}
+
{{ dicomInfo.modality }}
+
+
+
+ Pos: {{ mousePosition.x?mousePosition.x.toFixed(0):'' }}, {{ mousePosition.y?mousePosition.y.toFixed(0):'' }}
+
+
+ HU: {{ mousePosition.mo }}
+
+
+ SUVbw(g/ml): {{ digitPlaces === -1 ?mousePosition.suv.toFixed(3) :mousePosition.suv.toFixed(digitPlaces) }}
+
+
+ Density: {{ mousePosition.mo }}
+
+
+ W*H: {{ dicomInfo.size }}
+
+
+
+
Zoom: {{ dicomInfo.zoom }}
+
+
+
+
+
+
{{ stack.description }}
+
+
+
+
+
+
+
+
+
+ {{ markers.top }}
+
+
+ {{ markers.right }}
+
+
+
+ {{ markers.bottom }}
+
+
+ {{ markers.left }}
+
+
+
+
Location: {{ dicomInfo.location }}
+
Slice Thickness: {{ dicomInfo.thick }}mm
+
WW/WL: {{ dicomInfo.wwwc }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/DicomEvent.js b/src/views/trials/trials-panel/reading/dicoms/components/DicomEvent.js
new file mode 100644
index 0000000..c83e261
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomEvent.js
@@ -0,0 +1,3 @@
+import Vue from 'vue'
+const DicomEvent = new Vue()
+export default DicomEvent
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/DicomPreview.vue b/src/views/trials/trials-panel/reading/dicoms/components/DicomPreview.vue
new file mode 100644
index 0000000..62d67a8
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomPreview.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue b/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue
new file mode 100644
index 0000000..2d9bfa1
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/DicomViewer.vue
@@ -0,0 +1,1910 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/HotKeyInput.vue b/src/views/trials/trials-panel/reading/dicoms/components/HotKeyInput.vue
new file mode 100644
index 0000000..f176e80
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/HotKeyInput.vue
@@ -0,0 +1,284 @@
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Hotkeys.vue b/src/views/trials/trials-panel/reading/dicoms/components/Hotkeys.vue
new file mode 100644
index 0000000..c259ba6
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/Hotkeys.vue
@@ -0,0 +1,190 @@
+
+
+
+
+
+
+ {{ $fd('ShortcutKey',item.label) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionForm.vue
new file mode 100644
index 0000000..0a9cab7
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionForm.vue
@@ -0,0 +1,2248 @@
+
+
+
+
+
+ {{ lesionName }}
+ ({{ answers.FromMark }})
+
+
+
+
+
+
+
+
+
+ {lesionTypeChange(val)})"
+ >
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, qs)})"
+ >
+
+ {{ $fd('ValueUnit', parseInt(qs.Unit)) }}
+
+
+
+
+ {formItemChange(val, qs)})"
+ />
+
+ {formItemChange(val, qs)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionList.vue
new file mode 100644
index 0000000..02f5d82
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/IRecist/QuestionList.vue
@@ -0,0 +1,1212 @@
+
+
+
+
+
+ {{ subjectCode }}
+ {{ taskName }}
+
+
+
+
+
+
+
+
+
+ {{ language==='en'?qs.GroupEnName:qs.GroupName }}
+
+
+
+
+
+ {{ item.QuestionName }}
+ (请重新评估)
+
+
+ {{ item.QuestionName }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getLesionName(item.OrderMark,q.RowIndex) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.TableQuestions.Answers[i].lesionPart }}
+
+
+
+
+ {{ $fd('TargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NoTargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NewTargetLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NewNoTargetLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('OtherPreviousNewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NewLesionAfterTriggeringiRECSITState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+
+
+ {{ item.TableQuestions.Answers[i].lesionShort }}mm
+
+
+ {{ item.TableQuestions.Answers[i].lesionLength }}mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Manuals.vue b/src/views/trials/trials-panel/reading/dicoms/components/Manuals.vue
new file mode 100644
index 0000000..3cd5b59
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/Manuals.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+ {{ file.Name }}
+
+
+
+
+ {{ $t('trials:clinicaldara:title:nodata') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/NoneDicomsCanvas.vue b/src/views/trials/trials-panel/reading/dicoms/components/NoneDicomsCanvas.vue
new file mode 100644
index 0000000..90a9dd7
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/NoneDicomsCanvas.vue
@@ -0,0 +1,908 @@
+
+
+
+
+
+
+
+ {{ `${index+1} / ${urlList.length}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/NoneDicomsViewer.vue b/src/views/trials/trials-panel/reading/dicoms/components/NoneDicomsViewer.vue
new file mode 100644
index 0000000..eed4019
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/NoneDicomsViewer.vue
@@ -0,0 +1,352 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
![]()
+
+ {{ `${index+1}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Others.vue b/src/views/trials/trials-panel/reading/dicoms/components/Others.vue
new file mode 100644
index 0000000..7ea1812
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/Others.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/PCWG/QuestionForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/PCWG/QuestionForm.vue
new file mode 100644
index 0000000..f5b325c
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/PCWG/QuestionForm.vue
@@ -0,0 +1,916 @@
+
+
+
+
+
+
+
+ {{ lesionName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, qs)})"
+ >
+
+ {{ $fd('ValueUnit', parseInt(qs.Unit)) }}
+
+
+
+
+ {formItemChange(val, qs)})"
+ >
+
+ {{ $fd('ValueUnit', parseInt(qs.Unit)) }}
+
+
+
+
+
+ {formItemChange(val, qs)})"
+ />
+ {formItemChange(val, qs)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/PCWG/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms/components/PCWG/QuestionList.vue
new file mode 100644
index 0000000..1b183da
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/PCWG/QuestionList.vue
@@ -0,0 +1,771 @@
+
+
+
+
+
+ {{ subjectCode }}
+ {{ taskName }}
+
+
+
+
+
+
+
+
+
+ {{ language==='en'?qs.GroupEnName:qs.GroupName }}
+
+
+
+
+
{{ item.QuestionName }}
+
+
+
+
+
+
+
+
+ {{ getLesionName(item.OrderMark,q.RowIndex, qs.Childrens) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.TableQuestions.Answers[i].lesionPart }}
+
+
+ {{ $fd('EvaluationOfState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ item.TableQuestions.Answers[i].lesionType }}
+
+
+ {{ item.TableQuestions.Answers[i].lesionNum }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/QuestionItem.vue b/src/views/trials/trials-panel/reading/dicoms/components/QuestionItem.vue
new file mode 100644
index 0000000..a7f8e67
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/QuestionItem.vue
@@ -0,0 +1,371 @@
+
+
+
+
+
+ {{ language==='en'?question.GroupEnName:question.GroupName }}
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Questions.vue b/src/views/trials/trials-panel/reading/dicoms/components/Questions.vue
new file mode 100644
index 0000000..b0d40d0
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/Questions.vue
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue b/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue
new file mode 100644
index 0000000..bfcf5d3
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/ReadPage.vue
@@ -0,0 +1,685 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Recist/QuestionForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/Recist/QuestionForm.vue
new file mode 100644
index 0000000..a10146a
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/Recist/QuestionForm.vue
@@ -0,0 +1,1605 @@
+
+
+
+
+
+
+ {{ lesionName }}
+
+
+
+
+
+
+
+
+
+ {lesionTypeChange(val)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, qs)})"
+ >
+
+ {{ $fd('ValueUnit', parseInt(qs.Unit)) }}
+
+
+
+
+ {formItemChange(val, qs)})"
+ />
+
+
+
+ {formItemChange(val, qs)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/Recist/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms/components/Recist/QuestionList.vue
new file mode 100644
index 0000000..af6cb02
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/Recist/QuestionList.vue
@@ -0,0 +1,1093 @@
+
+
+
+
+
+ {{ subjectCode }}
+ {{ taskName }}
+
+
+
+
+
+
+
+
+
+ {{ language==='en'?qs.GroupEnName:qs.GroupName }}
+
+
+
+
+
{{ item.QuestionName }}
+
+
+
+
+
+
+
+
+
+
+ {{ getLesionName(item.OrderMark,q.RowIndex) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.TableQuestions.Answers[i].lesionPart }}
+
+
+
+
+ {{ $fd('TargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NoTargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+
+
+ {{ item.TableQuestions.Answers[i].lesionShort }}mm
+
+
+ {{ item.TableQuestions.Answers[i].lesionLength }}mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/RecistBM/QuestionForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/RecistBM/QuestionForm.vue
new file mode 100644
index 0000000..0397f60
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/RecistBM/QuestionForm.vue
@@ -0,0 +1,1219 @@
+
+
+
+
+
+ {{ lesionName }}
+
+
+
+
+
+
+
+
+
+ {lesionTypeChange(val)})"
+ >
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, qs)})"
+ >
+
+ {{ $fd('ValueUnit', parseInt(qs.Unit)) }}
+
+
+
+
+ {formItemChange(val, qs)})"
+ />
+
+
+ {formItemChange(val, qs)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/RecistBM/QuestionList.vue b/src/views/trials/trials-panel/reading/dicoms/components/RecistBM/QuestionList.vue
new file mode 100644
index 0000000..d09187c
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/RecistBM/QuestionList.vue
@@ -0,0 +1,1023 @@
+
+
+
+
+
+ {{ subjectCode }}
+ {{ taskName }}
+
+
+
+
+
+
+
+
+
+ {{ language==='en'?qs.GroupEnName:qs.GroupName }}
+
+
+
+
+
{{ item.QuestionName }}
+
+
+
+
+
+
+
+
+
+ {{ getLesionName(item.OrderMark,q.RowIndex) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.TableQuestions.Answers[i].lesionPart }}
+
+
+
+
+ {{ $fd('TargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NoTargetState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+ {{ $fd('NewLesionState',parseInt(item.TableQuestions.Answers[i].lesionState)) }}
+
+
+
+
+
+ {{ item.TableQuestions.Answers[i].lesionLength }}mm
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/ReportPage.vue b/src/views/trials/trials-panel/reading/dicoms/components/ReportPage.vue
new file mode 100644
index 0000000..4c98482
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/ReportPage.vue
@@ -0,0 +1,888 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.QuestionName }}
+
+ {{ language==='en'?scope.row.GroupEnName:scope.row.GroupName }}
+
+
+
+
+
+
+
+ {{ task.TaskName }}
+
+
+
+
+ {{ task.TaskName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingReport:message:msg6').replace('***', criterionName) }}{{ $fd('OverallAssessment',tumorEvaluate) }}{{ $t('trials:readingReport:message:msg7') }}{{ $fd('OverallAssessment',currentEvaluateResult) }}{{ $t('trials:readingReport:message:msg8') }}
+ {{ $t('trials:readingReport:title:sysEvaluationRes') }}{{ $fd('ExistDisease',isExistDisease) }}{{ $t('trials:readingReport:message:msg1') }}
+
+
+
+
+
+ {{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
+
+
+ {{ scope.row.Answers[task.VisitTaskId] }}
+
+
+
+
+
+ {{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
+
+ {{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
+
+
+
+
+ {{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
+
+ {{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
+
+
+ {{ scope.row.Answers[task.VisitTaskId] === '-1' ? $t('trials:readingReport:title:unknow') : scope.row.Answers[task.VisitTaskId] }}
+
+
+
+ {{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
+
+
+ {{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId]))?scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]}` }}
+
+
+ {{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId]))?scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]} ${$fd('ValueUnit',scope.row.Unit)}` }}
+
+
+ {{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId]))?scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]}%` }}
+
+
+ {{ scope.row.Answers[task.VisitTaskId] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue b/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue
new file mode 100644
index 0000000..0358f76
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/StudyList.vue
@@ -0,0 +1,844 @@
+
+
+
+ {{ subjectCode }}
+
+
+ {{ taskName }}
+
+
+
+
+
+
+
+ {{ $t('trials:reading:title:keySeries') }}
+
+
+
+
+
+
+
+
+
![]()
+
+
+
#{{ series.seriesNumber }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ series.description }}
+
+
+
+ T: {{ series.sliceThickness }}
+
+
+ {{ series.modality }}: {{ series.instanceCount }} image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/WL.vue b/src/views/trials/trials-panel/reading/dicoms/components/WL.vue
new file mode 100644
index 0000000..1a5b642
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/WL.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+ {{ $t('common:button:edit') }}
+
+ {{ $t('common:button:delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/components/WLForm.vue b/src/views/trials/trials-panel/reading/dicoms/components/WLForm.vue
new file mode 100644
index 0000000..25e97ad
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/components/WLForm.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize 2.zip b/src/views/trials/trials-panel/reading/dicoms/customize 2.zip
new file mode 100644
index 0000000..670bff8
Binary files /dev/null and b/src/views/trials/trials-panel/reading/dicoms/customize 2.zip differ
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize.zip b/src/views/trials/trials-panel/reading/dicoms/customize.zip
new file mode 100644
index 0000000..73b363d
Binary files /dev/null and b/src/views/trials/trials-panel/reading/dicoms/customize.zip differ
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomWwwcForm.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomWwwcForm.vue
new file mode 100644
index 0000000..a995b07
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomWwwcForm.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue
new file mode 100644
index 0000000..b4d6b85
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomCanvas.vue
@@ -0,0 +1,2108 @@
+
+
+
+
+
+
+
+
+ {{ stack.taskBlindName }}
+
+
+
+
+
+
+
{{ subjectCode }} {{ stack.taskBlindName }}
+
Series: #{{ dicomInfo.series }}
+
Image: #{{ dicomInfo.frame }}
+
{{ dicomInfo.modality }}
+
+
+
+ Pos: {{ mousePosition.x?mousePosition.x.toFixed(0):'' }}, {{ mousePosition.y?mousePosition.y.toFixed(0):'' }}
+
+
+ HU: {{ mousePosition.mo }}
+
+
+ SUVbw(g/ml): {{ digitPlaces === -1 ?mousePosition.suv.toFixed(3) :mousePosition.suv.toFixed(digitPlaces) }}
+
+
+ Density: {{ mousePosition.mo }}
+
+
+ W*H: {{ dicomInfo.size }}
+
+
+
+
Zoom: {{ dicomInfo.zoom }}
+
+
+
+
+
+
{{ stack.description }}
+
+
+
+
+
+
+
+
+
+ {{ markers.top }}
+
+
+ {{ markers.right }}
+
+
+
+ {{ markers.bottom }}
+
+
+ {{ markers.left }}
+
+
+
+
Location: {{ dicomInfo.location }}
+
Slice Thickness: {{ dicomInfo.thick }}mm
+
WW/WL: {{ dicomInfo.wwwc }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomPreview.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomPreview.vue
new file mode 100644
index 0000000..62d67a8
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomPreview.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomViewer.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomViewer.vue
new file mode 100644
index 0000000..8892b93
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeDicomViewer.vue
@@ -0,0 +1,1779 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeMeasurementList.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeMeasurementList.vue
new file mode 100644
index 0000000..9d46922
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeMeasurementList.vue
@@ -0,0 +1,411 @@
+
+
+
+
+
+ {{ subjectCode }}
+ {{ taskBlindName }}
+
+
+
+
+
+
+ {{$t('common:button:save')}}
+
+
+ {{ $t('common:button:submit') }}
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeNoneDicomsCanvas.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeNoneDicomsCanvas.vue
new file mode 100644
index 0000000..0decfd8
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeNoneDicomsCanvas.vue
@@ -0,0 +1,899 @@
+
+
+
+
+
+
+
+ {{ `${index+1} / ${urlList.length}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeNoneDicomsViewer.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeNoneDicomsViewer.vue
new file mode 100644
index 0000000..8a62bf9
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeNoneDicomsViewer.vue
@@ -0,0 +1,352 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 暂无数据
+
+
+
+
![]()
+
+ {{ `${index+1}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionFormItem.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionFormItem.vue
new file mode 100644
index 0000000..b786669
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionFormItem.vue
@@ -0,0 +1,813 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionItem.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionItem.vue
new file mode 100644
index 0000000..881b083
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionItem.vue
@@ -0,0 +1,339 @@
+
+
+
+
+
+ {{ question.GroupName }}
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+ {{ val }}
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionTableFormItem.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionTableFormItem.vue
new file mode 100644
index 0000000..ae0a788
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionTableFormItem.vue
@@ -0,0 +1,420 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionsPreview.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionsPreview.vue
new file mode 100644
index 0000000..cd6aa01
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeQuestionsPreview.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReadPage.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReadPage.vue
new file mode 100644
index 0000000..4834f4a
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReadPage.vue
@@ -0,0 +1,726 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReportPage.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReportPage.vue
new file mode 100644
index 0000000..2415593
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReportPage.vue
@@ -0,0 +1,910 @@
+
+
+
+
+
+
+
+
+ {{ scope.row.BlindName ? scope.row.QuestionName : scope.row.QuestionName }}
+
+ {{ scope.row.GroupName }}
+
+
+
+
+
+
+ {{ task.BlindName }}
+
+
+
+ {{ task.BlindName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}}
+
+
+
+ {{questionForm[scope.row.QuestionId]}}
+
+
+
+
+
+
+
+ {{questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]}}
+
+
+
+
+
+
+
+ {{questionForm[scope.row.QuestionId]}}
+
+ {questionId = scope.row.QuestionId}"
+ >
+ {{scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}}
+ %
+
+
+
+ {{ isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]))? questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]:`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]} ${scope.row.Unit !== 4 ? $fd('ValueUnit',scope.row.Unit) : scope.row.CustomUnit}` }}
+
+
+ {{ isNaN(parseInt(questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId])) ? questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]:`${questionForm[scope.row.QuestionId][scope.row.xfIndex][scope.row.TableQuestionId]} %` }}
+
+
+ {questionId = scope.row.QuestionId}"
+ >
+ {{scope.row.Unit !== 4 ? $fd('ValueUnit', scope.row.Unit) : scope.row.CustomUnit}}
+ %
+
+
+
+ {{ isNaN(parseInt(questionForm[scope.row.QuestionId]))? questionForm[scope.row.QuestionId]:`${questionForm[scope.row.QuestionId]} ${scope.row.Unit !== 4 ? $fd('ValueUnit',scope.row.Unit) : scope.row.CustomUnit}` }}
+
+
+ {{ isNaN(parseInt(questionForm[scope.row.QuestionId])) ? questionForm[scope.row.QuestionId]:`${questionForm[scope.row.QuestionId]} %` }}
+
+
+
+
+
+
+ {setImageUrl(scope.row.QuestionId, scope.row.xfIndex, scope.row.TableQuestionId, url, scope.row.RowId)}"
+ >
+ {setImageUrl(scope.row.QuestionId, scope.row.xfIndex, scope.row.TableQuestionId, url)}"
+ >
+
+
+
+
+
+
+ {{ scope.row.Answers[task.VisitTaskId] === '-1' ? '未知' : scope.row.Answers[task.VisitTaskId] }}
+
+
+ {{ $fd(scope.row.DictionaryCode, scope.row.Answers[task.VisitTaskId]) }}
+
+
+ {{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId]))?scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]}` }}
+
+
+
+
+ {{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId]))?scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]} ${scope.row.Unit !== 4 ? $fd('ValueUnit',scope.row.Unit) : scope.row.CustomUnit}` }}
+
+
+ {{ isNaN(parseInt(scope.row.Answers[task.VisitTaskId])) ? scope.row.Answers[task.VisitTaskId]:`${scope.row.Answers[task.VisitTaskId]} %` }}
+
+
+ {{ scope.row.Answers[task.VisitTaskId] }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReportPageUpload.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReportPageUpload.vue
new file mode 100644
index 0000000..c439ca3
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeReportPageUpload.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue
new file mode 100644
index 0000000..6f831e2
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/CustomizeStudyList.vue
@@ -0,0 +1,835 @@
+
+
+
+ {{ subjectCode }}
+
+
+ {{ taskBlindName }}
+
+
+
+
+
+
+
+ {{ $t('trials:reading:title:keySeries') }}
+
+
+
+
+
+
+
+
+
+
+
#{{ series.seriesNumber }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ series.description }}
+
+
+
+
+ T: {{ series.sliceThickness }}
+
+
+ {{ series.modality }}: {{ series.instanceCount }} image
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/HotKeyInput.vue b/src/views/trials/trials-panel/reading/dicoms/customize/HotKeyInput.vue
new file mode 100644
index 0000000..f176e80
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/HotKeyInput.vue
@@ -0,0 +1,284 @@
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/Hotkeys.vue b/src/views/trials/trials-panel/reading/dicoms/customize/Hotkeys.vue
new file mode 100644
index 0000000..d7f6894
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/Hotkeys.vue
@@ -0,0 +1,156 @@
+
+
+
+
+
+
+ {{ $fd('ShortcutKey',item.label) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/Manuals.vue b/src/views/trials/trials-panel/reading/dicoms/customize/Manuals.vue
new file mode 100644
index 0000000..3cd5b59
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/Manuals.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+ {{ file.Name }}
+
+
+
+
+ {{ $t('trials:clinicaldara:title:nodata') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/Others.vue b/src/views/trials/trials-panel/reading/dicoms/customize/Others.vue
new file mode 100644
index 0000000..0f94ca1
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/Others.vue
@@ -0,0 +1,66 @@
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/WL.vue b/src/views/trials/trials-panel/reading/dicoms/customize/WL.vue
new file mode 100644
index 0000000..f337227
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/WL.vue
@@ -0,0 +1,149 @@
+
+
+
+
+
+
+
+
+
+
+ Add
+
+
+ Edit
+ Delete
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/customize/WLForm.vue b/src/views/trials/trials-panel/reading/dicoms/customize/WLForm.vue
new file mode 100644
index 0000000..234abb8
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/customize/WLForm.vue
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/index.vue b/src/views/trials/trials-panel/reading/dicoms/index.vue
new file mode 100644
index 0000000..178c6f9
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/index.vue
@@ -0,0 +1,667 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/none-dicoms.vue b/src/views/trials/trials-panel/reading/dicoms/none-dicoms.vue
new file mode 100644
index 0000000..8706b3a
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/none-dicoms.vue
@@ -0,0 +1,294 @@
+
+
+
+
+ {{ otherInfo.SubjectCode }}
+ ({{ otherInfo.TaskBlindName }})
+
+
+
+
+
+ {{ study.CodeView }}
+ {{ study.Modality }}
+ {{ getBodyPart(study.BodyPart) }}
+
+
+
+ 暂无数据
+
+
+
+ {{ `${j+1}. ${item.FileName}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/ArrowAnnotate/ArrowAnnotateTool.js b/src/views/trials/trials-panel/reading/dicoms/tools/ArrowAnnotate/ArrowAnnotateTool.js
new file mode 100644
index 0000000..4e2ac94
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/ArrowAnnotate/ArrowAnnotateTool.js
@@ -0,0 +1,410 @@
+/* eslint no-alert: 0 */
+import * as cornerstoneTools from 'cornerstone-tools'
+const external = cornerstoneTools.external
+const EVENTS = cornerstoneTools.EVENTS
+
+const toolStyle = cornerstoneTools.toolStyle
+const textStyle = cornerstoneTools.textStyle
+const toolColors = cornerstoneTools.toolColors
+
+const pointInsideBoundingBox = cornerstoneTools.import('util/pointInsideBoundingBox')
+const lineSegDistance = cornerstoneTools.import('util/lineSegDistance')
+const triggerEvent = cornerstoneTools.import('util/triggerEvent')
+const moveNewHandle = cornerstoneTools.import('manipulators/moveNewHandle')
+
+const addToolState = cornerstoneTools.addToolState
+const getToolState = cornerstoneTools.getToolState
+const removeToolState = cornerstoneTools.removeToolState
+
+// Drawing
+const drawLinkedTextBox = cornerstoneTools.import('drawing/drawLinkedTextBox')
+const getNewContext = cornerstoneTools.import('drawing/getNewContext')
+const draw = cornerstoneTools.import('drawing/draw')
+// import textBoxWidth from './textBoxWidth'
+const setShadow = cornerstoneTools.import('drawing/setShadow')
+const drawArrow = cornerstoneTools.import('drawing/drawArrow')
+const drawHandles = cornerstoneTools.import('drawing/drawHandles')
+const { arrowAnnotateCursor } = cornerstoneTools.import('tools/cursors')
+const getModule = cornerstoneTools.getModule
+
+/**
+ * @public
+ * @class ArrowAnnotateTool
+ * @memberof Tools.Annotation
+ * @classdesc Create and position an arrow and label
+ * @extends Tools.Base.BaseAnnotationTool
+ */
+export default class ArrowAnnotateTool extends cornerstoneTools.ArrowAnnotateTool {
+ constructor(props = {}) {
+ const defaultProps = {
+ name: 'ArrowAnnotate',
+ supportedInteractionTypes: ['Mouse', 'Touch'],
+ configuration: {
+ getTextCallback,
+ changeTextCallback,
+ drawHandles: false,
+ drawHandlesOnHover: true,
+ hideHandlesIfMoving: false,
+ arrowFirst: true,
+ renderDashed: false,
+ allowEmptyLabel: false
+ },
+ svgCursor: arrowAnnotateCursor
+ }
+
+ super(props, defaultProps)
+ this.preventNewMeasurement = false
+ }
+ textBoxWidth(context, text, padding) {
+ const font = textStyle.getFont()
+ const origFont = context.font
+
+ if (font && font !== origFont) {
+ context.font = font
+ }
+ const width = context.measureText(text).width
+
+ if (font && font !== origFont) {
+ context.font = origFont
+ }
+
+ return width + 2 * padding
+ }
+
+ createNewMeasurement(evt) {
+ // Create the measurement data for this tool with the end handle activated
+ return {
+ visible: true,
+ active: true,
+ color: undefined,
+ text: '',
+ handles: {
+ start: {
+ x: evt.detail.currentPoints.image.x,
+ y: evt.detail.currentPoints.image.y,
+ highlight: true,
+ active: false
+ },
+ end: {
+ x: evt.detail.currentPoints.image.x,
+ y: evt.detail.currentPoints.image.y,
+ highlight: true,
+ active: false
+ },
+ textBox: {
+ active: false,
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ }
+ }
+ }
+
+ pointNearTool(element, data, coords) {
+ if (data.visible === false) {
+ return false
+ }
+
+ return (
+ lineSegDistance(element, data.handles.start, data.handles.end, coords) <
+ 25
+ )
+ }
+
+ updateCachedStats() {
+ // Implementing to satisfy BaseAnnotationTool
+ }
+
+ renderToolData(evt) {
+ const { element, enabledElement } = evt.detail
+ const {
+ handleRadius,
+ drawHandlesOnHover,
+ hideHandlesIfMoving,
+ renderDashed
+ } = this.configuration
+
+ // If we have no toolData for this element, return immediately as there is nothing to do
+ const toolData = getToolState(element, this.name)
+
+ if (!toolData) {
+ return
+ }
+
+ // We have tool data for this element - iterate over each one and draw it
+ const canvas = evt.detail.canvasContext.canvas
+ const context = getNewContext(canvas)
+
+ const lineWidth = toolStyle.getToolWidth()
+
+ let lineDash
+
+ if (renderDashed) {
+ lineDash = getModule('globalConfiguration').configuration.lineDash
+ }
+
+ for (let i = 0; i < toolData.data.length; i++) {
+ const data = toolData.data[i]
+
+ if (data.visible === false) {
+ continue
+ }
+
+ draw(context, context => {
+ setShadow(context, this.configuration)
+
+ const color = toolColors.getColorIfActive(data)
+
+ // Draw the arrow
+ const handleStartCanvas = external.cornerstone.pixelToCanvas(
+ element,
+ data.handles.start
+ )
+ const handleEndCanvas = external.cornerstone.pixelToCanvas(
+ element,
+ data.handles.end
+ )
+
+ // Config.arrowFirst = false;
+ if (this.configuration.arrowFirst) {
+ drawArrow(
+ context,
+ handleEndCanvas,
+ handleStartCanvas,
+ color,
+ lineWidth,
+ lineDash
+ )
+ } else {
+ drawArrow(
+ context,
+ handleStartCanvas,
+ handleEndCanvas,
+ color,
+ lineWidth,
+ lineDash
+ )
+ }
+
+ const handleOptions = {
+ color,
+ handleRadius,
+ drawHandlesIfActive: drawHandlesOnHover,
+ hideHandlesIfMoving
+ }
+ if (this.configuration.drawHandles) {
+ drawHandles(context, evt.detail, data.handles, handleOptions)
+ }
+ const text = []
+
+ if (data.hasOwnProperty('remark')) {
+ if (data.hasOwnProperty('status') && data.status) {
+ text.push(`${data.remark}(${data.status})`)
+ } else {
+ text.push(data.remark)
+ }
+ }
+
+ text.push(textBoxText(data))
+
+ // Draw the text
+ if (text && text !== '') {
+ // Calculate the text coordinates.
+ const padding = 5
+ const textWidth = this.textBoxWidth(context, text, padding)
+ const textHeight = textStyle.getFontSize() + 10
+
+ let distance = Math.max(textWidth, textHeight) / 2 + 5
+
+ if (handleEndCanvas.x < handleStartCanvas.x) {
+ distance = -distance
+ }
+
+ if (!data.handles.textBox.hasMoved) {
+ let textCoords
+
+ if (this.configuration.arrowFirst) {
+ textCoords = {
+ x: handleEndCanvas.x - textWidth / 2 + distance,
+ y: handleEndCanvas.y - textHeight / 2
+ }
+ } else {
+ // If the arrow is at the End position, the text should
+ // Be placed near the Start position
+ textCoords = {
+ x: handleStartCanvas.x - textWidth / 2 - distance,
+ y: handleStartCanvas.y - textHeight / 2
+ }
+ }
+
+ const transform = external.cornerstone.internal.getTransform(
+ enabledElement
+ )
+
+ transform.invert()
+
+ const coords = transform.transformPoint(textCoords.x, textCoords.y)
+
+ data.handles.textBox.x = coords.x
+ data.handles.textBox.y = coords.y
+ }
+
+ drawLinkedTextBox(
+ context,
+ element,
+ data.handles.textBox,
+ text,
+ data.handles,
+ textBoxAnchorPoints,
+ color,
+ lineWidth,
+ 0,
+ false
+ )
+ }
+ })
+ }
+
+ function textBoxText(data) {
+ return data.text
+ }
+
+ function textBoxAnchorPoints(handles) {
+ const midpoint = {
+ x: (handles.start.x + handles.end.x) / 2,
+ y: (handles.start.y + handles.end.y) / 2
+ }
+
+ return [handles.start, midpoint, handles.end]
+ }
+ }
+
+ addNewMeasurement(evt, interactionType) {
+ const element = evt.detail.element
+ const measurementData = this.createNewMeasurement(evt)
+
+ const { allowEmptyLabel } = this.configuration
+
+ // Associate this data with this imageId so we can render it and manipulate it
+ addToolState(element, this.name, measurementData)
+ external.cornerstone.updateImage(element)
+
+ moveNewHandle(
+ evt.detail,
+ this.name,
+ measurementData,
+ measurementData.handles.end,
+ this.options,
+ interactionType,
+ success => {
+ if (success) {
+ if (!allowEmptyLabel && measurementData.text === undefined) {
+ this.configuration.getTextCallback(text => {
+ if (text || allowEmptyLabel) {
+ measurementData.text = text
+ measurementData.active = false
+
+ const modifiedEventData = {
+ toolName: this.name,
+ toolType: this.name, // Deprecation notice: toolType will be replaced by toolName
+ element,
+ measurementData
+ }
+
+ external.cornerstone.updateImage(element)
+ triggerEvent(
+ element,
+ EVENTS.MEASUREMENT_COMPLETED,
+ modifiedEventData
+ )
+ } else {
+ removeToolState(element, this.name, measurementData)
+ }
+ }, evt.detail)
+ }
+ } else {
+ removeToolState(element, this.name, measurementData)
+ }
+ triggerEvent(element, EVENTS.MEASUREMENT_COMPLETED, {
+ toolName: this.name,
+ toolType: this.name, // Deprecation notice: toolType will be replaced by toolName
+ element,
+ measurementData
+ })
+ external.cornerstone.updateImage(element)
+ }
+ )
+ }
+
+ doubleClickCallback(evt) {
+ return this._updateTextForNearbyAnnotation(evt)
+ }
+
+ touchPressCallback(evt) {
+ return this._updateTextForNearbyAnnotation(evt)
+ }
+
+ _updateTextForNearbyAnnotation(evt) {
+ const element = evt.detail.element
+ const coords = evt.detail.currentPoints.canvas
+ const toolState = getToolState(element, this.name)
+
+ if (!toolState) {
+ return false
+ }
+
+ for (let i = 0; i < toolState.data.length; i++) {
+ const data = toolState.data[i]
+
+ if (
+ this.pointNearTool(element, data, coords) ||
+ pointInsideBoundingBox(data.handles.textBox, coords)
+ ) {
+ data.active = true
+ external.cornerstone.updateImage(element)
+
+ // Allow relabelling via a callback
+ this.configuration.changeTextCallback(
+ data,
+ evt.detail,
+ this._doneChangingTextCallback.bind(this, element, data)
+ )
+
+ evt.stopImmediatePropagation()
+ evt.preventDefault()
+ evt.stopPropagation()
+
+ return true
+ }
+ }
+ }
+
+ _doneChangingTextCallback(element, measurementData, updatedText, deleteTool) {
+ if (deleteTool === true) {
+ removeToolState(element, this.name, measurementData)
+ } else {
+ measurementData.text = updatedText
+ }
+
+ measurementData.active = false
+ external.cornerstone.updateImage(element)
+
+ triggerEvent(element, EVENTS.MEASUREMENT_MODIFIED, {
+ toolName: this.name,
+ toolType: this.name, // Deprecation notice: toolType will be replaced by toolName
+ element,
+ measurementData
+ })
+ }
+}
+
+function getTextCallback(doneChangingTextCallback) {
+ doneChangingTextCallback(prompt('Enter your annotation:'))
+}
+
+function changeTextCallback(data, eventData, doneChangingTextCallback) {
+ doneChangingTextCallback(prompt('Change your annotation:'))
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/BidirectionalTool.js b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/BidirectionalTool.js
new file mode 100644
index 0000000..1b00c13
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/BidirectionalTool.js
@@ -0,0 +1,49 @@
+import * as cornerstoneTools from 'cornerstone-tools'
+
+import renderToolData from './renderToolData'
+// import getPixelSpacing from './getPixelSpacing'
+import calculateLongestAndShortestDiameters from './calculateLongestAndShortestDiameters'
+const throttle = cornerstoneTools.import('util/throttle')
+import createNewMeasurement from './createNewMeasurement'
+/**
+ * @public
+ * @class BidirectionalTool
+ * @memberof Tools.Annotation
+ * @classdesc Create and position an annotation that measures the
+ * length and width of a region.
+ * @extends Tools.Base.BaseAnnotationTool
+ */
+
+export default class BidirectionalTool extends cornerstoneTools.BidirectionalTool {
+ constructor(props) {
+ const defaultProps = {
+ name: 'Bidirectional',
+ configuration: {
+ drawHandles: false
+ }
+ }
+
+ super(props, defaultProps)
+ this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 50)
+ this.digits = isNaN(parseInt(props.configuration.digits)) ? 2 : props.configuration.digits
+ this.createNewMeasurement = createNewMeasurement.bind(this)
+ this.renderToolData = renderToolData.bind(this)
+ }
+
+ updateCachedStats(image, element, data) {
+ // Prevent updating other tools' data
+ if (data.toolName !== this.name) {
+ return
+ }
+ // const pixelSpacing = getPixelSpacing(image)
+ const {
+ longestDiameter,
+ shortestDiameter
+ } = calculateLongestAndShortestDiameters(data, image, this.digits)
+
+ // Set measurement text to show lesion table
+ data.longestDiameter = longestDiameter
+ data.shortestDiameter = shortestDiameter
+ data.invalidated = false
+ }
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/calculateLongestAndShortestDiameters.js b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/calculateLongestAndShortestDiameters.js
new file mode 100644
index 0000000..a530b88
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/calculateLongestAndShortestDiameters.js
@@ -0,0 +1,52 @@
+import getPixelSpacing from './getPixelSpacing'
+/**
+ * Calculates longest and shortest diameters using measurement handles and pixelSpacing
+ * @param {Object} measurementData
+ * @param {Object} pixelSpacing pixelSpacing
+ *
+ *@returns {Object} longestDiameter and shortestDiameter
+ */
+export default function calculateLongestAndShortestDiameters(
+ measurementData,
+ image,
+ digits = 1
+) {
+ const pixelSpacing = getPixelSpacing(image)
+ const { rowPixelSpacing, colPixelSpacing } = pixelSpacing
+ const {
+ start,
+ end,
+ perpendicularStart,
+ perpendicularEnd
+ } = measurementData.handles
+
+ // Calculate the long axis length
+ const dx = (start.x - end.x) * (colPixelSpacing || 1)
+ const dy = (start.y - end.y) * (rowPixelSpacing || 1)
+ let length = Math.sqrt(dx * dx + dy * dy)
+
+ // Calculate the short axis length
+ const wx =
+ (perpendicularStart.x - perpendicularEnd.x) * (colPixelSpacing || 1)
+ const wy =
+ (perpendicularStart.y - perpendicularEnd.y) * (rowPixelSpacing || 1)
+ let width = Math.sqrt(wx * wx + wy * wy)
+
+ if (!width) {
+ width = 0
+ }
+
+ // Length is always longer than width
+ if (width > length) {
+ const tempW = width
+ const tempL = length
+
+ length = tempW
+ width = tempL
+ }
+
+ return {
+ longestDiameter: length.toFixed(digits),
+ shortestDiameter: width.toFixed(digits)
+ }
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/createNewMeasurement.js b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/createNewMeasurement.js
new file mode 100644
index 0000000..62c0dae
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/createNewMeasurement.js
@@ -0,0 +1,45 @@
+const getHandle = (x, y, index, extraAttributes = {}) =>
+ Object.assign(
+ {
+ x,
+ y,
+ index,
+ drawnIndependently: false,
+ allowedOutsideImage: false,
+ highlight: true,
+ active: false
+ },
+ extraAttributes
+ )
+
+export default function(mouseEventData) {
+ const { x, y } = mouseEventData.currentPoints.image
+ // Create the measurement data for this tool with the end handle activated
+ const measurementData = {
+ toolName: this.name,
+ toolType: this.name, // Deprecation notice: toolType will be replaced by toolName
+ isCreating: true,
+ visible: true,
+ active: true,
+ invalidated: true,
+ handles: {
+ start: getHandle(x, y, 0),
+ end: getHandle(x, y, 1, { active: true }),
+ perpendicularStart: getHandle(x, y, 2, { locked: true }),
+ perpendicularEnd: getHandle(x, y, 3),
+ textBox: getHandle(x - 35, y - 55, null, {
+ highlight: false,
+ hasMoved: true,
+ active: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ })
+ },
+ longestDiameter: 0,
+ shortestDiameter: 0
+ }
+
+ return measurementData
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/getLineVector.js b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/getLineVector.js
new file mode 100644
index 0000000..4824fbf
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/getLineVector.js
@@ -0,0 +1,28 @@
+/**
+ * Return the Vector of a line which determines its inclination and length
+ *
+ * @param {number} columnPixelSpacing Width that a pixel represents in mm
+ * @param {number} rowPixelSpacing Height that a pixel represents in mm
+ * @param {*} startPoint Start point of the line
+ * @param {*} endPoint End point of the line
+ *
+ * @returns {*} Resulting line inclination vector
+ */
+export default function getLineVector(
+ columnPixelSpacing,
+ rowPixelSpacing,
+ startPoint,
+ endPoint
+) {
+ const dx = (startPoint.x - endPoint.x) * columnPixelSpacing
+ const dy = (startPoint.y - endPoint.y) * rowPixelSpacing
+ const length = Math.sqrt(dx * dx + dy * dy)
+ const vectorX = dx / length
+ const vectorY = dy / length
+
+ return {
+ x: vectorX,
+ y: vectorY,
+ length
+ }
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/getPixelSpacing.js b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/getPixelSpacing.js
new file mode 100644
index 0000000..dfa2a4b
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/getPixelSpacing.js
@@ -0,0 +1,23 @@
+import * as cornerstoneTools from 'cornerstone-tools'
+const external = cornerstoneTools.external
+
+export default function getPixelSpacing(image) {
+ const imagePlane = external.cornerstone.metaData.get(
+ 'imagePlaneModule',
+ image.imageId
+ )
+
+ if (imagePlane) {
+ return {
+ rowPixelSpacing:
+ imagePlane.rowPixelSpacing || imagePlane.rowImagePixelSpacing,
+ colPixelSpacing:
+ imagePlane.columnPixelSpacing || imagePlane.colImagePixelSpacing
+ }
+ }
+
+ return {
+ rowPixelSpacing: image.rowPixelSpacing,
+ colPixelSpacing: image.columnPixelSpacing
+ }
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/renderToolData.js b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/renderToolData.js
new file mode 100644
index 0000000..5bbe558
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/renderToolData.js
@@ -0,0 +1,168 @@
+/* eslint no-loop-func: 0 */ // --> OFF
+import * as cornerstoneTools from 'cornerstone-tools'
+const getPixelSpacing = cornerstoneTools.import('util/getPixelSpacing')
+import updatePerpendicularLineHandles from './updatePerpendicularLineHandles'
+const getModule = cornerstoneTools.getModule
+const getToolState = cornerstoneTools.getToolState
+const toolStyle = cornerstoneTools.toolStyle
+const toolColors = cornerstoneTools.toolColors
+const getNewContext = cornerstoneTools.import('drawing/getNewContext')
+const draw = cornerstoneTools.import('drawing/draw')
+const setShadow = cornerstoneTools.import('drawing/setShadow')
+const drawLine = cornerstoneTools.import('drawing/drawLine')
+const drawLinkedTextBox = cornerstoneTools.import('drawing/drawLinkedTextBox')
+const drawHandles = cornerstoneTools.import('drawing/drawHandles')
+
+export default function(evt) {
+ const eventData = evt.detail
+ const { element, canvasContext, image } = eventData
+ const {
+ handleRadius,
+ drawHandlesOnHover,
+ hideHandlesIfMoving,
+ renderDashed
+ } = this.configuration
+
+ const lineDash = getModule('globalConfiguration').configuration.lineDash
+
+ // If we have no toolData for this element, return immediately as there is nothing to do
+ const toolData = getToolState(element, this.name)
+
+ if (!toolData) {
+ return
+ }
+
+ const { rowPixelSpacing, colPixelSpacing } = getPixelSpacing(image)
+
+ // LT-29 Disable Target Measurements when pixel spacing is not available
+ if (!rowPixelSpacing || !colPixelSpacing) {
+ return
+ }
+
+ // We have tool data for this element - iterate over each one and draw it
+ const context = getNewContext(canvasContext.canvas)
+
+ let color
+ const lineWidth = toolStyle.getToolWidth()
+
+ for (let i = 0; i < toolData.data.length; i++) {
+ const data = toolData.data[i]
+
+ if (data.visible === false) {
+ continue
+ }
+
+ color = toolColors.getColorIfActive(data)
+
+ // Calculate the data measurements
+ if (data.invalidated === true) {
+ if (data.longestDiameter && data.shortestDiameter) {
+ this.throttledUpdateCachedStats(image, element, data)
+ } else {
+ this.updateCachedStats(image, element, data)
+ }
+ }
+
+ draw(context, context => {
+ // Configurable shadow
+ setShadow(context, this.configuration)
+
+ const {
+ start,
+ end,
+ perpendicularStart,
+ perpendicularEnd,
+ textBox
+ } = data.handles
+
+ const lineOptions = { color }
+ const perpendicularLineOptions = { color, strokeWidth }
+
+ if (renderDashed) {
+ lineOptions.lineDash = lineDash
+ perpendicularLineOptions.lineDash = lineDash
+ }
+
+ // Draw the measurement line
+ drawLine(context, element, start, end, lineOptions)
+
+ // Draw perpendicular line
+ const strokeWidth = lineWidth
+
+ updatePerpendicularLineHandles(eventData, data)
+
+ drawLine(
+ context,
+ element,
+ perpendicularStart,
+ perpendicularEnd,
+ perpendicularLineOptions
+ )
+
+ // Draw the handles
+ const handleOptions = {
+ color,
+ handleRadius,
+ drawHandlesIfActive: drawHandlesOnHover,
+ hideHandlesIfMoving
+ }
+
+ // Draw the handles
+ if (this.configuration.drawHandles) {
+ drawHandles(context, eventData, data.handles, handleOptions)
+ }
+
+ // Draw the textbox
+ // Move the textbox slightly to the right and upwards
+ // So that it sits beside the length tool handle
+ const xOffset = 10
+ const textBoxAnchorPoints = handles => [
+ handles.start,
+ handles.end,
+ handles.perpendicularStart,
+ handles.perpendicularEnd
+ ]
+
+ const textLines = getTextBoxText(data, rowPixelSpacing, colPixelSpacing)
+ if (data.hasOwnProperty('remark')) {
+ if (data.hasOwnProperty('status') && data.status) {
+ textLines.unshift(`${data.remark}(${data.status})`)
+ } else {
+ textLines.unshift(data.remark)
+ }
+ }
+
+ drawLinkedTextBox(
+ context,
+ element,
+ textBox,
+ textLines,
+ data.handles,
+ textBoxAnchorPoints,
+ color,
+ lineWidth,
+ xOffset,
+ true
+ )
+ })
+ }
+}
+
+const getTextBoxText = (data, rowPixelSpacing, colPixelSpacing) => {
+ let suffix = ' mm'
+
+ if (!rowPixelSpacing || !colPixelSpacing) {
+ suffix = ' pixels'
+ }
+
+ const lengthText = ` L ${data.longestDiameter}${suffix}`
+ const widthText = ` W ${data.shortestDiameter}${suffix}`
+
+ const { labels } = data
+
+ if (labels && Array.isArray(labels)) {
+ return [...labels, lengthText, widthText]
+ }
+
+ return [lengthText, widthText]
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/updatePerpendicularLineHandles.js b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/updatePerpendicularLineHandles.js
new file mode 100644
index 0000000..c805eb7
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/Bidirectional/updatePerpendicularLineHandles.js
@@ -0,0 +1,62 @@
+import getLineVector from './getLineVector'
+
+/**
+ * Update the perpendicular line handles when the measurement is being created.
+ * This method will make the perpendicular line intersect in the middle of the
+ * long line and assume half the size of the long line.
+ *
+ * @param {*} eventData Data object associated with the event
+ * @param {*} measurementData Data from current bidirectional tool measurement
+ *
+ * @returns {boolean} False in case the handle is not locked or true when moved
+ */
+export default function updatePerpendicularLineHandles(
+ eventData,
+ measurementData
+) {
+ if (!measurementData.handles.perpendicularStart.locked) {
+ return false
+ }
+
+ let startX, startY, endX, endY
+
+ const { start, end } = measurementData.handles
+ const { columnPixelSpacing = 1, rowPixelSpacing = 1 } = eventData.image
+
+ if (start.x === end.x && start.y === end.y) {
+ startX = start.x
+ startY = start.y
+ endX = end.x
+ endY = end.y
+ } else {
+ // Mid point of long-axis line
+ const mid = {
+ x: (start.x + end.x) / 2,
+ y: (start.y + end.y) / 2
+ }
+
+ // Inclination of the perpendicular line
+ const vector = getLineVector(
+ columnPixelSpacing,
+ rowPixelSpacing,
+ start,
+ end
+ )
+
+ const perpendicularLineLength = vector.length / 2
+ const rowMultiplier = perpendicularLineLength / (2 * rowPixelSpacing)
+ const columnMultiplier = perpendicularLineLength / (2 * columnPixelSpacing)
+
+ startX = mid.x + columnMultiplier * vector.y
+ startY = mid.y - rowMultiplier * vector.x
+ endX = mid.x - columnMultiplier * vector.y
+ endY = mid.y + rowMultiplier * vector.x
+ }
+
+ measurementData.handles.perpendicularStart.x = startX
+ measurementData.handles.perpendicularStart.y = startY
+ measurementData.handles.perpendicularEnd.x = endX
+ measurementData.handles.perpendicularEnd.y = endY
+
+ return true
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/Length/LengthTool.js b/src/views/trials/trials-panel/reading/dicoms/tools/Length/LengthTool.js
new file mode 100644
index 0000000..a34a2aa
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/Length/LengthTool.js
@@ -0,0 +1,302 @@
+import * as cornerstoneTools from 'cornerstone-tools'
+// State
+const getToolState = cornerstoneTools.getToolState
+const toolStyle = cornerstoneTools.toolStyle
+const toolColors = cornerstoneTools.toolColors
+
+// Drawing
+const getNewContext = cornerstoneTools.import('drawing/getNewContext')
+const draw = cornerstoneTools.import('drawing/draw')
+const setShadow = cornerstoneTools.import('drawing/setShadow')
+const drawLine = cornerstoneTools.import('drawing/drawLine')
+const drawLinkedTextBox = cornerstoneTools.import('drawing/drawLinkedTextBox')
+const drawHandles = cornerstoneTools.import('drawing/drawHandles')
+
+// util
+const lineSegDistance = cornerstoneTools.import('util/lineSegDistance')
+const lengthCursor = cornerstoneTools.import('tools/cursors')
+const getPixelSpacing = cornerstoneTools.import('util/getPixelSpacing')
+const throttle = cornerstoneTools.import('util/throttle')
+const getModule = cornerstoneTools.getModule
+
+/**
+ * @public
+ * @class LengthTool
+ * @memberof Tools.Annotation
+ * @classdesc Tool for measuring distances.
+ * @extends Tools.Base.BaseAnnotationTool
+ */
+export default class LengthTool extends cornerstoneTools.LengthTool {
+ constructor(props = {}) {
+ const defaultProps = {
+ name: 'Length',
+ supportedInteractionTypes: ['Mouse', 'Touch'],
+ svgCursor: lengthCursor,
+ configuration: {
+ drawHandles: true,
+ drawHandlesOnHover: false,
+ hideHandlesIfMoving: false,
+ renderDashed: false,
+ digits: 2
+ }
+ }
+
+ super(props, defaultProps)
+
+ this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 50)
+ }
+ createNewMeasurement(eventData) {
+ const goodEventData =
+ eventData && eventData.currentPoints && eventData.currentPoints.image
+
+ if (!goodEventData) {
+ console.log(
+ `required eventData not supplied to tool ${this.name}'s createNewMeasurement`
+ )
+
+ return
+ }
+
+ const { x, y } = eventData.currentPoints.image
+
+ return {
+ visible: true,
+ active: true,
+ color: undefined,
+ invalidated: true,
+ handles: {
+ start: {
+ x,
+ y,
+ highlight: true,
+ active: false
+ },
+ end: {
+ x,
+ y,
+ highlight: true,
+ active: true
+ },
+ textBox: {
+ active: false,
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ }
+ }
+ }
+
+ /**
+ *
+ *
+ * @param {*} element
+ * @param {*} data
+ * @param {*} coords
+ * @returns {Boolean}
+ */
+ pointNearTool(element, data, coords) {
+ const hasStartAndEndHandles =
+ data && data.handles && data.handles.start && data.handles.end
+ const validParameters = hasStartAndEndHandles
+
+ if (!validParameters) {
+ console.log(
+ `invalid parameters supplied to tool ${this.name}'s pointNearTool`
+ )
+
+ return false
+ }
+ if (data.visible === false) {
+ return false
+ }
+
+ return (
+ lineSegDistance(element, data.handles.start, data.handles.end, coords) <
+ 25
+ )
+ }
+
+ updateCachedStats(image, element, data) {
+ const {
+ digits
+ } = this.configuration
+ const { rowPixelSpacing, colPixelSpacing } = getPixelSpacing(image)
+
+ // Set rowPixelSpacing and columnPixelSpacing to 1 if they are undefined (or zero)
+ const dx =
+ (data.handles.end.x - data.handles.start.x) * (colPixelSpacing || 1)
+ const dy =
+ (data.handles.end.y - data.handles.start.y) * (rowPixelSpacing || 1)
+
+ // Calculate the length, and create the text variable with the millimeters or pixels suffix
+ const length = Math.sqrt(dx * dx + dy * dy)
+
+ // Store the length inside the tool for outside access
+ data.length = length.toFixed(digits)
+ data.invalidated = false
+ }
+
+ renderToolData(evt) {
+ const eventData = evt.detail
+ const {
+ handleRadius,
+ drawHandlesOnHover,
+ hideHandlesIfMoving,
+ renderDashed,
+ digits
+ } = this.configuration
+ const toolData = getToolState(evt.currentTarget, this.name)
+ if (!toolData) {
+ return
+ }
+
+ // We have tool data for this element - iterate over each one and draw it
+ const context = getNewContext(eventData.canvasContext.canvas)
+ const { image, element } = eventData
+ const { rowPixelSpacing, colPixelSpacing } = getPixelSpacing(image)
+
+ const lineWidth = toolStyle.getToolWidth()
+ const lineDash = getModule('globalConfiguration').configuration.lineDash
+
+ for (let i = 0; i < toolData.data.length; i++) {
+ const data = toolData.data[i]
+
+ if (data.visible === false) {
+ continue
+ }
+
+ draw(context, context => {
+ // Configurable shadow
+ setShadow(context, this.configuration)
+
+ const color = toolColors.getColorIfActive(data)
+
+ const lineOptions = { color }
+
+ if (renderDashed) {
+ lineOptions.lineDash = lineDash
+ }
+
+ // Draw the measurement line
+ drawLine(
+ context,
+ element,
+ data.handles.start,
+ data.handles.end,
+ lineOptions
+ )
+
+ // Draw the handles
+ const handleOptions = {
+ color,
+ handleRadius,
+ drawHandlesIfActive: drawHandlesOnHover,
+ hideHandlesIfMoving
+ }
+
+ if (this.configuration.drawHandles) {
+ drawHandles(context, eventData, data.handles, handleOptions)
+ }
+
+ if (!data.handles.textBox.hasMoved) {
+ const coords = {
+ x: Math.max(data.handles.start.x, data.handles.end.x)
+ }
+
+ // Depending on which handle has the largest x-value,
+ // Set the y-value for the text box
+ if (coords.x === data.handles.start.x) {
+ coords.y = data.handles.start.y
+ } else {
+ coords.y = data.handles.end.y
+ }
+
+ data.handles.textBox.x = coords.x
+ data.handles.textBox.y = coords.y
+ }
+
+ // Move the textbox slightly to the right and upwards
+ // So that it sits beside the length tool handle
+ const xOffset = 10
+
+ // Update textbox stats
+ if (data.invalidated === true) {
+ if (data.length) {
+ this.throttledUpdateCachedStats(image, element, data)
+ } else {
+ this.updateCachedStats(image, element, data)
+ }
+ }
+ const text = []
+ if (data.hasOwnProperty('remark')) {
+ if (data.hasOwnProperty('status') && data.status) {
+ text.push(`${data.remark}(${data.status})`)
+ } else {
+ text.push(data.remark)
+ }
+ }
+
+ text.push(textBoxText(data, rowPixelSpacing, colPixelSpacing))
+ drawLinkedTextBox(
+ context,
+ element,
+ data.handles.textBox,
+ text,
+ data.handles,
+ textBoxAnchorPoints,
+ color,
+ lineWidth,
+ xOffset,
+ true
+ )
+ })
+ }
+
+ // - SideEffect: Updates annotation 'suffix'
+ function textBoxText(annotation, rowPixelSpacing, colPixelSpacing) {
+ const measuredValue = _sanitizeMeasuredValue(annotation.length)
+
+ // Measured value is not defined, return empty string
+ if (!measuredValue) {
+ return ''
+ }
+
+ // Set the length text suffix depending on whether or not pixelSpacing is available
+ let suffix = 'mm'
+
+ if (!rowPixelSpacing || !colPixelSpacing) {
+ suffix = 'pixels'
+ }
+
+ annotation.unit = suffix
+
+ return `${measuredValue.toFixed(digits)} ${suffix}`
+ }
+
+ function textBoxAnchorPoints(handles) {
+ const midpoint = {
+ x: (handles.start.x + handles.end.x) / 2,
+ y: (handles.start.y + handles.end.y) / 2
+ }
+
+ return [handles.start, midpoint, handles.end]
+ }
+ }
+}
+
+/**
+ * Attempts to sanitize a value by casting as a number; if unable to cast,
+ * we return `undefined`
+ *
+ * @param {*} value
+ * @returns a number or undefined
+ */
+function _sanitizeMeasuredValue(value) {
+ const parsedValue = Number(value)
+ const isNumber = !isNaN(parsedValue)
+
+ return isNumber ? parsedValue : undefined
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/OrientationMarkersTool.js b/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/OrientationMarkersTool.js
new file mode 100644
index 0000000..38759b6
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/OrientationMarkersTool.js
@@ -0,0 +1,162 @@
+import * as cornerstoneTools from 'cornerstone-tools'
+const external = cornerstoneTools.external
+import getOrientationString from './getOrientationString'
+import invertOrientationString from './invertOrientationString'
+// const getOrientationString = cornerstoneTools.import('orientation/getOrientationString')
+// const invertOrientationString = cornerstoneTools.import('orientation/invertOrientationString')
+const getNewContext = cornerstoneTools.import('drawing/getNewContext')
+const drawTextBox = cornerstoneTools.import('drawing/drawTextBox')
+const textBoxWidth = cornerstoneTools.import('drawing/textBoxWidth')
+const toolColors = cornerstoneTools.toolColors
+
+/**
+ * @public
+ * @class OrientationMarkersTool
+ * @memberof Tools
+ *
+ * @classdesc Tool for displaying orientation markers on the image.
+ * @extends Tools.Base.BaseTool
+ */
+export default class OrientationMarkersTool extends cornerstoneTools.OrientationMarkersTool {
+ constructor(props = {}) {
+ const defaultProps = {
+ name: 'OrientationMarkers',
+ configuration: {
+ drawAllMarkers: true
+ },
+ mixins: ['enabledOrDisabledBinaryTool']
+ }
+
+ super(props, defaultProps)
+ }
+
+ enabledCallback(element) {
+ this.forceImageUpdate(element)
+ }
+
+ disabledCallback(element) {
+ this.forceImageUpdate(element)
+ }
+
+ forceImageUpdate(element) {
+ const cornerstone = external.cornerstone
+ const enabledElement = cornerstone.getEnabledElement(element)
+
+ if (enabledElement.image) {
+ cornerstone.updateImage(element)
+ }
+ }
+
+ renderToolData(evt) {
+ const eventData = evt.detail
+ const context = getNewContext(eventData.canvasContext.canvas)
+ const element = eventData.element
+ const markers = getOrientationMarkers(element)
+
+ if (!markers) {
+ return
+ }
+
+ const coords = getOrientationMarkerPositions(element, markers)
+
+ const color = toolColors.getToolColor()
+
+ const textWidths = {
+ top: textBoxWidth(context, markers.top, 0),
+ left: textBoxWidth(context, markers.left, 0),
+ right: textBoxWidth(context, markers.right, 0),
+ bottom: textBoxWidth(context, markers.bottom, 0),
+ height: textBoxWidth(context, 'M', 0) // Trick to get an approximation of the height of the text
+ }
+
+ drawTopLeftText(context, markers, coords, textWidths, color)
+ if (this.configuration.drawAllMarkers) {
+ drawBottomRightText(context, markers, coords, textWidths, color)
+ }
+ }
+}
+
+const drawTopLeftText = (context, markers, coords, textWidths, color) => {
+ drawTextBox(
+ context,
+ markers.top,
+ coords.top.x - textWidths.top / 2,
+ coords.top.y,
+ color
+ )
+ drawTextBox(
+ context,
+ markers.left,
+ coords.left.x - textWidths.left / 2,
+ coords.left.y,
+ color
+ )
+}
+
+const drawBottomRightText = (context, markers, coords, textWidths, color) => {
+ drawTextBox(
+ context,
+ markers.right,
+ coords.right.x - textWidths.right,
+ coords.right.y,
+ color
+ )
+ drawTextBox(
+ context,
+ markers.bottom,
+ coords.bottom.x - textWidths.bottom / 2,
+ coords.bottom.y - textWidths.height,
+ color
+ )
+}
+
+const getOrientationMarkers = element => {
+ const cornerstone = external.cornerstone
+ const enabledElement = cornerstone.getEnabledElement(element)
+ const imagePlane = cornerstone.metaData.get(
+ 'imagePlaneModule',
+ enabledElement.image.imageId
+ )
+
+ if (!imagePlane || !imagePlane.rowCosines || !imagePlane.columnCosines) {
+ return
+ }
+ const row = getOrientationString(imagePlane.rowCosines)
+ const column = getOrientationString(imagePlane.columnCosines)
+ const oppositeRow = invertOrientationString(row)
+ const oppositeColumn = invertOrientationString(column)
+
+ return {
+ top: oppositeColumn,
+ bottom: column,
+ left: oppositeRow,
+ right: row
+ }
+}
+
+const getOrientationMarkerPositions = element => {
+ const enabledElement = external.cornerstone.getEnabledElement(element)
+ const top = external.cornerstone.pixelToCanvas(element, {
+ x: enabledElement.image.width / 2,
+ y: 5
+ })
+ const bottom = external.cornerstone.pixelToCanvas(element, {
+ x: enabledElement.image.width / 2,
+ y: enabledElement.image.height - 15
+ })
+ const left = external.cornerstone.pixelToCanvas(element, {
+ x: 5,
+ y: enabledElement.image.height / 2
+ })
+ const right = external.cornerstone.pixelToCanvas(element, {
+ x: enabledElement.image.width - 10,
+ y: enabledElement.image.height / 2
+ })
+
+ return {
+ top,
+ bottom,
+ left,
+ right
+ }
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/getOrientationString.js b/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/getOrientationString.js
new file mode 100644
index 0000000..f7b2bbb
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/getOrientationString.js
@@ -0,0 +1,62 @@
+import * as cornerstoneTools from 'cornerstone-tools'
+const external = cornerstoneTools.external
+const convertToVector3 = cornerstoneTools.import('util/convertToVector3')
+// import convertToVector3 from '../util/convertToVector3.js';
+
+/**
+ * Returns the orientation of the vector in the patient coordinate system.
+ * @public
+ * @function getOrientationString
+ *
+ * @param {Array|cornerstoneMath.Vector3} vector Input array or Vector3
+ * @returns {string} The orientation in the patient coordinate system.
+ */
+export default function(vector) {
+ const vec3 = convertToVector3(vector)
+
+ // Thanks to David Clunie
+ // https://sites.google.com/site/dicomnotes/
+
+ let orientation = ''
+ const orientationX = vec3.x < 0 ? 'R' : 'L'
+ const orientationY = vec3.y < 0 ? 'A' : 'P'
+ const orientationZ = vec3.z < 0 ? 'F' : 'H'
+
+ // Should probably make this a function vector3.abs
+ const abs = new external.cornerstoneMath.Vector3(
+ Math.abs(vec3.x),
+ Math.abs(vec3.y),
+ Math.abs(vec3.z)
+ )
+
+ const MIN = 0.0001
+
+ for (let i = 0; i < 3; i++) {
+ if (abs.x > MIN && abs.x > abs.y && abs.x > abs.z) {
+ orientation += orientationX
+ abs.x = 0
+ } else if (abs.y > MIN && abs.y > abs.x && abs.y > abs.z) {
+ orientation += orientationY
+ abs.y = 0
+ } else if (abs.z > MIN && abs.z > abs.x && abs.z > abs.y) {
+ orientation += orientationZ
+ abs.z = 0
+ } else if (abs.x > MIN && abs.y > MIN && abs.x === abs.y) {
+ orientation += orientationX + orientationY
+ abs.x = 0
+ abs.y = 0
+ } else if (abs.x > MIN && abs.z > MIN && abs.x === abs.z) {
+ orientation += orientationX + orientationZ
+ abs.x = 0
+ abs.z = 0
+ } else if (abs.y > MIN && abs.z > MIN && abs.y === abs.z) {
+ orientation += orientationY + orientationZ
+ abs.y = 0
+ abs.z = 0
+ } else {
+ break
+ }
+ }
+
+ return orientation
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/invertOrientationString.js b/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/invertOrientationString.js
new file mode 100644
index 0000000..989e3d7
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/OrientationMarkers/invertOrientationString.js
@@ -0,0 +1,20 @@
+/**
+ * Inverts an orientation string.
+ * @public
+ * @function invertOrientationString
+ *
+ * @param {string} orientationString The orientation.
+ * @returns {string} The inverted orientationString.
+ */
+export default function(orientationString) {
+ let inverted = orientationString.replace('H', 'f')
+
+ inverted = inverted.replace('F', 'h')
+ inverted = inverted.replace('R', 'l')
+ inverted = inverted.replace('L', 'r')
+ inverted = inverted.replace('A', 'p')
+ inverted = inverted.replace('P', 'a')
+ inverted = inverted.toUpperCase()
+
+ return inverted
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/RectangleRoi/RectangleRoiTool.js b/src/views/trials/trials-panel/reading/dicoms/tools/RectangleRoi/RectangleRoiTool.js
new file mode 100644
index 0000000..5e1fd72
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/RectangleRoi/RectangleRoiTool.js
@@ -0,0 +1,548 @@
+import * as cornerstoneTools from 'cornerstone-tools'
+const external = cornerstoneTools.external
+
+// State
+const getToolState = cornerstoneTools.getToolState
+const toolStyle = cornerstoneTools.toolStyle
+const toolColors = cornerstoneTools.toolColors
+
+// Drawing
+const getNewContext = cornerstoneTools.import('drawing/getNewContext')
+const draw = cornerstoneTools.import('drawing/draw')
+const drawHandles = cornerstoneTools.import('drawing/drawHandles')
+const drawRect = cornerstoneTools.import('drawing/drawRect')
+const drawLinkedTextBox = cornerstoneTools.import('drawing/drawLinkedTextBox')
+const setShadow = cornerstoneTools.import('drawing/setShadow')
+
+// Util
+const calculateSUV = cornerstoneTools.import('util/calculateSUV')
+const getROITextBoxCoords = cornerstoneTools.import('util/getROITextBoxCoords')
+const numbersWithCommas = cornerstoneTools.import('util/numbersWithCommas')
+const throttle = cornerstoneTools.import('util/throttle')
+const rectangleRoiCursor = cornerstoneTools.import('tools/cursors')
+const getPixelSpacing = cornerstoneTools.import('util/getPixelSpacing')
+const getModule = cornerstoneTools.getModule
+
+/**
+ * @public
+ * @class RectangleRoiTool
+ * @memberof Tools.Annotation
+ * @classdesc Tool for drawing rectangular regions of interest, and measuring
+ * the statistics of the enclosed pixels.
+ * @extends Tools.Base.BaseAnnotationTool
+ */
+export default class RectangleRoiTool extends cornerstoneTools.RectangleRoiTool {
+ constructor(props = {}) {
+ const defaultProps = {
+ name: 'RectangleRoi',
+ supportedInteractionTypes: ['Mouse', 'Touch'],
+ configuration: {
+ drawHandles: true,
+ drawHandlesOnHover: false,
+ hideHandlesIfMoving: false,
+ renderDashed: false
+ // showMinMax: false,
+ // showHounsfieldUnits: true
+ },
+ svgCursor: rectangleRoiCursor
+ }
+
+ super(props, defaultProps)
+
+ this.throttledUpdateCachedStats = throttle(this.updateCachedStats, 110)
+ }
+
+ createNewMeasurement(eventData) {
+ const goodEventData =
+ eventData && eventData.currentPoints && eventData.currentPoints.image
+
+ if (!goodEventData) {
+ console.log(
+ `required eventData not supplied to tool ${this.name}'s createNewMeasurement`
+ )
+
+ return
+ }
+
+ return {
+ visible: true,
+ active: true,
+ color: undefined,
+ invalidated: true,
+ handles: {
+ start: {
+ x: eventData.currentPoints.image.x,
+ y: eventData.currentPoints.image.y,
+ highlight: true,
+ active: false
+ },
+ end: {
+ x: eventData.currentPoints.image.x,
+ y: eventData.currentPoints.image.y,
+ highlight: true,
+ active: true
+ },
+ initialRotation: eventData.viewport.rotation,
+ textBox: {
+ active: false,
+ hasMoved: false,
+ movesIndependently: false,
+ drawnIndependently: true,
+ allowedOutsideImage: true,
+ hasBoundingBox: true
+ }
+ }
+ }
+ }
+
+ pointNearTool(element, data, coords, interactionType) {
+ const hasStartAndEndHandles =
+ data && data.handles && data.handles.start && data.handles.end
+ const validParameters = hasStartAndEndHandles
+
+ if (!validParameters) {
+ console.log(
+ `invalid parameters supplied to tool ${this.name}'s pointNearTool`
+ )
+ }
+
+ if (!validParameters || data.visible === false) {
+ return false
+ }
+
+ const distance = interactionType === 'mouse' ? 15 : 25
+ const startCanvas = external.cornerstone.pixelToCanvas(
+ element,
+ data.handles.start
+ )
+ const endCanvas = external.cornerstone.pixelToCanvas(
+ element,
+ data.handles.end
+ )
+
+ const rect = {
+ left: Math.min(startCanvas.x, endCanvas.x),
+ top: Math.min(startCanvas.y, endCanvas.y),
+ width: Math.abs(startCanvas.x - endCanvas.x),
+ height: Math.abs(startCanvas.y - endCanvas.y)
+ }
+
+ const distanceToPoint = external.cornerstoneMath.rect.distanceToPoint(
+ rect,
+ coords
+ )
+
+ return distanceToPoint < distance
+ }
+
+ updateCachedStats(image, element, data) {
+ const seriesModule =
+ external.cornerstone.metaData.get('generalSeriesModule', image.imageId) ||
+ {}
+ const modality = seriesModule.modality
+ const pixelSpacing = getPixelSpacing(image)
+
+ const stats = _calculateStats(
+ image,
+ element,
+ data.handles,
+ modality,
+ pixelSpacing
+ )
+
+ data.cachedStats = stats
+ data.invalidated = false
+ }
+
+ renderToolData(evt) {
+ const toolData = getToolState(evt.currentTarget, this.name)
+
+ if (!toolData) {
+ return
+ }
+
+ const eventData = evt.detail
+ const { image, element } = eventData
+ const lineWidth = toolStyle.getToolWidth()
+ const lineDash = getModule('globalConfiguration').configuration.lineDash
+ const {
+ handleRadius,
+ drawHandlesOnHover,
+ hideHandlesIfMoving,
+ renderDashed
+ } = this.configuration
+ const context = getNewContext(eventData.canvasContext.canvas)
+ const { rowPixelSpacing, colPixelSpacing } = getPixelSpacing(image)
+
+ // Meta
+ const seriesModule =
+ external.cornerstone.metaData.get('generalSeriesModule', image.imageId) ||
+ {}
+
+ // Pixel Spacing
+ const modality = seriesModule.modality
+ const hasPixelSpacing = rowPixelSpacing && colPixelSpacing
+
+ draw(context, context => {
+ // If we have tool data for this element - iterate over each set and draw it
+ for (let i = 0; i < toolData.data.length; i++) {
+ const data = toolData.data[i]
+
+ if (data.visible === false) {
+ continue
+ }
+
+ // Configure
+ const color = toolColors.getColorIfActive(data)
+ const handleOptions = {
+ color,
+ handleRadius,
+ drawHandlesIfActive: drawHandlesOnHover,
+ hideHandlesIfMoving
+ }
+
+ setShadow(context, this.configuration)
+
+ const rectOptions = { color }
+
+ if (renderDashed) {
+ rectOptions.lineDash = lineDash
+ }
+
+ // Draw
+ drawRect(
+ context,
+ element,
+ data.handles.start,
+ data.handles.end,
+ rectOptions,
+ 'pixel',
+ data.handles.initialRotation
+ )
+
+ if (this.configuration.drawHandles) {
+ drawHandles(context, eventData, data.handles, handleOptions)
+ }
+
+ // Update textbox stats
+ if (data.invalidated === true) {
+ if (data.cachedStats) {
+ this.throttledUpdateCachedStats(image, element, data)
+ } else {
+ this.updateCachedStats(image, element, data)
+ }
+ }
+
+ // Default to textbox on right side of ROI
+ if (!data.handles.textBox.hasMoved) {
+ const defaultCoords = getROITextBoxCoords(
+ eventData.viewport,
+ data.handles
+ )
+
+ Object.assign(data.handles.textBox, defaultCoords)
+ }
+
+ const textBoxAnchorPoints = handles =>
+ _findTextBoxAnchorPoints(handles.start, handles.end)
+ const textBoxContent = _createTextBoxContent(
+ context,
+ image.color,
+ data.cachedStats,
+ modality,
+ hasPixelSpacing,
+ this.configuration,
+ data
+ )
+
+ data.unit = _getUnit(modality, this.configuration.showHounsfieldUnits)
+
+ drawLinkedTextBox(
+ context,
+ element,
+ data.handles.textBox,
+ textBoxContent,
+ data.handles,
+ textBoxAnchorPoints,
+ color,
+ lineWidth,
+ 10,
+ true
+ )
+ }
+ })
+ }
+}
+
+/**
+ * TODO: This is the same method (+ GetPixels) for the other ROIs
+ * TODO: The pixel filtering is the unique bit
+ *
+ * @param {*} startHandle
+ * @param {*} endHandle
+ * @returns {{ left: number, top: number, width: number, height: number}}
+ */
+function _getRectangleImageCoordinates(startHandle, endHandle) {
+ return {
+ left: Math.min(startHandle.x, endHandle.x),
+ top: Math.min(startHandle.y, endHandle.y),
+ width: Math.abs(startHandle.x - endHandle.x),
+ height: Math.abs(startHandle.y - endHandle.y)
+ }
+}
+
+/**
+ *
+ *
+ * @param {*} image
+ * @param {*} element
+ * @param {*} handles
+ * @param {*} modality
+ * @param {*} pixelSpacing
+ * @returns {Object} The Stats object
+ */
+function _calculateStats(image, element, handles, modality, pixelSpacing) {
+ // Retrieve the bounds of the rectangle in image coordinates
+ const roiCoordinates = _getRectangleImageCoordinates(
+ handles.start,
+ handles.end
+ )
+
+ // Retrieve the array of pixels that the rectangle bounds cover
+ const pixels = external.cornerstone.getPixels(
+ element,
+ roiCoordinates.left,
+ roiCoordinates.top,
+ roiCoordinates.width,
+ roiCoordinates.height
+ )
+
+ // Calculate the mean & standard deviation from the pixels and the rectangle details
+ const roiMeanStdDev = _calculateRectangleStats(pixels, roiCoordinates)
+
+ let meanStdDevSUV
+
+ if (modality === 'PT') {
+ meanStdDevSUV = {
+ mean: calculateSUV(image, roiMeanStdDev.mean, true) || 0,
+ stdDev: calculateSUV(image, roiMeanStdDev.stdDev, true) || 0
+ }
+ }
+
+ // Calculate the image area from the rectangle dimensions and pixel spacing
+ const area =
+ roiCoordinates.width *
+ (pixelSpacing.colPixelSpacing || 1) *
+ (roiCoordinates.height * (pixelSpacing.rowPixelSpacing || 1))
+
+ const perimeter =
+ roiCoordinates.width * 2 * (pixelSpacing.colPixelSpacing || 1) +
+ roiCoordinates.height * 2 * (pixelSpacing.rowPixelSpacing || 1)
+
+ return {
+ area: area || 0,
+ perimeter,
+ count: roiMeanStdDev.count || 0,
+ mean: roiMeanStdDev.mean || 0,
+ variance: roiMeanStdDev.variance || 0,
+ stdDev: roiMeanStdDev.stdDev || 0,
+ min: roiMeanStdDev.min || 0,
+ max: roiMeanStdDev.max || 0,
+ meanStdDevSUV
+ }
+}
+
+/**
+ *
+ *
+ * @param {*} sp
+ * @param {*} rectangle
+ * @returns {{ count, number, mean: number, variance: number, stdDev: number, min: number, max: number }}
+ */
+function _calculateRectangleStats(sp, rectangle) {
+ let sum = 0
+ let sumSquared = 0
+ let count = 0
+ let index = 0
+ let min = sp ? sp[0] : null
+ let max = sp ? sp[0] : null
+
+ for (let y = rectangle.top; y < rectangle.top + rectangle.height; y++) {
+ for (let x = rectangle.left; x < rectangle.left + rectangle.width; x++) {
+ sum += sp[index]
+ sumSquared += sp[index] * sp[index]
+ min = Math.min(min, sp[index])
+ max = Math.max(max, sp[index])
+ count++ // TODO: Wouldn't this just be sp.length?
+ index++
+ }
+ }
+
+ if (count === 0) {
+ return {
+ count,
+ mean: 0.0,
+ variance: 0.0,
+ stdDev: 0.0,
+ min: 0.0,
+ max: 0.0
+ }
+ }
+
+ const mean = sum / count
+ const variance = sumSquared / count - mean * mean
+
+ return {
+ count,
+ mean,
+ variance,
+ stdDev: Math.sqrt(variance),
+ min,
+ max
+ }
+}
+
+/**
+ *
+ *
+ * @param {*} startHandle
+ * @param {*} endHandle
+ * @returns {Array.<{x: number, y: number}>}
+ */
+function _findTextBoxAnchorPoints(startHandle, endHandle) {
+ const { left, top, width, height } = _getRectangleImageCoordinates(
+ startHandle,
+ endHandle
+ )
+
+ return [
+ {
+ // Top middle point of rectangle
+ x: left + width / 2,
+ y: top
+ },
+ {
+ // Left middle point of rectangle
+ x: left,
+ y: top + height / 2
+ },
+ {
+ // Bottom middle point of rectangle
+ x: left + width / 2,
+ y: top + height
+ },
+ {
+ // Right middle point of rectangle
+ x: left + width,
+ y: top + height / 2
+ }
+ ]
+}
+
+/**
+ *
+ *
+ * @param {*} area
+ * @param {*} hasPixelSpacing
+ * @returns {string} The formatted label for showing area
+ */
+// function _formatArea(area, hasPixelSpacing) {
+// // This uses Char code 178 for a superscript 2
+// const suffix = hasPixelSpacing
+// ? ` mm${String.fromCharCode(178)}`
+// : ` px${String.fromCharCode(178)}`
+
+// return `Area: ${numbersWithCommas(area.toFixed(2))}${suffix}`
+// }
+
+function _getUnit(modality, showHounsfieldUnits) {
+ return modality === 'CT' && showHounsfieldUnits !== false ? 'HU' : ''
+}
+
+/**
+ * TODO: This is identical to EllipticalROI's same fn
+ * TODO: We may want to make this a utility for ROIs with these values?
+ *
+ * @param {*} context
+ * @param {*} isColorImage
+ * @param {*} { area, mean, stdDev, min, max, meanStdDevSUV }
+ * @param {*} modality
+ * @param {*} hasPixelSpacing
+ * @param {*} [options={}]
+ * @returns {string[]}
+ */
+function _createTextBoxContent(
+ context,
+ isColorImage,
+ { area, mean, stdDev, min, max, meanStdDevSUV },
+ modality,
+ hasPixelSpacing,
+ options = {},
+ data
+) {
+ const showMinMax = options.showMinMax || false
+ const textLines = []
+
+ const otherLines = []
+
+ if (!isColorImage) {
+ const hasStandardUptakeValues = meanStdDevSUV && meanStdDevSUV.mean !== 0
+ const unit = _getUnit(modality, options.showHounsfieldUnits)
+
+ let meanString = `Mean: ${numbersWithCommas(mean.toFixed(2))} ${unit}`
+ const stdDevString = `Std Dev: ${numbersWithCommas(
+ stdDev.toFixed(2)
+ )} ${unit}`
+
+ // If this image has SUV values to display, concatenate them to the text line
+ if (hasStandardUptakeValues) {
+ const SUVtext = ' SUV: '
+
+ const meanSuvString = `${SUVtext}${numbersWithCommas(
+ meanStdDevSUV.mean.toFixed(2)
+ )}`
+ const stdDevSuvString = `${SUVtext}${numbersWithCommas(
+ meanStdDevSUV.stdDev.toFixed(2)
+ )}`
+
+ const targetStringLength = Math.floor(
+ context.measureText(`${stdDevString} `).width
+ )
+
+ while (context.measureText(meanString).width < targetStringLength) {
+ meanString += ' '
+ }
+
+ otherLines.push(`${meanString}${meanSuvString}`)
+ otherLines.push(`${stdDevString} ${stdDevSuvString}`)
+ } else {
+ otherLines.push(`${meanString}`)
+ otherLines.push(`${stdDevString}`)
+ }
+
+ if (showMinMax) {
+ let minString = `Min: ${min} ${unit}`
+ const maxString = `Max: ${max} ${unit}`
+ const targetStringLength = hasStandardUptakeValues
+ ? Math.floor(context.measureText(`${stdDevString} `).width)
+ : Math.floor(context.measureText(`${meanString} `).width)
+
+ while (context.measureText(minString).width < targetStringLength) {
+ minString += ' '
+ }
+
+ otherLines.push(`${minString}${maxString}`)
+ }
+ }
+
+ // textLines.push(_formatArea(area, hasPixelSpacing))
+ // otherLines.forEach(x => textLines.push(x))
+ if (data.hasOwnProperty('remark')) {
+ if (data.hasOwnProperty('status') && data.status) {
+ textLines.push(`${data.remark}(${data.status})`)
+ } else {
+ textLines.push(data.remark)
+ }
+ }
+ return textLines
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/ScaleOverlay/ScaleOverlayTool.js b/src/views/trials/trials-panel/reading/dicoms/tools/ScaleOverlay/ScaleOverlayTool.js
new file mode 100644
index 0000000..d63521a
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/ScaleOverlay/ScaleOverlayTool.js
@@ -0,0 +1,313 @@
+
+import * as cornerstoneTools from 'cornerstone-tools'
+const external = cornerstoneTools.external
+// Drawing
+const getNewContext = cornerstoneTools.import('drawing/getNewContext')
+const draw = cornerstoneTools.import('drawing/draw')
+const setShadow = cornerstoneTools.import('drawing/setShadow')
+const drawLine = cornerstoneTools.import('drawing/drawLine')
+
+const toolStyle = cornerstoneTools.toolStyle
+// const toolColors = cornerstoneTools.toolColors
+const color = '#fff'
+
+/**
+ * @public
+ * @class ScaleOverlayTool
+ * @memberof Tools
+ *
+ * @classdesc Tool for displaying a scale overlay on the image.
+ * @extends Tools.Base.BaseTool
+ */
+export default class ScaleOverlayTool extends cornerstoneTools.ScaleOverlayTool {
+ constructor(props = {}) {
+ const defaultProps = {
+ name: 'ScaleOverlay',
+ configuration: {
+ minorTickLength: 5,
+ majorTickLength: 10
+ },
+ mixins: ['enabledOrDisabledBinaryTool']
+ }
+
+ super(props, defaultProps)
+ }
+
+ enabledCallback(element) {
+ this.forceImageUpdate(element)
+ }
+
+ disabledCallback(element) {
+ this.forceImageUpdate(element)
+ }
+
+ forceImageUpdate(element) {
+ const enabledElement = external.cornerstone.getEnabledElement(element)
+
+ if (enabledElement.image) {
+ external.cornerstone.updateImage(element)
+ }
+ }
+
+ renderToolData(evt) {
+ const eventData = evt.detail
+
+ const context = getNewContext(eventData.canvasContext.canvas)
+ const { image, viewport, element } = eventData
+
+ let rowPixelSpacing = image.rowPixelSpacing
+ let colPixelSpacing = image.columnPixelSpacing
+ const imagePlane = external.cornerstone.metaData.get(
+ 'imagePlaneModule',
+ image.imageId
+ )
+
+ if (imagePlane) {
+ rowPixelSpacing =
+ imagePlane.rowPixelSpacing || imagePlane.rowImagePixelSpacing
+ colPixelSpacing =
+ imagePlane.columnPixelSpacing || imagePlane.colImagePixelSpacing
+ }
+
+ // Check whether pixel spacing is defined
+ if (!rowPixelSpacing || !colPixelSpacing) {
+ // logger.warn(
+ // `unable to define rowPixelSpacing or colPixelSpacing from data on ${this.name}'s renderToolData`
+ // )
+
+ return
+ }
+
+ const canvasSize = {
+ width: context.canvas.width,
+ height: context.canvas.height
+ }
+
+ // Distance between intervals is 10mm
+ const verticalIntervalScale = (10.0 / rowPixelSpacing) * viewport.scale
+ const horizontalIntervalScale = (10.0 / colPixelSpacing) * viewport.scale
+ // 0.1 and 0.05 gives margin to horizontal and vertical lines
+ // const hscaleBounds = computeScaleBounds(canvasSize, 0.25, 0.05)
+ // const vscaleBounds = computeScaleBounds(canvasSize, 0.05, 0.15)
+ const hscaleBounds = computeScaleBounds(canvasSize, 0.4, 0.04)
+ const vscaleBounds = computeScaleBounds(canvasSize, 0.04, 0.4)
+
+ if (
+ !canvasSize.width ||
+ !canvasSize.height ||
+ !hscaleBounds ||
+ !vscaleBounds
+ ) {
+ return
+ }
+
+ // const color = toolColors.getToolColor()
+ const lineWidth = toolStyle.getToolWidth()
+
+ const imageAttributes = Object.assign(
+ {},
+ {
+ hscaleBounds,
+ vscaleBounds,
+ verticalMinorTick: verticalIntervalScale,
+ horizontalMinorTick: horizontalIntervalScale,
+ verticalLine: {
+ start: {
+ x: vscaleBounds.bottomRight.x,
+ y: vscaleBounds.topLeft.y
+ },
+ end: {
+ x: vscaleBounds.bottomRight.x,
+ y: vscaleBounds.bottomRight.y
+ }
+ },
+ horizontalLine: {
+ start: {
+ x: hscaleBounds.topLeft.x,
+ y: hscaleBounds.bottomRight.y
+ },
+ end: {
+ x: hscaleBounds.bottomRight.x,
+ y: hscaleBounds.bottomRight.y
+ }
+ },
+ color,
+ lineWidth
+ },
+ this.configuration
+ )
+
+ draw(context, context => {
+ setShadow(context, imageAttributes)
+
+ // Draw vertical line
+ drawLine(
+ context,
+ element,
+ imageAttributes.verticalLine.start,
+ imageAttributes.verticalLine.end,
+ {
+ color: imageAttributes.color,
+ lineWidth: imageAttributes.lineWidth
+ },
+ 'canvas'
+ )
+ drawVerticalScalebarIntervals(context, element, imageAttributes)
+
+ // Draw horizontal line
+ drawLine(
+ context,
+ element,
+ imageAttributes.horizontalLine.start,
+ imageAttributes.horizontalLine.end,
+ {
+ color: imageAttributes.color,
+ lineWidth: imageAttributes.lineWidth
+ },
+ 'canvas'
+ )
+ drawHorizontalScalebarIntervals(context, element, imageAttributes)
+ })
+ }
+}
+
+/**
+ * Computes the max bound for scales on the image
+ * @param {{width: number, height: number}} canvasSize
+ * @param {number} horizontalReduction
+ * @param {number} verticalReduction
+ * @returns {Object.}
+ */
+const computeScaleBounds = (
+ canvasSize,
+ horizontalReduction,
+ verticalReduction
+) => {
+ const hReduction = horizontalReduction * Math.min(1000, canvasSize.width)
+ const vReduction = verticalReduction * Math.min(1000, canvasSize.height)
+ const canvasBounds = {
+ left: hReduction,
+ top: vReduction,
+ width: canvasSize.width - 2 * hReduction,
+ height: canvasSize.height - 2 * vReduction
+ }
+
+ return {
+ topLeft: {
+ x: canvasBounds.left,
+ y: canvasBounds.top
+ },
+ bottomRight: {
+ x: canvasBounds.left + canvasBounds.width,
+ y: canvasBounds.top + canvasBounds.height
+ }
+ }
+}
+
+/**
+ * @param {CanvasRenderingContext2D} context
+ * @param {HTMLElement} element
+ * @param {Object} imageAttributes
+ * @returns {void}
+ */
+const drawVerticalScalebarIntervals = (context, element, imageAttributes) => {
+ let i = 0
+
+ while (
+ imageAttributes.verticalLine.start.y +
+ i * imageAttributes.verticalMinorTick <=
+ imageAttributes.vscaleBounds.bottomRight.y
+ ) {
+ const { color, lineWidth } = imageAttributes
+ const startPoint = {
+ x: imageAttributes.verticalLine.start.x,
+ y:
+ imageAttributes.verticalLine.start.y +
+ i * imageAttributes.verticalMinorTick
+ }
+
+ const endPoint = {
+ x: 0,
+ y:
+ imageAttributes.verticalLine.start.y +
+ i * imageAttributes.verticalMinorTick
+ }
+
+ if (i % 5 === 0) {
+ endPoint.x =
+ imageAttributes.verticalLine.start.x - imageAttributes.majorTickLength
+ } else {
+ endPoint.x =
+ imageAttributes.verticalLine.start.x - imageAttributes.minorTickLength
+ }
+
+ drawLine(
+ context,
+ element,
+ startPoint,
+ endPoint,
+ {
+ color,
+ lineWidth
+ },
+ 'canvas'
+ )
+
+ i++
+ }
+}
+
+/**
+ * @param {CanvasRenderingContext2D} context
+ * @param {HTMLElement} element
+ * @param {Object} imageAttributes
+ * @returns {void}
+ */
+const drawHorizontalScalebarIntervals = (context, element, imageAttributes) => {
+ let i = 0
+
+ while (
+ imageAttributes.horizontalLine.start.x +
+ i * imageAttributes.horizontalMinorTick <=
+ imageAttributes.hscaleBounds.bottomRight.x
+ ) {
+ const { color, lineWidth } = imageAttributes
+ const startPoint = {
+ x:
+ imageAttributes.horizontalLine.start.x +
+ i * imageAttributes.horizontalMinorTick,
+ y: imageAttributes.horizontalLine.start.y
+ }
+
+ const endPoint = {
+ x:
+ imageAttributes.horizontalLine.start.x +
+ i * imageAttributes.horizontalMinorTick,
+ y: 0
+ }
+
+ if (i % 5 === 0) {
+ endPoint.y =
+ imageAttributes.horizontalLine.start.y -
+ imageAttributes.majorTickLength
+ } else {
+ endPoint.y =
+ imageAttributes.horizontalLine.start.y -
+ imageAttributes.minorTickLength
+ }
+
+ drawLine(
+ context,
+ element,
+ startPoint,
+ endPoint,
+ {
+ color,
+ lineWidth
+ },
+ 'canvas'
+ )
+
+ i++
+ }
+}
diff --git a/src/views/trials/trials-panel/reading/dicoms/tools/calculateSUV.js b/src/views/trials/trials-panel/reading/dicoms/tools/calculateSUV.js
new file mode 100644
index 0000000..4e6bde3
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/dicoms/tools/calculateSUV.js
@@ -0,0 +1,95 @@
+import * as cornerstoneTools from 'cornerstone-tools'
+const external = cornerstoneTools.external
+
+/**
+ * Calculates a Standardized Uptake Value.
+ * @export @public @method
+ * @name calculateSUV
+ *
+ * @param {Object} image The image.
+ * @param {number} storedPixelValue The raw pixel value.
+ * @param {bool} [skipRescale=fale]
+ * @returns {number} The SUV.
+ */
+export default function(image, storedPixelValue, skipRescale = false) {
+ const cornerstone = external.cornerstone
+ const patientStudyModule = cornerstone.metaData.get(
+ 'patientStudyModule',
+ image.imageId
+ )
+ const seriesModule = cornerstone.metaData.get(
+ 'generalSeriesModule',
+ image.imageId
+ )
+
+ if (!patientStudyModule || !seriesModule) {
+ return
+ }
+
+ const modality = seriesModule.modality
+
+ // Image must be PET
+ if (modality !== 'PT') {
+ return
+ }
+
+ const modalityPixelValue = skipRescale
+ ? storedPixelValue
+ : storedPixelValue * image.slope + image.intercept
+
+ const patientWeight = patientStudyModule.patientWeight // In kg
+
+ if (!patientWeight) {
+ return
+ }
+
+ const petSequenceModule = cornerstone.metaData.get(
+ 'petIsotopeModule',
+ image.imageId
+ )
+
+ if (!petSequenceModule) {
+ return
+ }
+
+ const radiopharmaceuticalInfo = petSequenceModule.radiopharmaceuticalInfo
+ const startTime = radiopharmaceuticalInfo.radiopharmaceuticalStartTime
+ const totalDose = radiopharmaceuticalInfo.radionuclideTotalDose
+ const halfLife = radiopharmaceuticalInfo.radionuclideHalfLife
+ const seriesAcquisitionTime = seriesModule.seriesTime
+
+ if (!startTime || !totalDose || !halfLife || !seriesAcquisitionTime) {
+ return
+ }
+
+ const acquisitionTimeInSeconds =
+ fracToDec(seriesAcquisitionTime.fractionalSeconds || 0) +
+ seriesAcquisitionTime.seconds +
+ seriesAcquisitionTime.minutes * 60 +
+ seriesAcquisitionTime.hours * 60 * 60
+ const injectionStartTimeInSeconds =
+ fracToDec(startTime.fractionalSeconds || 0) +
+ startTime.seconds +
+ startTime.minutes * 60 +
+ startTime.hours * 60 * 60
+ const durationInSeconds =
+ acquisitionTimeInSeconds - injectionStartTimeInSeconds
+ const correctedDose =
+ totalDose * Math.exp((-durationInSeconds * Math.log(2)) / halfLife)
+ const suv = ((modalityPixelValue * patientWeight) / correctedDose) * 1000
+
+ return suv
+}
+
+/**
+ * Returns a decimal value given a fractional value.
+ * @private
+ * @method
+ * @name fracToDec
+ *
+ * @param {number} fractionalValue The value to convert.
+ * @returns {number} The value converted to decimal.
+ */
+function fracToDec(fractionalValue) {
+ return parseFloat(`.${fractionalValue}`)
+}
diff --git a/src/views/trials/trials-panel/reading/global-review/components/EditGlobalForm.vue b/src/views/trials/trials-panel/reading/global-review/components/EditGlobalForm.vue
new file mode 100644
index 0000000..65e5b2f
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/global-review/components/EditGlobalForm.vue
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo',1) }}
+ {{ $fd('ReadingYesOrNo',0) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/global-review/components/IRecistTable.vue b/src/views/trials/trials-panel/reading/global-review/components/IRecistTable.vue
new file mode 100644
index 0000000..7ec0b66
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/global-review/components/IRecistTable.vue
@@ -0,0 +1,475 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
+
+ {{ scope.row.BeforeQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode, parseInt(scope.row.AfterQuestionList[index].VisitAnswer)) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
+
+ {{ scope.row.AfterQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/global-review/components/PCWG3Table.vue b/src/views/trials/trials-panel/reading/global-review/components/PCWG3Table.vue
new file mode 100644
index 0000000..d283e6f
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/global-review/components/PCWG3Table.vue
@@ -0,0 +1,287 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
+
+ {{ scope.row.BeforeQuestionList[index].Answer === '-1' ? $t('trials:readingReport:title:unknow') : scope.row.BeforeQuestionList[index].Answer }}
+ {{ scope.row.BeforeQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode, parseInt(scope.row.AfterQuestionList[index].VisitAnswer)) }}
+
+
+
+
+
+
+ {
+ selectChange(v, scope.row, index)
+ }"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
+
+ {{ scope.row.AfterQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/global-review/components/PGWC3EditGlobalForm.vue b/src/views/trials/trials-panel/reading/global-review/components/PGWC3EditGlobalForm.vue
new file mode 100644
index 0000000..f6810e6
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/global-review/components/PGWC3EditGlobalForm.vue
@@ -0,0 +1,284 @@
+
+
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo',1) }}
+ {{ $fd('ReadingYesOrNo',0) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/global-review/components/RecistBMTable.vue b/src/views/trials/trials-panel/reading/global-review/components/RecistBMTable.vue
new file mode 100644
index 0000000..f7504d6
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/global-review/components/RecistBMTable.vue
@@ -0,0 +1,471 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
+
+ {{ scope.row.BeforeQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode, parseInt(scope.row.AfterQuestionList[index].VisitAnswer)) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
+
+ {{ scope.row.AfterQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/global-review/components/RecistTable.vue b/src/views/trials/trials-panel/reading/global-review/components/RecistTable.vue
new file mode 100644
index 0000000..0949cec
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/global-review/components/RecistTable.vue
@@ -0,0 +1,466 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
+
+ {{ scope.row.BeforeQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode, parseInt(scope.row.AfterQuestionList[index].VisitAnswer)) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
+
+ {{ scope.row.AfterQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/global-review/index.vue b/src/views/trials/trials-panel/reading/global-review/index.vue
new file mode 100644
index 0000000..32e74c9
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/global-review/index.vue
@@ -0,0 +1,487 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:globalReview:title:result') }}
+
+ ({{ subjectCode }} | {{ taskBlindName }})
+
+
+
+
+ {{ $t('trials:globalReview:title:clinicalData') }}
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+ {{ $t('trials:globalReview:button:submit') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:globalReview:title:previousRes') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/index.vue b/src/views/trials/trials-panel/reading/index.vue
new file mode 100644
index 0000000..c5515f0
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/index.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/medical-feedback/components/111.vue b/src/views/trials/trials-panel/reading/medical-feedback/components/111.vue
new file mode 100644
index 0000000..e11f225
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/medical-feedback/components/111.vue
@@ -0,0 +1,497 @@
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+
+ 重阅影响任务列表
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/medical-feedback/components/ChatForm.vue b/src/views/trials/trials-panel/reading/medical-feedback/components/ChatForm.vue
new file mode 100644
index 0000000..7c2aa54
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/medical-feedback/components/ChatForm.vue
@@ -0,0 +1,377 @@
+
+
+
+
+
+
![MM]()
+
![IM]()
+
![IR]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+ {{ $t('trials:medicalFeedback:title:closeReasonEnum') }}{{ $fd('MedicalDialogCloseEnum',record.MedicalDialogCloseEnum) }}
+ {{ $t('trials:medicalFeedback:title:closereasonRemarks') }}{{ record.Content }}
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg1') }}
+
+ {{ record.Questioning }}
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg2') }}
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg3').replace('***', trialReadingCriterionName) }}
+
+ {{ $fd('AuditAdvice', record.AuditAdviceEnum) }}
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg4') }}
+
+
+
+ {{ record.Content }}
+
+
+
+
+ {{ $t('trials:medicalFeedback:title:isEndorse') }}{{ $fd('MedicalReviewDoctorUserIdea', record.DoctorUserIdeaEnum) }}
+
+
+
+ {{ $t('trials:medicalFeedback:title:reason') }}{{ record.DisagreeReason }}
+
+
+
+ {{ $t('trials:medicalFeedback:title:isRequestReread') }}{{ $fd('YesOrNo', record.IsApplyHeavyReading) }}
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg5') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:table:reply') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:loading') }}...
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/medical-feedback/components/FeedbackForm.vue b/src/views/trials/trials-panel/reading/medical-feedback/components/FeedbackForm.vue
new file mode 100644
index 0000000..3a0cc70
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/medical-feedback/components/FeedbackForm.vue
@@ -0,0 +1,528 @@
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:loading') }}...
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:form:influenceList') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/medical-feedback/index.vue b/src/views/trials/trials-panel/reading/medical-feedback/index.vue
new file mode 100644
index 0000000..f1a6053
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/medical-feedback/index.vue
@@ -0,0 +1,457 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('UserType',scope.row.UserTypeEnum) }}
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+
+ {{ $fd('MedicalReviewAuditState', scope.row.AuditState) }}
+
+
+ {{ $fd('MedicalReviewAuditState', scope.row.AuditState) }}
+
+
+ {{ $fd('MedicalReviewAuditState', scope.row.AuditState) }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('AuditAdvice',scope.row.AuditAdviceEnum) }}
+
+
+
+
+
+ {{ $fd('MedicalReviewDoctorUserIdea',scope.row.DoctorUserIdeaEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/AdReview.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/AdReview.vue
new file mode 100644
index 0000000..cc48efe
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/AdReview.vue
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].DictionaryCode, parseInt(scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer )) }}
+ {{ scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer }}
+
+
+
+ {{ $fd('YesOrNo', scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer ) }}
+
+
+ {{ $t('trials:adReview:table:view') }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer ) }}
+
+
+ {{ scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer }}
+
+
+
+
+
+
+
+
+
+ R1
+
+
+
+ R2
+
+
+
+
+
{{ $t('trials:adReview:title:adResult') }}
+
+
+
+
+
+ {{ $fd('ArmEnum', t.ArmEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:adReview:title:loading') }}...
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/ChatForm.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/ChatForm.vue
new file mode 100644
index 0000000..49aa2c2
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/ChatForm.vue
@@ -0,0 +1,405 @@
+
+
+
+
+
+
![MM]()
+
![IM]()
+
![IR]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+ {{ $t('trials:medicalFeedback:title:closeReasonEnum') }}{{ $fd('MedicalDialogCloseEnum',record.MedicalDialogCloseEnum) }}
+ {{ $t('trials:medicalFeedback:title:closereasonRemarks') }}{{ record.Content }}
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg1') }}
+
+ {{ record.Questioning }}
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg2') }}
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg3').replace('***', trialReadingCriterionName) }}
+
+ {{ $fd('AuditAdvice', record.AuditAdviceEnum) }}
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg4') }}
+
+
+
+ {{ record.Content }}
+
+
+
+
+ {{ $t('trials:medicalFeedback:title:isEndorse') }}{{ $fd('MedicalReviewDoctorUserIdea', record.DoctorUserIdeaEnum) }}
+
+ {{ $t('trials:medicalFeedback:title:reason') }}{{ record.DisagreeReason }}
+
+
+ {{ $t('trials:medicalFeedback:title:isRequestReread') }}{{ $fd('YesOrNo', record.IsApplyHeavyReading) }}
+
+
+
+ {{ $t('trials:medicalFeedback:message:msg5') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:button:reply') }}
+
+
+
+ {{ $t('trials:medicalFeedback:button:close') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:button:reply') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:loading') }}...
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/CloseQC.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/CloseQC.vue
new file mode 100644
index 0000000..ead1392
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/CloseQC.vue
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/Conclusions.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/Conclusions.vue
new file mode 100644
index 0000000..55b9c95
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/Conclusions.vue
@@ -0,0 +1,437 @@
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/GlobalReview.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/GlobalReview.vue
new file mode 100644
index 0000000..ecf409d
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/GlobalReview.vue
@@ -0,0 +1,310 @@
+
+
+
+ {{ $t('trials:medicalFeedback:title:otherReader') }}
+
+
+ {{ auditInfo.GlobalInfo.JudgeTaskName }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
+
+ {{ scope.row.BeforeQuestionList[index].Answer === '-1' ? $t('trials:medicalFeedback:table:unKnow') : scope.row.BeforeQuestionList[index].Answer }}
+ {{ scope.row.BeforeQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
+
+ {{ scope.row.AfterQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.BeforeQuestionList[index].DictionaryCode,parseInt(scope.row.BeforeQuestionList[index].Answer)) }}
+
+ {{ scope.row.BeforeQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+ {{ $fd('ReadingYesOrNo',parseInt(scope.row.AgreeOrNot[0].Answer)) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAssessType(scope.row.AfterQuestionList[index].Answer) }}
+
+
+ {{ $fd(scope.row.AfterQuestionList[index].DictionaryCode,parseInt(scope.row.AfterQuestionList[index].Answer)) }}
+
+ {{ scope.row.AfterQuestionList[index].Answer }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/HistoricAssessment.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/HistoricAssessment.vue
new file mode 100644
index 0000000..ec7c38e
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/HistoricAssessment.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/Issues.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/Issues.vue
new file mode 100644
index 0000000..144c829
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/Issues.vue
@@ -0,0 +1,161 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/MedicalAudit.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/MedicalAudit.vue
new file mode 100644
index 0000000..395761c
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/MedicalAudit.vue
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:title:result') }}({{ auditInfo.SubjectCode }} | {{ rowData.TaskName }})
+
+
+
+
+
{{ $t('trials:medicalFeedback:title:auditQuestions') }}
+
+
+
+
+
{{ $t('trials:medicalFeedback:title:conclusions') }}
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+ {{ $t('trials:medicalFeedback:title:qaRecord') }}
+
+
+
+ {{ $t('trials:medicalFeedback:button:auditCompleted') }}
+
+
+
+ {{ $t('trials:medicalFeedback:button:nextTask') }}
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+
+
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/OncologyReview.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/OncologyReview.vue
new file mode 100644
index 0000000..3bcdc04
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/OncologyReview.vue
@@ -0,0 +1,215 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.QuestionList[index].DictionaryCode,parseInt(scope.row.QuestionList[index].Answer)) }}
+
+
+ {{ scope.row.QuestionList.length>index?scope.row.QuestionList[index].Answer:'' }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsHaveChange ) }}
+
+
+ {{ $t('trials:oncologyReview:title:view') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAssessType(scope.row.EvaluationResult) }}
+
+
+
+
+
+
+
+ {{ oncologyInfo.TrialEvaluationReason }}
+
+
+
+ {{ $t('trials:oncologyReview:title:reason') }}
+ *
+
+
+
+
+
+
+ {{ scope.row.EvaluationReason }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/components/VisitReview.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/components/VisitReview.vue
new file mode 100644
index 0000000..521390e
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/components/VisitReview.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.JudgeQuestionAnswerInfoList[index].Answer?$fd(scope.row.JudgeQuestionAnswerInfoList[index].DictionaryCode,parseInt(scope.row.JudgeQuestionAnswerInfoList[index].Answer)):'' }}
+
+
+ {{ scope.row.JudgeQuestionAnswerInfoList.length>index?scope.row.JudgeQuestionAnswerInfoList[index].Answer:'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('UserType', scope.row.UserTypeEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/mim-medical-audit/index.vue b/src/views/trials/trials-panel/reading/mim-medical-audit/index.vue
new file mode 100644
index 0000000..d25adfe
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/mim-medical-audit/index.vue
@@ -0,0 +1,688 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('UserType',scope.row.DoctorUser.UserTypeEnum) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsTakeEffect', scope.row.IsInvalid) }}
+
+
+ {{ $fd('IsTakeEffect', scope.row.IsInvalid) }}
+
+
+
+
+
+
+
+ {{ $fd('MedicalReviewAuditState', scope.row.AuditState) }}
+
+
+ {{ $fd('MedicalReviewAuditState', scope.row.AuditState) }}
+
+
+ {{ $fd('MedicalReviewAuditState', scope.row.AuditState) }}
+
+
+
+
+
+
+ {{ $fd('AuditAdvice',scope.row.AuditAdviceEnum) }}
+
+
+
+
+
+ {{ $fd('MedicalReviewDoctorUserIdea',scope.row.DoctorUserIdeaEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/AdEcrf.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/AdEcrf.vue
new file mode 100644
index 0000000..3a26cf7
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/AdEcrf.vue
@@ -0,0 +1,237 @@
+
+
+
+
+ 历史评判结果
+
+
+
+
+
+
+
+
+
+
+ 裁判结果
+
+
+
+
+ {{ t.armEnum }}
+
+
+
+
+
+
+
+ 保存
+ 提交
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/AdReview.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/AdReview.vue
new file mode 100644
index 0000000..ba765d8
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/AdReview.vue
@@ -0,0 +1,544 @@
+
+
+
+
+ 受试者:
+ {{ subjectCode }}
+ ({{ taskBlindName }})
+
+
+
+
+ 评估结果
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer ) }}
+
+ 查看详情
+
+
+
+ {{ $fd('YesOrNo', scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer ) }}
+
+
+ {{ scope.row.VisitTaskInfoList[j.index].JudgeQuestionList[i].Answer }}
+
+
+
+
+
+
+
+
+ R1
+
+
+ R2
+
+
+
+
+
+
+
+ 裁判结果
+
+
+
+
+
+ {{ $fd('ArmEnum', t.ArmEnum) }}
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 加载中...
+
+
+
+
+
+
+ 保存
+ 提交
+
+
+
+
+
+
+
+
+ 既往裁判评估
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/Criterions.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/Criterions.vue
new file mode 100644
index 0000000..fb00995
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/Criterions.vue
@@ -0,0 +1,73 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/ECRF.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/ECRF.vue
new file mode 100644
index 0000000..07e5675
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/ECRF.vue
@@ -0,0 +1,323 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ q.PageName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+ {{ $t('common:button:submit') }}
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/EditGlobalForm.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/EditGlobalForm.vue
new file mode 100644
index 0000000..e97d609
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/EditGlobalForm.vue
@@ -0,0 +1,155 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/FormItem.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/FormItem.vue
new file mode 100644
index 0000000..10a98ed
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/FormItem.vue
@@ -0,0 +1,340 @@
+
+
+
+
+ {{ question.GroupName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, qs)})"
+ >
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+ {{item.label}}
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingUnit:qsList:message:loading') }}...
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/GlobalReview.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/GlobalReview.vue
new file mode 100644
index 0000000..3d544ce
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/GlobalReview.vue
@@ -0,0 +1,324 @@
+
+
+
+
+ {{ $t('trials:auditRecord:table:subject') }}:
+ {{ subjectCode }}
+ ({{ taskBlindName }})
+
+
+
+
+
+ {{ $t('trials:globalReview:table:evaluationRes') }}
+
+
+
+
+ {{ $t('common:button:confirm') }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.BeforeQuestionList.length>index?scope.row.BeforeQuestionList[index].Answer:'' }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.AfterQuestionList.length>index?scope.row.AfterQuestionList[index].Answer:'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 既往全局阅片结果
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/OncologyReview.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/OncologyReview.vue
new file mode 100644
index 0000000..07dbfa7
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/OncologyReview.vue
@@ -0,0 +1,427 @@
+
+
+
+
+ 受试者:
+ {{ subjectCode }}
+ ({{ taskBlindName }})
+
+
+
+
+ 肿瘤学阅片
+
+
+
+ 临床数据
+
+
+ 保存
+
+
+ 确认
+
+
+
+
+
+
+
+
+
+ {{ scope.row.QuestionList.length>index?scope.row.QuestionList[index].Answer:'' }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsHaveChange ) }}
+
+ 查看详情
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.EvaluationResult }}
+
+
+
+
+
+
+
+ {{ oncologyInfo.TrialEvaluationReason }}
+
+
+ 原因
+ *
+
+
+
+
+
+
+ {{ scope.row.EvaluationReason }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 既往肿瘤学阅片结果
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/components/VisitReview.vue b/src/views/trials/trials-panel/reading/none-dicoms/components/VisitReview.vue
new file mode 100644
index 0000000..1c900b4
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/components/VisitReview.vue
@@ -0,0 +1,388 @@
+
+
+
+
+ {{$t('trials:auditRecord:table:subject')}}:{{ otherInfo.SubjectCode }}
+ ({{ otherInfo.TaskBlindName }})
+
+
+
+
+
+
+
+ {{ study.CodeView }}
+ {{ study.Modality }}
+ {{ getBodyPart(study.BodyPart) }}
+
+
+
+ {{ $t('trials:audit:message:noData') }}
+
+
+
+ {{ `${j+1}. ${item.FileName}` }}
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:audit:message:noData')}}
+
+
+
+ {{ `${j+1}. ${task.TaskBlindName}` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:crcUpload:label:clinicalData') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/none-dicoms/index.vue b/src/views/trials/trials-panel/reading/none-dicoms/index.vue
new file mode 100644
index 0000000..d1e0526
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/none-dicoms/index.vue
@@ -0,0 +1,230 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/oncology-review/index.vue b/src/views/trials/trials-panel/reading/oncology-review/index.vue
new file mode 100644
index 0000000..47fa38e
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/oncology-review/index.vue
@@ -0,0 +1,532 @@
+
+
+
+
+
+ {{ $t('trials:oncologyReview:title:subject') }}
+ {{ subjectCode }}
+ ({{ taskBlindName }})
+
+
+
+
+
+
{{ $t('trials:oncologyReview:title:oncologyReview') }}
+
+
+
+
+
+ {{ $t('trials:oncologyReview:button:clinicalData') }}
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+ {{ $t('common:button:submit') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd(scope.row.QuestionList[index].DictionaryCode,parseInt(scope.row.QuestionList[index].Answer)) }}
+
+
+ {{ scope.row.QuestionList.length>index?scope.row.QuestionList[index].Answer:'' }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsHaveChange ) }}
+
+
+ {{ $t('trials:oncologyReview:title:view') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getAssessType(scope.row.EvaluationResult) }}
+
+
+
+
+
+
+
+ {{ oncologyInfo.TrialEvaluationReason }}
+
+
+
+ {{ $t('trials:oncologyReview:title:reason') }}
+ *
+
+
+
+
+
+
+ {{ scope.row.EvaluationReason }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:oncologyReview:title:previousRes') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pending-review/components/AuditForm.vue b/src/views/trials/trials-panel/reading/pending-review/components/AuditForm.vue
new file mode 100644
index 0000000..ce5ca2d
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pending-review/components/AuditForm.vue
@@ -0,0 +1,317 @@
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
![]()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:loading') }}...
+
+
+
+
+
+
+ {{ $t('common:button:view') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pending-review/components/ChatForm.vue b/src/views/trials/trials-panel/reading/pending-review/components/ChatForm.vue
new file mode 100644
index 0000000..bf81cff
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pending-review/components/ChatForm.vue
@@ -0,0 +1,326 @@
+
+
+
+
+
+
![PI]()
+
![SR]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+ {{ $t('trials:auditRecord:title:auditResult') }} {{ $fd('PIAuditState',record.PIAuditState) }}
+ {{ $t('trials:auditRecord:title:notAgreeReason') }} {{ record.NotAgreeReason }}
+ {{ $t('trials:auditRecord:title:note') }} {{ record.PIAuditNote }}
+
+
+ {{ $t('trials:auditRecord:title:screenshot') }}
+
+
+
+
+
+
+
+ {{ record.ReplyContent }}
+
+
+ {{ record.ReplyContent }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:pendingReview:button:modify') }}
+
+
+
+ {{ $t('trials:medicalFeedback:table:reply') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pending-review/components/EnrollForm.vue b/src/views/trials/trials-panel/reading/pending-review/components/EnrollForm.vue
new file mode 100644
index 0000000..27136ce
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pending-review/components/EnrollForm.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ $t('common:button:view') }}
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pending-review/components/PdForm.vue b/src/views/trials/trials-panel/reading/pending-review/components/PdForm.vue
new file mode 100644
index 0000000..9543673
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pending-review/components/PdForm.vue
@@ -0,0 +1,113 @@
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ $t('common:button:view') }}
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pending-review/index.vue b/src/views/trials/trials-panel/reading/pending-review/index.vue
new file mode 100644
index 0000000..1eb68a4
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pending-review/index.vue
@@ -0,0 +1,607 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:pendingReview:title:urgentReason')} ${$fd('TaskUrgentType',scope.row.TaskUrgentType)}` }}
+ {{ scope.row.TaskUrgentRemake?`${$t('trials:pendingReview:title:urgentNote')} ${scope.row.TaskUrgentRemake}`:'' }}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ scope.row.UserTypeShortName }}
+
+
+
+
+
+
+ {{ scope.row.UserName }}({{ scope.row.FullName }})
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+
+
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+
+
+
+
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+
+
+
+ {{ item.DictionaryCode ? $fd(item.DictionaryCode, parseInt(scope.row.PIReadingResultList.find(v => v.QuestionId === item.QuestionId).Answer)) : scope.row.PIReadingResultList.find(v => v.QuestionId === item.QuestionId).Answer}}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnrollment) }}
+
+ {{ $fd('YesOrNo', scope.row.IsEnrollment) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsPDConfirm) }}
+
+ {{ $fd('YesOrNo', scope.row.IsPDConfirm) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pm-medical-feedback/components/AddOrEditFilter.vue b/src/views/trials/trials-panel/reading/pm-medical-feedback/components/AddOrEditFilter.vue
new file mode 100644
index 0000000..f419961
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pm-medical-feedback/components/AddOrEditFilter.vue
@@ -0,0 +1,136 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pm-medical-feedback/components/AssignMedicalReviewTask.vue b/src/views/trials/trials-panel/reading/pm-medical-feedback/components/AssignMedicalReviewTask.vue
new file mode 100644
index 0000000..086a8ff
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pm-medical-feedback/components/AssignMedicalReviewTask.vue
@@ -0,0 +1,110 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pm-medical-feedback/components/GenerateMedicalReviewTaskList.vue b/src/views/trials/trials-panel/reading/pm-medical-feedback/components/GenerateMedicalReviewTaskList.vue
new file mode 100644
index 0000000..2ca8a08
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pm-medical-feedback/components/GenerateMedicalReviewTaskList.vue
@@ -0,0 +1,508 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{$t('trials:pmMedicalReview:select:batchAllocation')}}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.TaskName}}
+
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+
+
+
+
+ {{scope.row.ReadingDuration}}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsGeneratedJudge) }}
+ {{ $fd('YesOrNo', scope.row.IsGeneratedJudge) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {AssignMedicalReviewTaskVisible = false}" @getList="getList" />
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pm-medical-feedback/components/ReAssignMedicalReviewTask.vue b/src/views/trials/trials-panel/reading/pm-medical-feedback/components/ReAssignMedicalReviewTask.vue
new file mode 100644
index 0000000..9b0e6b5
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pm-medical-feedback/components/ReAssignMedicalReviewTask.vue
@@ -0,0 +1,121 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/pm-medical-feedback/index.vue b/src/views/trials/trials-panel/reading/pm-medical-feedback/index.vue
new file mode 100644
index 0000000..27824c8
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/pm-medical-feedback/index.vue
@@ -0,0 +1,693 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+ {{$t('trials:pmMedicalReview:button:select')}}
+
+
+
+ {{$t('trials:pmMedicalReview:button:setInvalid')}}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.TaskName}}
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{$fd('UserType',scope.row.DoctorUser.UserTypeEnum)}}
+
+
+
+
+
+
+ {{scope.row.DoctorUser.UserName}}({{scope.row.DoctorUser.FullName}})
+
+
+
+
+
+
+
+
+
+ {{scope.row.MedicalManagerUser.UserName}}({{scope.row.MedicalManagerUser.FullName}})
+
+
+
+
+
+
+
+
+
+ {{$fd('IsTakeEffect', scope.row.IsInvalid)}}
+
+
+ {{$fd('IsTakeEffect', scope.row.IsInvalid)}}
+
+
+
+
+
+
+ {{$fd('MedicalReviewAuditState', scope.row.AuditState)}}
+ {{$fd('MedicalReviewAuditState', scope.row.AuditState)}}
+ {{$fd('MedicalReviewAuditState', scope.row.AuditState)}}
+
+
+
+
+
+ {{$fd('AuditAdvice', scope.row.AuditAdviceEnum)}}
+
+
+
+
+
+ {{$fd('MedicalReviewDoctorUserIdea', scope.row.DoctorUserIdeaEnum)}}
+ {{$fd('MedicalReviewDoctorUserIdea', scope.row.DoctorUserIdeaEnum)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {AssignMedicalReviewTaskVisible = false}" @getList="getList" />
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reReading-tracking/index.vue b/src/views/trials/trials-panel/reading/reReading-tracking/index.vue
new file mode 100644
index 0000000..eb1df82
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reReading-tracking/index.vue
@@ -0,0 +1,1187 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+
+
+
+
+
+
+
+ {{ scope.row.OriginalReReadingTask.UserTypeShortName }}
+
+
+
+
+
+
+ {{ scope.row.OriginalReReadingTask.UserName }}({{ scope.row.OriginalReReadingTask.FullName }})
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}
+ {{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.RequestReReadingRejectReason }}
+
+ {{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
+
{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
+
+
+
+
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/read-task-allocation/components/AddOrEditTaskAllocationRule.vue b/src/views/trials/trials-panel/reading/read-task-allocation/components/AddOrEditTaskAllocationRule.vue
new file mode 100644
index 0000000..2034b74
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/read-task-allocation/components/AddOrEditTaskAllocationRule.vue
@@ -0,0 +1,132 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/read-task-allocation/components/ClearAudienceList.vue b/src/views/trials/trials-panel/reading/read-task-allocation/components/ClearAudienceList.vue
new file mode 100644
index 0000000..8fd6253
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/read-task-allocation/components/ClearAudienceList.vue
@@ -0,0 +1,221 @@
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:clearReader:title:clearAll')}}
+
+
+
+
+ {{$t('trials:reviewAssign:clearReader:title:r1')}}
+
+ {{findDoctorUser(list, 0).DoctorUser.UserName}}({{findDoctorUser(list, 0).DoctorUser.FullName}})
+
+
+
+
+ {{$t('trials:reviewAssign:clearReader:title:r1')}}
+
+ {{findDoctorUser(list, 1).DoctorUser.UserName}}({{findDoctorUser(list, 1).DoctorUser.FullName}})
+
+
+
+
+ {{$t('trials:reviewAssign:clearReader:title:r2')}}
+
+ {{findDoctorUser(list, 2).DoctorUser.UserName}}({{findDoctorUser(list, 2).DoctorUser.FullName}})
+
+
+
+
+ {{$t('trials:reviewAssign:clearReader:title:ad')}}
+
+ {{findDoctorUser(list, 3).DoctorUser.UserName}}({{findDoctorUser(list, 3).DoctorUser.FullName}})
+
+
+
+
+ {{$t('trials:reviewAssign:clearReader:title:O1')}}
+
+ {{findDoctorUser(list, 4).DoctorUser.UserName}}({{findDoctorUser(list, 4).DoctorUser.FullName}})
+
+
+
+
+
+ {{$t('trials:reviewAssign:clearReader:title:msg1')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/read-task-allocation/components/ManualAllocationTable.vue b/src/views/trials/trials-panel/reading/read-task-allocation/components/ManualAllocationTable.vue
new file mode 100644
index 0000000..615edc9
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/read-task-allocation/components/ManualAllocationTable.vue
@@ -0,0 +1,428 @@
+
+
+
+
+
+ {{$t('trials:reviewAssign:assignReader:title:readingModel')}}
+ {{ $fd('ReadingMethod', readingType) }}
+
+
+
+ {{$t('trials:reviewAssign:assignReader:title:r1')}}
+
+
+
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:assignReader:title:r1')}}
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:assignReader:title:r2')}}
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:assignReader:title:ad')}}
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:assignReader:title:o1')}}
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.DoctorUser.UserName}(${scope.row.DoctorUser.FullName})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', item) + ' & ' + $fd('ReadingCategory', 2) }}
+ {{ $fd('ReadingCategory', item) }}
+ {{ $fd('ReadingCategory', item) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/read-task-allocation/index.vue b/src/views/trials/trials-panel/reading/read-task-allocation/index.vue
new file mode 100644
index 0000000..e81ee80
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/read-task-allocation/index.vue
@@ -0,0 +1,1000 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:reviewAssign:button:assignRules') }}
+
+
+
+ {{ $t('trials:reviewAssign:button:manualAllocation') }}
+
+
+
+ {{ $t('trials:reviewAssign:button:visitReadingTasks') }}
+
+
+
+ {{$t('trials:reviewAssign:button:adReadingTasks')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.VisitTaskTypeCount}}
+
+
+
+
+
+ {{scope.row.GlobalTaskTypeCount}}
+
+
+
+
+
+ {{scope.row.JudgeTaskTypeCount}}
+
+
+
+
+
+ {{scope.row.OncologyTaskTypeCount}}
+
+
+
+
+
+
+
+ {{ `${findDoctorUser(scope.row.NowDoctorUserList, 0).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 1).DoctorUser.FullName})` }}
+
+
+
+
+
+
+
+
+
+ {{ `${findDoctorUser(scope.row.NowDoctorUserList, 1).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 1).DoctorUser.FullName})` }}
+
+
+
+
+
+
+
+
+
+ {{ `${findDoctorUser(scope.row.NowDoctorUserList, 2).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 2).DoctorUser.FullName})` }}
+
+
+
+
+
+
+
+
+
+ {{ `${findDoctorUser(scope.row.NowDoctorUserList, 3).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 3).DoctorUser.FullName})` }}
+
+
+
+
+
+
+
+
+
+ {{ `${findDoctorUser(scope.row.NowDoctorUserList, 4).DoctorUser.UserName}(${findDoctorUser(scope.row.NowDoctorUserList, 4).DoctorUser.FullName})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:allocationRules:title:readersList')}}
+
+
+
+
+
+
+
+ {{ `${scope.row.DoctorUser.UserName}(${scope.row.DoctorUser.FullName})` }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', item) + ' & ' + $fd('ReadingCategory', 2) }}
+
+ {{ $fd('ReadingCategory', item) }}
+ {{ $fd('ReadingCategory', item) }}
+
+
+
+
+
+
+
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:allocationRules:title:subsequentAllocationRules')}}
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:allocationRules:message1')}} {{$fd('AutoAssignDefaultState', TrialTaskInfo.FollowVisitAutoAssignDefaultState)}}
+
+
+
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:allocationRules:message3')}} {{$fd('AutoAssignDefaultState', TrialTaskInfo.FollowGlobalVisitAutoAssignDefaultState)}}
+
+
+
+
+
+
+
+
+
+ {{$t('trials:reviewAssign:allocationRules:message4')}} {{$fd('AutoAssignDefaultState', TrialTaskInfo.FollowJudgeTaskAutoAssignDefaultState)}}
+
+
+
+
+
+
+
+
+
+ {taskAllocationRuleVisible = false}" @getList="openAllocationConfigVisible" />
+
+
+
+ {manualAllocationVisible = false}" @getList="getList">
+
+
+
+ {ClearAudienceVisible = false}" @getList="getList">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/read-task/components/ChatForm.vue b/src/views/trials/trials-panel/reading/read-task/components/ChatForm.vue
new file mode 100644
index 0000000..0b2ac78
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/read-task/components/ChatForm.vue
@@ -0,0 +1,278 @@
+
+
+
+
+
+
![PI]()
+
![SR]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+ 审核结果:{{ $fd('PIAuditState',record.PIAuditState) }}
+ 不认可原因:{{ record.NotAgreeReason }}
+ 备注:{{ record.PIAuditNote }}
+
+ 相关截图如下:
+
+ -
+
+
+
+
+
+
+
+
+ {{ record.ReplyContent }}
+
+
+ {{ record.ReplyContent }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:table:reply') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:message:loading') }}...
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/read-task/index.vue b/src/views/trials/trials-panel/reading/read-task/index.vue
new file mode 100644
index 0000000..bdf97e3
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/read-task/index.vue
@@ -0,0 +1,671 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{scope.row.UserName}}({{scope.row.FullName}})
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+
+
+
+
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readTask:title:applyReason') }}
+
+
+
+
+ {{ $t('trials:readTask:option:errorRecords') }}
+
+ {{ $t('trials:readTask:option:other') }}
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ $t('trials:readTask:title:influenceList') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reading-page/index.vue b/src/views/trials/trials-panel/reading/reading-page/index.vue
new file mode 100644
index 0000000..dc46ae4
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reading-page/index.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reading-task/components/FormItem.vue b/src/views/trials/trials-panel/reading/reading-task/components/FormItem.vue
new file mode 100644
index 0000000..2ab798a
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reading-task/components/FormItem.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+
+ {formItemChange(val, question)})"
+ >
+ {{ val }}
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reading-task/components/QuestionForm.vue b/src/views/trials/trials-panel/reading/reading-task/components/QuestionForm.vue
new file mode 100644
index 0000000..0ec3a67
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reading-task/components/QuestionForm.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
{{ question.group }}
+
+
+
+ 取消
+ 提交
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reading-task/index.vue b/src/views/trials/trials-panel/reading/reading-task/index.vue
new file mode 100644
index 0000000..508ed5a
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reading-task/index.vue
@@ -0,0 +1,356 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.SuggesteFinishedTime? scope.row.SuggesteFinishedTime.split(':')[0] + ':00:00':'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ randomReadInfo.UnReadTaskCount }}
+
+
+
+
+
+ {{ randomReadInfo.FinishTaskCount }}
+
+
+
+
+
+
+ {{ $t('trials:pendingReadingTasks:button:beginRandomReview') }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reading-tracking/components/RefereeRules.vue b/src/views/trials/trials-panel/reading/reading-tracking/components/RefereeRules.vue
new file mode 100644
index 0000000..c4878c4
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reading-tracking/components/RefereeRules.vue
@@ -0,0 +1,314 @@
+/* eslint-disable */
+
+
+
+
+
+ {{itemC.ReadingQuestionCriterionTrialName}}
+
+
+
+
+ Q{{index + 1}}:{{item.QuestionName}}
+
+
+ 应用
+ 重置
+
+
+ {{ item.label }}
+
+
+
+
+ 添加规则
+
+
+
+
+ {{scope.$index + 1}}
+
+
+
+
+ {{scope.row.AnswerGroupA.toString()}}
+
+
+
+
+ {{scope.row.AnswerGroupB.toString()}}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{item}}
+
+
当前选择答案分组: {{QuestionList[index].grouping.toString().replaceAll(',', '|')}} 添加分组
+
+
分组: {return tagClose2(index, indexA)}" v-for="itemA of QuestionList[index].AnswerGroup2List" style="margin-right:10px;">{{itemA}}
+
+
+
+
+
+
+
+
+
+ A{{index+1}}:{{item}}
+
+
+
+
+ A{{index+1}}:{{item}}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reading-tracking/components/exportList.vue b/src/views/trials/trials-panel/reading/reading-tracking/components/exportList.vue
new file mode 100644
index 0000000..3155a6e
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reading-tracking/components/exportList.vue
@@ -0,0 +1,125 @@
+
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+ {{scope.$index + 1}}
+
+
+
+
+
+ {{ scope.row.FileName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reading-tracking/index.vue b/src/views/trials/trials-panel/reading/reading-tracking/index.vue
new file mode 100644
index 0000000..d84ddea
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reading-tracking/index.vue
@@ -0,0 +1,1284 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{`加急原因:${$fd('TaskUrgentType',scope.row.TaskUrgentType)}`}}
+ {{scope.row.TaskUrgentRemake?`备注:${scope.row.TaskUrgentRemake}`:''}}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.TaskName}}
+
+
+
+
+
+
+
+
+ {{$fd('CompleteClinicalDataEnum', scope.row.CompleteClinicalDataEnum)}}
+
+
+ {{$fd('CompleteClinicalDataEnum', scope.row.CompleteClinicalDataEnum)}}
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+
+
+ {{ scope.row.UserTypeShortName }}
+
+
+
+
+
+
+ {{ scope.row.UserName }}({{ scope.row.FullName }})
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+
+
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+ {{ $fd('ReReadingApplyState', scope.row.ReReadingApplyState) }}
+
+
+
+
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:reviewTrack:applyReread:title:applyReason')}}
+
+
+
+
+
+ {{$t('trials:reviewTrack:applyReread:title:ImageRetransfer')}}
+
+ {{$t('trials:reviewTrack:applyReread:title:other')}}
+
+
+
+
+
+
+
+
+ {{$t('trials:reviewTrack:applyReread:title:influencesList')}}
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.TaskName}}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+ {{$t('trials:reviewTrack:applyReread:title:msg1')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.TaskName}}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+ {{$t('trials:reviewTrack:applyReread:title:msg1')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/referee-allocation/components/AddOrEditTaskAllocationRule.vue b/src/views/trials/trials-panel/reading/referee-allocation/components/AddOrEditTaskAllocationRule.vue
new file mode 100644
index 0000000..040ccba
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/referee-allocation/components/AddOrEditTaskAllocationRule.vue
@@ -0,0 +1,123 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+ (%)
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/referee-allocation/index.vue b/src/views/trials/trials-panel/reading/referee-allocation/index.vue
new file mode 100644
index 0000000..4aa43fb
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/referee-allocation/index.vue
@@ -0,0 +1,1563 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('TaskAllocationState', scope.row.TaskAllocationState) }}
+ {{ $fd('TaskAllocationState', scope.row.TaskAllocationState) }}
+
+
+
+
+
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+
+
+
+ {{ scope.row.HistoryReadingDoctorUserList.map(v => `${v.UserName}(${v.FullName})`).toString() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
首次分配规则
+
+ 添加阅片人
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+ {{ scope.row.PlanReadingRatio ? scope.row.PlanReadingRatio + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalSubjectCount > 0 ? (scope.row.SelfApplyedSubjectCount * 100 / scope.row.ApplyedTotalSubjectCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalTaskCount > 0 ? (scope.row.SelfApplyedTaskCount * 100 / scope.row.ApplyedTotalTaskCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.SelfApplyedTaskCount }}
+
+
+
+
+ {{ scope.row.SelfUndoTaskCount }}
+
+
+
+
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+ 后续分配规则
+
+
+
+ 同一病例第二次裁判任务自动分配(在拟分配的阅片人未标记为退出项目状态时)默认状态 已分配
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {taskAllocationRuleVisible = false}" @getList="openAllocationConfigVisible" />
+
+
+
+
+ 分配规则
+
+
+
+ 分配对象
+
+ {{ $fd('TaskAllocateObj', TrialTaskInfo.TaskAllocateObjEnum) }}
+
+
+
+ 备选医生
+
+ {{ TaskAllocationRuleList.length ? TaskAllocationRuleList.map(v => `${v.UserName}(${v.FullName})`).toString().replaceAll(',', '/') : '无' }}
+
+
+ 受试者阅片人最新关系表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+ 自动分配裁判
+
+
+ 手动分配裁判
+
+
+ 清空裁判
+
+
+ 生效
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${item.UserName}(${item.FullName})` }}
+
+
+
+
+
+
+
+
+
+ {{ `${findDoctorUser(scope.row.DoctorUserList, 1).UserName}(${findDoctorUser(scope.row.DoctorUserList, 1).FullName})` }}
+
+
+
+
+
+
+
+
+ {{ `${findDoctorUser(scope.row.DoctorUserList, 2).UserName}(${findDoctorUser(scope.row.DoctorUserList, 2).FullName})` }}
+
+
+
+
+
+
+
+
+ {{ `${findDoctorUser(scope.row.DoctorUserList, 3).UserName}(${findDoctorUser(scope.row.DoctorUserList, 3).FullName})` }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsAssignedDoctorUser) }}
+ {{ $fd('YesOrNo', scope.row.IsAssignedDoctorUser) }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+
+
+
+
+ {{ scope.row.DoctorUserList.length ? scope.row.DoctorUserList[0].AssignTime : '' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 当前项目阅片模式为:{{ $fd('ReadingMethod', ReadingType) }}
+
+
+ 当前选择裁判为:{{ TaskAllocationRuleSelectList.map(v => `${v.UserName}(${v.FullName})`).toString() }}
+
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+ {{ scope.row.PlanReadingRatio ? scope.row.PlanReadingRatio + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalSubjectCount > 0 ? (scope.row.SelfApplyedSubjectCount * 100 / scope.row.ApplyedTotalSubjectCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalTaskCount > 0 ? (scope.row.SelfApplyedTaskCount * 100 / scope.row.ApplyedTotalTaskCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.SelfApplyedTaskCount }}
+
+
+
+
+ {{ scope.row.SelfUndoTaskCount }}
+
+
+
+
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+ {{ scope.row.PlanReadingRatio ? scope.row.PlanReadingRatio + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalSubjectCount > 0 ? (scope.row.SelfApplyedSubjectCount * 100 / scope.row.ApplyedTotalSubjectCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+
+ {{ scope.row.ApplyedTotalSubjectCount + scope.row.WaitApplyTotalSubjectCount > 0 ? ((scope.row.SelfApplyedSubjectCount + scope.row.WaitApplySelfSubjectCount) * 100 / (scope.row.ApplyedTotalSubjectCount + scope.row.WaitApplyTotalSubjectCount)).toFixed(2) + '%' : '0%' }}
+
+
+
+
+
+ {{ scope.row.ApplyedTotalTaskCount > 0 ? (scope.row.SelfApplyedTaskCount * 100 / scope.row.ApplyedTotalTaskCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+
+ {{ scope.row.ApplyedTotalTaskCount + scope.row.WaitApplyTotalTaskCount > 0 ? ((scope.row.SelfApplyedTaskCount + scope.row.WaitApplySelfTaskCount) * 100 / (scope.row.ApplyedTotalTaskCount + scope.row.WaitApplyTotalTaskCount)).toFixed(2) + '%' : '0%' }}
+
+
+
+
+
+ {{ scope.row.SelfApplyedTaskCount }}
+
+
+
+
+ {{ scope.row.SelfApplyedTaskCount + scope.row.WaitApplySelfTaskCount }}
+
+
+
+
+ {{ scope.row.SelfUndoTaskCount }}
+
+
+
+
+ {{ scope.row.SelfUndoTaskCount + scope.row.WaitApplySelfTaskCount }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reread-task/index.vue b/src/views/trials/trials-panel/reading/reread-task/index.vue
new file mode 100644
index 0000000..5737a3c
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reread-task/index.vue
@@ -0,0 +1,430 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.OriginalReReadingTask.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+ {{ $fd('TaskState', scope.row.OriginalReReadingTask.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.OriginalReReadingTask.ReadingCategory) }}
+
+
+
+
+
+
+
+
+ {{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}
+ {{ $fd('RequestReReadingType', scope.row.RequestReReadingType) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.RequestReReadingRejectReason }}
+
+ {{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
+
{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
{{ $fd('RequestReReadingResult', scope.row.RequestReReadingResultEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reviewed/components/ChatForm.vue b/src/views/trials/trials-panel/reading/reviewed/components/ChatForm.vue
new file mode 100644
index 0000000..4bc77d6
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reviewed/components/ChatForm.vue
@@ -0,0 +1,323 @@
+
+
+
+
+
+
![PI]()
+
![SR]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+ {{ $t('trials:auditRecord:title:auditResult') }} {{ $fd('PIAuditState',record.PIAuditState) }}
+ {{ $t('trials:auditRecord:title:notAgreeReason') }} {{ record.NotAgreeReason }}
+ {{ $t('trials:auditRecord:title:note') }} {{ record.PIAuditNote }}
+
+ {{ $t('trials:auditRecord:title:screenshot') }}
+
+
+
+
+
+
+
+ {{ record.ReplyContent }}
+
+
+ {{ record.ReplyContent }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:medicalFeedback:table:reply') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/reviewed/index.vue b/src/views/trials/trials-panel/reading/reviewed/index.vue
new file mode 100644
index 0000000..a0c210f
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/reviewed/index.vue
@@ -0,0 +1,383 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+ {{ scope.row.UserName }}({{ scope.row.FullName }})
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+ {{ $fd('PIAuditState', scope.row.PIAuditState) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnrollment) }}
+
+ {{ $fd('YesOrNo', scope.row.IsEnrollment) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsPDConfirm) }}
+
+ {{ $fd('YesOrNo', scope.row.IsPDConfirm) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/task-allocation/components/AddOrEditTaskAllocationRule.vue b/src/views/trials/trials-panel/reading/task-allocation/components/AddOrEditTaskAllocationRule.vue
new file mode 100644
index 0000000..a3cc43a
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/task-allocation/components/AddOrEditTaskAllocationRule.vue
@@ -0,0 +1,124 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+ (%)
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/reading/task-allocation/index.vue b/src/views/trials/trials-panel/reading/task-allocation/index.vue
new file mode 100644
index 0000000..81da261
--- /dev/null
+++ b/src/views/trials/trials-panel/reading/task-allocation/index.vue
@@ -0,0 +1,1525 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('TaskAllocationState', scope.row.TaskAllocationState) }}
+ {{ $fd('TaskAllocationState', scope.row.TaskAllocationState) }}
+
+
+
+
+
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
首次分配规则
+
+ 添加阅片人
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+ {{ scope.row.PlanReadingRatio ? scope.row.PlanReadingRatio + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalSubjectCount > 0 ? (scope.row.SelfApplyedSubjectCount * 100 / scope.row.ApplyedTotalSubjectCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalTaskCount > 0 ? (scope.row.SelfApplyedTaskCount * 100 / scope.row.ApplyedTotalTaskCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.SelfApplyedTaskCount }}
+
+
+
+
+ {{ scope.row.SelfUndoTaskCount }}
+
+
+
+
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+ 后续分配规则
+
+
+
+ 同一病例随访阅片任务自动分配(在拟分配的阅片人未标记为退出项目状态时)默认状态 已分配
+
+
+
+
+
+
+
+
+
+ 同一病例全局任务自动分配(在拟分配的阅片人未标记为退出项目状态时 默认状态 已分配
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {taskAllocationRuleVisible = false}" @getList="openAllocationConfigVisible" />
+
+
+
+ 分配规则
+
+
+
+ 分配对象
+
+ {{ $fd('TaskAllocateObj', TrialTaskInfo.TaskAllocateObjEnum) }}
+
+
+
+ 备选医生
+
+ {{ TaskAllocationRuleList.length ? TaskAllocationRuleList.map(v => `${v.UserName}(${v.FullName})`).toString().replaceAll(',', '/') : '无' }}
+
+
+ 受试者阅片人最新关系表
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+ 自动分配
+
+
+ 手动分配
+
+
+ 解除分配
+
+
+ 生效
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${item.UserName}(${item.FullName})` }}
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.DoctorUserList[0].UserName}(${scope.row.DoctorUserList[0].FullName})` }}
+
+
+
+
+
+
+
+
+ {{ `${scope.row.DoctorUserList[1].UserName}(${scope.row.DoctorUserList[1].FullName})` }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsAssignedDoctorUser) }}
+ {{ $fd('YesOrNo', scope.row.IsAssignedDoctorUser) }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+
+
+
+
+
+ {{ scope.row.DoctorUserList.length ? scope.row.DoctorUserList[0].AssignTime : '' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 当前项目阅片模式为:{{ $fd('ReadingMethod', ReadingType) }}
+
+
+ 当前选择阅片人为:组001:{{ `${TaskAllocationRuleSelectList[0].UserName.toString()}(${TaskAllocationRuleSelectList[0].FullName})` }}
+ 组002:{{ `${TaskAllocationRuleSelectList[1].UserName.toString()}(${TaskAllocationRuleSelectList[1].FullName})` }}
+
+
+ 双重阅片模式下,阅片人根据勾选顺序进行分组
+
+
+ 当前选择阅片人为:{{ TaskAllocationRuleSelectList.map(v => `${v.UserName}(${v.FullName})`).toString() }}
+
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+ {{ scope.row.PlanReadingRatio ? scope.row.PlanReadingRatio + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalSubjectCount > 0 ? (scope.row.SelfApplyedSubjectCount * 100 / scope.row.ApplyedTotalSubjectCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalTaskCount > 0 ? (scope.row.SelfApplyedTaskCount * 100 / scope.row.ApplyedTotalTaskCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.SelfApplyedTaskCount }}
+
+
+
+
+ {{ scope.row.SelfUndoTaskCount }}
+
+
+
+
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+ {{ $fd('IsEnable', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+ {{ scope.row.PlanReadingRatio ? scope.row.PlanReadingRatio + '%' : '0%' }}
+
+
+
+
+ {{ scope.row.ApplyedTotalSubjectCount > 0 ? (scope.row.SelfApplyedSubjectCount * 100 / scope.row.ApplyedTotalSubjectCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+
+ {{ scope.row.ApplyedTotalSubjectCount + scope.row.WaitApplyTotalSubjectCount > 0 ? ((scope.row.SelfApplyedSubjectCount + scope.row.WaitApplySelfSubjectCount) * 100 / (scope.row.ApplyedTotalSubjectCount + scope.row.WaitApplyTotalSubjectCount)).toFixed(2) + '%' : '0%' }}
+
+
+
+
+
+ {{ scope.row.ApplyedTotalTaskCount > 0 ? (scope.row.SelfApplyedTaskCount * 100 / scope.row.ApplyedTotalTaskCount).toFixed(2) + '%' : '0%' }}
+
+
+
+
+
+ {{ scope.row.ApplyedTotalTaskCount + scope.row.WaitApplyTotalTaskCount > 0 ? ((scope.row.SelfApplyedTaskCount + scope.row.WaitApplySelfTaskCount) * 100 / (scope.row.ApplyedTotalTaskCount + scope.row.WaitApplyTotalTaskCount)).toFixed(2) + '%' : '0%' }}
+
+
+
+
+
+ {{ scope.row.SelfApplyedTaskCount }}
+
+
+
+
+ {{ scope.row.SelfApplyedTaskCount + scope.row.WaitApplySelfTaskCount }}
+
+
+
+
+ {{ scope.row.SelfUndoTaskCount }}
+
+
+
+
+ {{ scope.row.SelfUndoTaskCount + scope.row.WaitApplySelfTaskCount }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/attachment/components/attachmentForm.vue b/src/views/trials/trials-panel/setting/attachment/components/attachmentForm.vue
new file mode 100644
index 0000000..30b54ab
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/attachment/components/attachmentForm.vue
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:attachment:button:select') }}
+
+
+ ({{ $t('trials:attachment:message:pdf') }})
+
+
+
+
+
+
+
+
+ {{ item.UserType }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/attachment/components/previewFile.vue b/src/views/trials/trials-panel/setting/attachment/components/previewFile.vue
new file mode 100644
index 0000000..88d62e7
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/attachment/components/previewFile.vue
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+ {{ $t('common:message:downloadFile') }}
+ {{ $t('common:button:download') }}
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/attachment/index.vue b/src/views/trials/trials-panel/setting/attachment/index.vue
new file mode 100644
index 0000000..97ef233
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/attachment/index.vue
@@ -0,0 +1,318 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+ {{ $t('common:button:add') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+ {{ scope.row.NeedConfirmedUserTypes?scope.row.NeedConfirmedUserTypes.join(', '):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/email-manage/components/DefaultQS.vue b/src/views/trials/trials-panel/setting/email-manage/components/DefaultQS.vue
new file mode 100644
index 0000000..e651886
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/email-manage/components/DefaultQS.vue
@@ -0,0 +1,352 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+ {{ $t('common:button:reset') }}
+
+
+
+
+ {{ $t('common:button:submit') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TrialCriterionName }}
+
+
+
+
+
+
+ {{ $fd('BusinessModule',scope.row.BusinessModuleEnum) }}
+
+
+
+
+ {{ $fd('Email_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+
+ {{ scope.row.ToUserTypeList.length > 0?scope.row.ToUserTypeList.map(v => $fd('UserType', v)).join('、'):'' }}
+
+
+
+
+
+ {{ scope.row.CopyUserTypeList.length > 0?scope.row.CopyUserTypeList.map(v => $fd('UserType', v)).join('、'):'' }}
+
+
+
+
+ {{ $fd('EmailUrgent',scope.row.EmailUrgentEnum) }}
+
+
+
+
+
+ {{ scope.row.TrialCriterionName }}
+
+
+
+
+
+
+ {{ scope.row.FileName }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
+
+ {{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsAutoSend) }}
+
+ {{ $fd('YesOrNo', scope.row.IsAutoSend) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/email-manage/components/EmailForm.vue b/src/views/trials/trials-panel/setting/email-manage/components/EmailForm.vue
new file mode 100644
index 0000000..15a7d99
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/email-manage/components/EmailForm.vue
@@ -0,0 +1,375 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/email-manage/components/EmailList.vue b/src/views/trials/trials-panel/setting/email-manage/components/EmailList.vue
new file mode 100644
index 0000000..e7338f1
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/email-manage/components/EmailList.vue
@@ -0,0 +1,435 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+ {{ $t('trials:emailManageCfg:button:Default') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TrialCriterionName }}
+
+
+
+
+
+
+ {{ $fd('BusinessModule',scope.row.BusinessModuleEnum) }}
+
+
+
+
+ {{ $fd('Email_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+
+ {{ scope.row.ToUserTypeNameList.length>0?scope.row.ToUserTypeNameList.join('、'):'' }}
+
+
+
+
+
+ {{ scope.row.CopyUserTypeNameList.length>0?scope.row.CopyUserTypeNameList.join('、'):'' }}
+
+
+
+
+ {{ $fd('EmailUrgent',scope.row.EmailUrgentEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.FileName }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
+
+ {{ $fd('YesOrNo', scope.row.IsReturnRequired) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsAutoSend) }}
+
+ {{ $fd('YesOrNo', scope.row.IsAutoSend) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/email-manage/index.vue b/src/views/trials/trials-panel/setting/email-manage/index.vue
new file mode 100644
index 0000000..275f7c0
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/email-manage/index.vue
@@ -0,0 +1,237 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/index.vue b/src/views/trials/trials-panel/setting/index.vue
new file mode 100644
index 0000000..3e4b187
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/index.vue
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/medical-audit/components/DefaultQS.vue b/src/views/trials/trials-panel/setting/medical-audit/components/DefaultQS.vue
new file mode 100644
index 0000000..25b6465
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/medical-audit/components/DefaultQS.vue
@@ -0,0 +1,328 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ if (v) {
+ searchData.CriterionTypeEnum = null
+ }
+ }"
+ >
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+ {{ $t('common:button:reset') }}
+
+
+
+
+ {{ $t('common:button:submit') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('LanguageType', scope.row.LanguageType) }}
+
+
+
+
+
+ {{ $fd('QcType', scope.row.Type) }}
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+
+
+ {{ $fd('CriterionType', scope.row.CriterionTypeEnum) }}
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsGeneral) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/medical-audit/components/FormItem.vue b/src/views/trials/trials-panel/setting/medical-audit/components/FormItem.vue
new file mode 100644
index 0000000..494ca4f
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/medical-audit/components/FormItem.vue
@@ -0,0 +1,141 @@
+
+
+
+ {{ question.GroupName }}
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+
+ {formItemChange(val, question)})"
+ >
+ {{ val }}
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/medical-audit/components/QSForm.vue b/src/views/trials/trials-panel/setting/medical-audit/components/QSForm.vue
new file mode 100644
index 0000000..92fec86
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/medical-audit/components/QSForm.vue
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {typeChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/medical-audit/components/QuestionTpl.vue b/src/views/trials/trials-panel/setting/medical-audit/components/QuestionTpl.vue
new file mode 100644
index 0000000..4e67548
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/medical-audit/components/QuestionTpl.vue
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:medicalFeedbackCfg:message:msg3') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/medical-audit/components/QuestionsPreview.vue b/src/views/trials/trials-panel/setting/medical-audit/components/QuestionsPreview.vue
new file mode 100644
index 0000000..c9f0e83
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/medical-audit/components/QuestionsPreview.vue
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/medical-audit/index.vue b/src/views/trials/trials-panel/setting/medical-audit/index.vue
new file mode 100644
index 0000000..353c790
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/medical-audit/index.vue
@@ -0,0 +1,548 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:preview') }}
+
+
+ {{ $t('trials:qcCfg:button:default') }}
+
+
+ {{ $t('common:button:batchDelete') }}
+
+
+ {{ $t('trials:qcCfg:button:custom') }}
+
+
+ {{ $t('trials:qcCfg:button:confirm') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('LanguageType', scope.row.LanguageType) }}
+
+
+
+
+
+ {{ $fd('QcType', scope.row.Type) }}
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+
+
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/crcForm.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/crcForm.vue
new file mode 100644
index 0000000..8e0b8c0
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/crcForm.vue
@@ -0,0 +1,219 @@
+
+
+
+
+ {{ $t('trials:internalStaff:table:name') }}:
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+ {{ $t('trials:internalStaff:button:assign') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/customSiteForm.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/customSiteForm.vue
new file mode 100644
index 0000000..84dc995
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/customSiteForm.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/site.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/site.vue
new file mode 100644
index 0000000..cba36c3
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/site.vue
@@ -0,0 +1,667 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:sitesList:button:siteResearch') }}
+
+
+
+ {{ $t('trials:sitesList:dialogTitle:assignSite') }}
+
+
+ {{ $t('common:button:export') }}
+
+
+
+ {{ $t('common:button:downloadTpl') }}
+
+
+
+ {{ $t('common:button:upload') }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TrialSiteCode }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.UserNameList.length>0 ? scope.row.UserNameList.join(', ') :'' }}
+
+
+
+
+
+
+ {{ $fd('IsSiteDisable', scope.row.IsDeleted) }}
+ {{ $fd('IsSiteDisable', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+ {{ $t('trials:internalStaff:table:status') }}:
+
+ {{ item.label }}
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:add') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}
+ {{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/siteForm.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/siteForm.vue
new file mode 100644
index 0000000..c207f4a
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/siteForm.vue
@@ -0,0 +1,249 @@
+
+
+
+
+
+ {{ $t('trials:customSite:form:siteName') }}:
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:sitesList:dialogButton:customSite') }}
+
+
+ {{ $t('trials:sitesList:dialogButton:addSite') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/staff.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/staff.vue
new file mode 100644
index 0000000..078e555
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/staff.vue
@@ -0,0 +1,454 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.UserType }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:staff:button:addInternalStaff') }}
+
+
+
+ {{ $t('trials:staff:button:addExternalStaff') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}
+ {{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}
+
+
+
+
+
+ {{ scope.row.JoinTime?moment(scope.row.JoinTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.RemoveTime? moment(scope.row.RemoveTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/staffExternalAdd.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/staffExternalAdd.vue
new file mode 100644
index 0000000..27562ac
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/staffExternalAdd.vue
@@ -0,0 +1,214 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.UserType }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ errorMsg }}
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+ {{ $t('trials:externalStaff:button:saveAndSendEmail') }}
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/staffExternalForm.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/staffExternalForm.vue
new file mode 100644
index 0000000..2b96b30
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/staffExternalForm.vue
@@ -0,0 +1,301 @@
+
+
+
+
+
+ {{ $t('trials:externalStaff:table:name') }}:
+
+
+ {{ $t('trials:externalStaff:table:email') }}:
+
+
+ {{ $t('trials:externalStaff:table:phone') }}:
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:staff:button:sendEmail') }}
+
+
+
+ {{ $t('trials:staff:button:addExternalStaff') }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LastName + '/' + scope.row.FirstName }}
+
+
+
+
+ {{ $fd('UserType',scope.row.UserTypeEnum) }}
+
+
+
+
+
+
+
+ {{ $fd('IsJoin', scope.row.IsJoin) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/staffForm.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/staffForm.vue
new file mode 100644
index 0000000..03396a6
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/staffForm.vue
@@ -0,0 +1,270 @@
+
+
+
+
+
+ {{ $t('trials:staff:table:name') }}:
+
+
+ {{ $t('trials:staff:table:uid') }}:
+
+
+ {{ $t('trials:staff:table:organization') }}:
+
+
+ {{ $t('trials:staff:table:userType') }}:
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:add') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/components/uploadExcel.vue b/src/views/trials/trials-panel/setting/personnel-manage/components/uploadExcel.vue
new file mode 100644
index 0000000..63bc64c
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/components/uploadExcel.vue
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:dialogButton:upload') }}
+
+
+ ({{ $t('trials:consistencyCheck:message:excelFileOnly') }})
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/personnel-manage/index.vue b/src/views/trials/trials-panel/setting/personnel-manage/index.vue
new file mode 100644
index 0000000..cf22ee4
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/personnel-manage/index.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/qc-question/components/DefaultQS.vue b/src/views/trials/trials-panel/setting/qc-question/components/DefaultQS.vue
new file mode 100644
index 0000000..0f16a72
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/qc-question/components/DefaultQS.vue
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+ {{ $t('common:button:reset') }}
+
+
+
+
+ {{ $t('common:button:submit') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('LanguageType', scope.row.LanguageType) }}
+
+
+
+
+
+ {{ $fd('QcType', scope.row.Type) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/qc-question/components/QsForm.vue b/src/views/trials/trials-panel/setting/qc-question/components/QsForm.vue
new file mode 100644
index 0000000..a3b5886
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/qc-question/components/QsForm.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {typeChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/qc-question/index.vue b/src/views/trials/trials-panel/setting/qc-question/index.vue
new file mode 100644
index 0000000..4443164
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/qc-question/index.vue
@@ -0,0 +1,424 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+ {{ $t('trials:qcCfg:button:preview') }}
+
+
+ {{ $t('trials:qcCfg:button:default') }}
+
+
+ {{ $t('trials:qcCfg:button:custom') }}
+
+
+ {{ $t('trials:qcCfg:button:confirm') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('LanguageType', scope.row.LanguageType) }}
+
+
+
+
+
+ {{ $fd('QcType', scope.row.Type) }}
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/ArbitrationRules.vue b/src/views/trials/trials-panel/setting/reading-unit/components/ArbitrationRules.vue
new file mode 100644
index 0000000..0e9cc26
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/ArbitrationRules.vue
@@ -0,0 +1,452 @@
+
+
+/* eslint-disable */
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ item.PageName }}Q{{ index + 1 }}:{{ item.QuestionName }}
+
+
+ {{ $t('common:button:save') }}
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ $t('trials:adRules:button:addRule') }}
+
+
+
+
+
+ {{ scope.$index + 1 }}
+
+
+
+
+
+ {{ QuestionList[index].QuestionGenre === 3 ? scope.row.AnswerGroupA.map(v => $fd(QuestionList[index].DictionaryCode, parseInt(v))).toString() : scope.row.AnswerGroupA.toString() }}
+
+
+
+
+
+ {{ QuestionList[index].QuestionGenre === 3 ? scope.row.AnswerGroupB.map(v => $fd(QuestionList[index].DictionaryCode, parseInt(v))).toString() : scope.row.AnswerGroupB.toString() }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+ {{ item }}
+
+
+
+ {{ $t('trials:adRules:title:selectAnswerGroup') }}
+ {{ QuestionList[index].grouping.toString().replaceAll(',', '|') }}
+ {{ QuestionList[index].grouping.map(v => $d[QuestionList[index].DictionaryCode].find(v1 => v1.value === v).label).toString().replaceAll(',', '|') }}
+
+
+ {{ $t('trials:adRules:title:addGroup') }}
+
+
+
+
分组: {return tagClose2(index, indexA)}">{{ itemA }}
+
+
+ {{ $t('trials:adRules:title:group') }}
+ {return tagClose2(index, indexA)}">
+ {{ itemA.split('|').map(v => $fd(QuestionList[index].DictionaryCode, parseInt(v))).join('|') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item }}
+ {{ item.label }}
+
+
+
+
+
+ {{ item }}
+ {{ item.label }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/BaseDataConfig.vue b/src/views/trials/trials-panel/setting/reading-unit/components/BaseDataConfig.vue
new file mode 100644
index 0000000..d474533
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/BaseDataConfig.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/CriterionDictionary.vue b/src/views/trials/trials-panel/setting/reading-unit/components/CriterionDictionary.vue
new file mode 100644
index 0000000..a9e2ffe
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/CriterionDictionary.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+ {{ scope.$index + 1 }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingUnit:baseDataCfg:title:dictView') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/CriterionDictionaryConfig.vue b/src/views/trials/trials-panel/setting/reading-unit/components/CriterionDictionaryConfig.vue
new file mode 100644
index 0000000..9573bb3
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/CriterionDictionaryConfig.vue
@@ -0,0 +1,171 @@
+
+
+
+
+
+
+ {{ scope.$index + 1 }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/DefaultOrgans.vue b/src/views/trials/trials-panel/setting/reading-unit/components/DefaultOrgans.vue
new file mode 100644
index 0000000..9655a1f
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/DefaultOrgans.vue
@@ -0,0 +1,176 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+ 提交
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('OrganInfo',scope.row.OrganType) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/DictionaryTypeConfig.vue b/src/views/trials/trials-panel/setting/reading-unit/components/DictionaryTypeConfig.vue
new file mode 100644
index 0000000..440201b
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/DictionaryTypeConfig.vue
@@ -0,0 +1,177 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Reset
+ Search
+
+
+
+ New
+
+
+
+
+
+
+
+
+
+
+
+ {return switchChange(event, scope.row)}"
+ />
+
+
+
+
+
+ Edit
+
+
+ Delete
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/DictionaryTypeConfigForm.vue b/src/views/trials/trials-panel/setting/reading-unit/components/DictionaryTypeConfigForm.vue
new file mode 100644
index 0000000..459b33b
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/DictionaryTypeConfigForm.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cancel
+ Save
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/GlobalReading.vue b/src/views/trials/trials-panel/setting/reading-unit/components/GlobalReading.vue
new file mode 100644
index 0000000..fa57595
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/GlobalReading.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+
+ {{ $i18n.locale === 'zh' ? scope.row.ValueCN : scope.row.Value }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsBaseLineUse) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsFollowVisitUse) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+ {{$i18n.locale === 'zh' ? scope.row.raw.ValueCN : scope.row.raw.Value }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/OncologyForm.vue b/src/views/trials/trials-panel/setting/reading-unit/components/OncologyForm.vue
new file mode 100644
index 0000000..2fa2b4f
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/OncologyForm.vue
@@ -0,0 +1,229 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/OrgansTbl.vue b/src/views/trials/trials-panel/setting/reading-unit/components/OrgansTbl.vue
new file mode 100644
index 0000000..6b45108
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/OrgansTbl.vue
@@ -0,0 +1,413 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:readingUnit:baseDataCfg:button:sync') }}
+
+
+
+
+
+
+ {{ $t('trials:readingUnit:baseDataCfg:button:set') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('OrganType', scope.row.OrganType) }}
+
+
+
+
+
+
+ {{ $i18n.locale === 'zh' ? scope.row.Classification : scope.row.ClassificationEN }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $i18n.locale === 'zh' ? scope.row.Part : scope.row.PartEN }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $i18n.locale === 'zh' ? scope.row.TULOC : scope.row.TULOCEN }}
+
+
+
+
+
+ {{ $i18n.locale === 'zh' ? scope.row.TULAT : scope.row.TULATEN }}
+
+
+
+
+
+
+ {{ $fd('ReadingYesOrNo', scope.row.IsLymphNodes) }}
+
+ {{ $fd('ReadingYesOrNo', scope.row.IsLymphNodes) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsCanEditPosition) }}
+
+ {{ $fd('YesOrNo', scope.row.IsCanEditPosition) }}
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo',scope.row.IsEnable) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/PageBreakForm.vue b/src/views/trials/trials-panel/setting/reading-unit/components/PageBreakForm.vue
new file mode 100644
index 0000000..ad13ad6
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/PageBreakForm.vue
@@ -0,0 +1,157 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/PageBreakList.vue b/src/views/trials/trials-panel/setting/reading-unit/components/PageBreakList.vue
new file mode 100644
index 0000000..061c8ee
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/PageBreakList.vue
@@ -0,0 +1,255 @@
+
+
+
+
+ 新增
+
+
+ 预览
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsPublicPage) }}
+ {{ $fd('YesOrNo', scope.row.IsPublicPage) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+ {{ $fd('YesOrNo', scope.row.IsEnable) }}
+
+
+
+
+
+
+
+ 问题表单
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/QuestionFormItem.vue b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionFormItem.vue
new file mode 100644
index 0000000..3d219b0
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionFormItem.vue
@@ -0,0 +1,703 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/QuestionTableFormItem.vue b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionTableFormItem.vue
new file mode 100644
index 0000000..ab1eb1a
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionTableFormItem.vue
@@ -0,0 +1,410 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsForm.vue b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsForm.vue
new file mode 100644
index 0000000..ce3c1ae
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsForm.vue
@@ -0,0 +1,1022 @@
+
+
+
+
+
+ {qsTypeChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {
+ if (v.includes('-1')) {
+ form.FileType = ['-1']
+ } else {
+ }
+ }"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+ CustomCalculateMarkChange(v)"
+ >
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {{ scope.$index + 1 }}
+
+
+
+
+
+ {{ scope.$index === 0 && [1, 2, 3, 4].includes(form.CustomCalculateMark) ? null : $fd('CustomCalculateMark', form.CustomCalculateMark) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ [1, 2, 3, 4].includes(form.CustomCalculateMark) ? $t('trials:readingUnit:qsList:message:msg1') : $t('trials:readingUnit:qsList:message:msg2') }}
+
+
+
+
+ {questionGenreChange(val, form)})"
+ >
+
+ {{ $i18n.locale === 'zh' ? '无' : 'None' }}
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {form.DefaultValue = null}">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {isShowQuestionChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+ {isRequiredChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+ {relevanceQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {isJudgeQuestionChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+ {
+ if (v !== 0) {
+ form.LimitEdit = v
+ }
+ }">
+ {{ item.label }}
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsList.vue b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsList.vue
new file mode 100644
index 0000000..47e8b7b
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsList.vue
@@ -0,0 +1,396 @@
+
+
+
+
+
+ {{ $t('common:button:add') }}
+
+
+
+ {{ $t('common:button:preview') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Criterion_Question_Type',scope.row.Type) }}
+
+
+
+
+
+ {{ $fd('QuestionRequired',scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $fd('ShowQuestion',scope.row.ShowQuestion) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsJudgeQuestion) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsShowInDicom) }}
+
+
+
+
+
+
+
+ {{ $fd('LimitEdit', scope.row.LimitEdit) }}
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingUnit:qsList:title:edit') }}
+
+
+
+ {{ $t('trials:readingUnit:qsList:title:view') }}
+
+
+
+ {{ $t('trials:readingUnit:qsList:title:tableQs') }}
+
+
+
+ {{ $t('trials:readingUnit:qsList:title:delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsPreview.vue b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsPreview.vue
new file mode 100644
index 0000000..1b2179c
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/QuestionsPreview.vue
@@ -0,0 +1,192 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/ReadingCriterions.vue b/src/views/trials/trials-panel/setting/reading-unit/components/ReadingCriterions.vue
new file mode 100644
index 0000000..b9a5734
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/ReadingCriterions.vue
@@ -0,0 +1,158 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingUnit:readingCriterion:title:baseDataCfg') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/ReadingRules.vue b/src/views/trials/trials-panel/setting/reading-unit/components/ReadingRules.vue
new file mode 100644
index 0000000..4d9879f
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/ReadingRules.vue
@@ -0,0 +1,593 @@
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {
+ form.IsArbitrationReading = false
+ }"
+
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {
+ if (v) {
+ form.IsReadingShowSubjectInfo = true
+ form.IsReadingShowPreviousResults = true
+ form.ReadingTaskViewEnum = 0
+ form.IseCRFShowInDicomReading = false
+ } else {
+ form.ReadingTaskViewEnum = 2
+ }
+ }"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {
+ if (v) {
+ } else {
+ form.IseCRFShowInDicomReading = true
+ }
+ }"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/TableQsForm.vue b/src/views/trials/trials-panel/setting/reading-unit/components/TableQsForm.vue
new file mode 100644
index 0000000..a9d4d7c
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/TableQsForm.vue
@@ -0,0 +1,774 @@
+
+
+
+
+ {qsTypeChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ CustomCalculateMarkChange(v)"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+ {{ scope.$index + 1 }}
+
+
+
+
+ {{ scope.$index === 0 && [1, 2, 3, 4].includes(form.CustomCalculateMark) ? null : $fd('CustomCalculateMark', form.CustomCalculateMark) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ [1, 2, 3, 4].includes(form.CustomCalculateMark) ? '请选择同级问题!' : '请选择表格问题下的子问题!' }}
+
+
+
+ {tableQuestionTypeChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {isShowQuestionChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+ {isRequiredChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+ {relevanceQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/components/TableQsList.vue b/src/views/trials/trials-panel/setting/reading-unit/components/TableQsList.vue
new file mode 100644
index 0000000..4098940
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/components/TableQsList.vue
@@ -0,0 +1,269 @@
+
+
+
+
+ {{$t('common:button:new')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Criterion_Question_Type',scope.row.Type) }}
+
+
+
+
+
+ {{ $fd('QuestionRequired',scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $fd('ShowQuestion',scope.row.ShowQuestion) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsShowInDicom) }}
+
+
+
+
+
+
+ {{ $fd('LimitEdit', scope.row.LimitEdit) }}
+
+
+
+
+
+
+
+
+ {{ $t('common:button:edit') }}
+
+
+ {{ $t('trials:readingPeriod:button:view') }}
+
+
+ {{ $t('common:button:delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/index.vue b/src/views/trials/trials-panel/setting/reading-unit/index.vue
new file mode 100644
index 0000000..2fc5213
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/index.vue
@@ -0,0 +1,339 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo',isConfirm) }}
+
+
+
+
+
+ {{ $t('trials:readingUnit:button:sync') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingUnit:button:confirm') }}
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/reading-unit/preview.vue b/src/views/trials/trials-panel/setting/reading-unit/preview.vue
new file mode 100644
index 0000000..7f579c1
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/reading-unit/preview.vue
@@ -0,0 +1,21 @@
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionConfig.vue b/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionConfig.vue
new file mode 100644
index 0000000..28d3773
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionConfig.vue
@@ -0,0 +1,344 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ClinicalQuestionType',scope.row.ClinicalQuestionType) }}
+
+
+
+
+
+ {{ $fd('ShowQuestion',scope.row.ClinicalQuestionShowEnum) }}
+
+
+
+
+ {{ $fd('QuestionRequired',scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $t('common:button:edit') }}
+
+
+ {{ $t('trials:trials-config:clinicalDataQuestionCfg:button:view') }}
+
+
+ {{ $t('trials:trials-config:clinicalDataQuestionCfg:button:tblQuestion') }}
+
+
+ {{ $t('common:button:delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionForm.vue b/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionForm.vue
new file mode 100644
index 0000000..142bf29
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionForm.vue
@@ -0,0 +1,741 @@
+
+
+
+
+ {typeChange(val, form)})">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+ CustomCalculateMarkChange(v)"
+ >
+
+
+ {{ item.label }}
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+ {{ scope.$index + 1 }}
+
+
+
+
+
+ {{ $fd('ClinicalCustomCalculateMark', form.CustomCalculateMark) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {isShowQuestionChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+ {parentQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+ {isRequiredChange(val, form)})"
+ >
+
+ {{ item.label }}
+
+
+
+
+ {relevanceQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionTableForm.vue b/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionTableForm.vue
new file mode 100644
index 0000000..7320a38
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionTableForm.vue
@@ -0,0 +1,437 @@
+
+
+
+
+ {qsTypeChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+ {relevanceQuestionChange(val, form)})"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionTableQsList.vue b/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionTableQsList.vue
new file mode 100644
index 0000000..07f0e87
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/ClinicalQuestionTableQsList.vue
@@ -0,0 +1,226 @@
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ClinicalTableQuestionType',scope.row.ClinicalTableQuestionType) }}
+
+
+
+
+
+ {{ $fd('QuestionRequired',scope.row.IsRequired) }}
+
+
+
+
+
+ {{ $t('trials:trials-config:clinicalDataQuestionCfg:button:view') }}
+
+
+ {{ $t('common:button:edit') }}
+
+
+ {{ $t('common:button:delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/clinicalDataForm.vue b/src/views/trials/trials-panel/setting/trial-config/components/clinicalDataForm.vue
new file mode 100644
index 0000000..42a9dc5
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/clinicalDataForm.vue
@@ -0,0 +1,342 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {form.ClinicalUploadType = null}"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:processCfg:button:select') }}
+
+
+ {{ $t('trials:processCfg:title:docFormat') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/criterionConfig.vue b/src/views/trials/trials-panel/setting/trial-config/components/criterionConfig.vue
new file mode 100644
index 0000000..9a71e8b
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/criterionConfig.vue
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Criterion_Question_Type',scope.row.Type) }}
+
+
+
+
+
+
+ {{ scope.row.IsRequired?'是':'否' }}
+
+
+
+
+ {{ scope.row.IsJudgeQuestion?'是':'否' }}
+
+
+
+
+
+
+
+
+ 编辑
+
+
+ 删除
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/criterionQuestionForm.vue b/src/views/trials/trials-panel/setting/trial-config/components/criterionQuestionForm.vue
new file mode 100644
index 0000000..5667657
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/criterionQuestionForm.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {parentQuestionChange(val, form)})">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/logicalConfig.vue b/src/views/trials/trials-panel/setting/trial-config/components/logicalConfig.vue
new file mode 100644
index 0000000..415ff6b
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/logicalConfig.vue
@@ -0,0 +1,1136 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/processConfig.vue b/src/views/trials/trials-panel/setting/trial-config/components/processConfig.vue
new file mode 100644
index 0000000..5b29b4b
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/processConfig.vue
@@ -0,0 +1,1526 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/questions.vue b/src/views/trials/trials-panel/setting/trial-config/components/questions.vue
new file mode 100644
index 0000000..7029a7c
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/questions.vue
@@ -0,0 +1,95 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/components/urgentConfig.vue b/src/views/trials/trials-panel/setting/trial-config/components/urgentConfig.vue
new file mode 100644
index 0000000..915cdf5
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/components/urgentConfig.vue
@@ -0,0 +1,445 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/trial-config/index.vue b/src/views/trials/trials-panel/setting/trial-config/index.vue
new file mode 100644
index 0000000..b22738d
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/trial-config/index.vue
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/visit-plan/components/visitPlanAdjust.vue b/src/views/trials/trials-panel/setting/visit-plan/components/visitPlanAdjust.vue
new file mode 100644
index 0000000..14cbae0
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/visit-plan/components/visitPlanAdjust.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:adjustRecord:action:download') }}
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/visit-plan/components/visitPlanForm.vue b/src/views/trials/trials-panel/setting/visit-plan/components/visitPlanForm.vue
new file mode 100644
index 0000000..635b2f4
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/visit-plan/components/visitPlanForm.vue
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:visitPlan:table:day') }}
+
+
+ ~
+
+
+ {{ $t('trials:visitPlan:table:day') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ $t('common:button:cancel') }}
+
+
+
+ {{ $t('common:button:save') }}
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/setting/visit-plan/index.vue b/src/views/trials/trials-panel/setting/visit-plan/index.vue
new file mode 100644
index 0000000..2098c7c
--- /dev/null
+++ b/src/views/trials/trials-panel/setting/visit-plan/index.vue
@@ -0,0 +1,350 @@
+
+
+
+
+
+
+
+ {{ $t('common:button:add') }}
+
+
+
+
+
+ {{ $t('trials:visitPlan:button:confirm') }}
+
+
+
+ {{ $t('trials:visitPlan:button:adjustRecord') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsBaseLine) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.VisitWindowLeft}${$t('trials:visitPlan:table:day')} ~ ${scope.row.VisitWindowRight}${$t('trials:visitPlan:table:day')}` }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+ {{ $fd('YesOrNo', scope.row.IsConfirmed) }}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/site/index.vue b/src/views/trials/trials-panel/site/index.vue
new file mode 100644
index 0000000..7d4275d
--- /dev/null
+++ b/src/views/trials/trials-panel/site/index.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/site/site-list/index.vue b/src/views/trials/trials-panel/site/site-list/index.vue
new file mode 100644
index 0000000..d2afc00
--- /dev/null
+++ b/src/views/trials/trials-panel/site/site-list/index.vue
@@ -0,0 +1,250 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.UserNameList.length>0 ? scope.row.UserNameList.join(', ') :'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}
+ {{ $fd('IsUserExitTrial', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/site/site-research/components/users.vue b/src/views/trials/trials-panel/site/site-research/components/users.vue
new file mode 100644
index 0000000..ac77b29
--- /dev/null
+++ b/src/views/trials/trials-panel/site/site-research/components/users.vue
@@ -0,0 +1,407 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.UserType }}
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${scope.row.TrialSiteSurvey.TrialSiteCode}` }}
+
+
+
+ {{ `${scope.row.TrialSiteSurvey.SiteName}` }}
+
+
+
+ {{ `${scope.row.LastName} / ${scope.row.FirstName}` }}
+
+
+
+
+ {{ $fd('SiteSurvey_UserRoles',scope.row.TrialRoleCode) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsGenerateAccount) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('IsJoin', scope.row.IsJoin) }}
+ {{ $fd('IsJoin', scope.row.IsJoin) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/site/site-research/index.vue b/src/views/trials/trials-panel/site/site-research/index.vue
new file mode 100644
index 0000000..8b18a44
--- /dev/null
+++ b/src/views/trials/trials-panel/site/site-research/index.vue
@@ -0,0 +1,419 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:researchRecord:button:questionStaffs') }}
+
+
+
+ {{ $t('trials:researchRecord:button:questionLink') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.ReviewerUser?scope.row.ReviewerUser.RealName:"" }}
+
+
+
+
+
+ {{ $fd('ResearchRecord', scope.row.State) }}
+ {{ $fd('ResearchRecord', scope.row.State) }}
+ {{ $fd('ResearchRecord', scope.row.State) }}
+ {{ $fd('ResearchRecord', scope.row.State) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+ {{ $fd('YesOrNo', scope.row.IsDeleted) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:researchRecord:message:createLinkSuccessfully') }}
+
+
+
+ {{ $t('trials:researchRecord:label:link') }}
+
+
+
+
+
+ {{ $t('trials:researchRecord:button:copyLink') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/study/components/nonDicomPreview.vue b/src/views/trials/trials-panel/study/components/nonDicomPreview.vue
new file mode 100644
index 0000000..709d778
--- /dev/null
+++ b/src/views/trials/trials-panel/study/components/nonDicomPreview.vue
@@ -0,0 +1,94 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/study/index.vue b/src/views/trials/trials-panel/study/index.vue
new file mode 100644
index 0000000..a87226f
--- /dev/null
+++ b/src/views/trials/trials-panel/study/index.vue
@@ -0,0 +1,530 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ DICOM
+ Non-DICOM
+
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:studyList:table:modality')}, ${$t('trials:studyList:table:bodyPart')}, ${$t('trials:studyList:table:studyDate')}, ${$t('trials:studyList:table:count')}` }}
+
+ {{ $t('trials:studyList:table:studyInfo') }}
+
+
+
+
+
{{ scope.row.Modalities }}({{ scope.row.Count }}),
+
N/A,
+
{{ getBodyPart(scope.row.Bodypart) }},
+
N/A,
+
{{ moment(scope.row.StudyTime).format('YYYY-MM-DD') }}
+
N/A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ `${$t('trials:studyList:table:visitName')}, ${$t('trials:studyList:table:visitNum')}` }}
+
+ {{ $t('trials:studyList:table:visit') }}
+
+
+
+ {{ scope.row.VisitName }},
+ N/A,
+ {{ scope.row.VisitNum }}
+
+
+
+
+
+
+
+ {{ `${$t('trials:studyList:table:siteId')}, ${$t('trials:studyList:table:siteName')}` }}
+
+ {{ $t('trials:studyList:table:site') }}
+
+
+
+ {{ scope.row.TrialSiteCode }},
+ N/A,
+ {{ scope.row.TrialSiteAliasName }}
+ N/A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 成功创建分享链接
+
+
+ 链接:
+
+
+ 提取码:
+
+
+ 复制链接及提取码
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/brain-metastasis/components/batchSelectSubject.vue b/src/views/trials/trials-panel/subject/brain-metastasis/components/batchSelectSubject.vue
new file mode 100644
index 0000000..6323298
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/brain-metastasis/components/batchSelectSubject.vue
@@ -0,0 +1,106 @@
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/brain-metastasis/components/selectSubject.vue b/src/views/trials/trials-panel/subject/brain-metastasis/components/selectSubject.vue
new file mode 100644
index 0000000..2c73b4b
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/brain-metastasis/components/selectSubject.vue
@@ -0,0 +1,101 @@
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/brain-metastasis/components/selectSubjectImage.vue b/src/views/trials/trials-panel/subject/brain-metastasis/components/selectSubjectImage.vue
new file mode 100644
index 0000000..4eb97b0
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/brain-metastasis/components/selectSubjectImage.vue
@@ -0,0 +1,445 @@
+
+
+
+ {{$t('trials:readingPeriod:title:screeningRule')}}
+
+ {{$t('trials:readingPeriod:value:IsJoinEvaluation')}}
+
+ {{ $t('trials:readingPeriod:title:visitsList') }}
+
+
+
+
+ {{ scope.row.EarliestScanDate ? moment(scope.row.EarliestScanDate).format('YYYY-MM-DD') : '' }}
+
+
+
+
+ {{ scope.row.LatestScanDate ? moment(scope.row.LatestScanDate).format('YYYY-MM-DD') : '' }}
+
+
+
+
+ {{ $fd('ImageFilterState', scope.row.ImageFilterState) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingPeriod:title:taskList') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.TaskName}}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+ {{ $fd('ReadingTaskState', scope.row.ReadingTaskState) }}
+
+
+
+
+
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+ {{ $fd('ReReadingOrBackOptType', scope.row.OptType) }}
+
+
+
+
+
+ {{ scope.row.DoctorUser.UserName }}({{ scope.row.DoctorUser.FullName }})
+
+
+
+
+
+ {{$t('trials:reviewTrack:applyReread:title:msg1')}}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/brain-metastasis/components/subjectStudy.vue b/src/views/trials/trials-panel/subject/brain-metastasis/components/subjectStudy.vue
new file mode 100644
index 0000000..e7cb098
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/brain-metastasis/components/subjectStudy.vue
@@ -0,0 +1,298 @@
+
+
+ {{ $t('trials:readingPeriod:title:study') }}
+
+
+
+
+
+
+
+
+
+
+ {{ getBodyPart(scope.row.BodyPartForEdit)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingPeriod:title:series') }}
+
+
+
+
+
+
+
+
+
+
+ {{ getBodyPart(scope.row.BodyPartForEdit)}}
+
+
+
+
+
+
+
+ {{ scope.row.StudyTime ? moment(scope.row.StudyTime).format('YYYY-MM-DD') : '' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/brain-metastasis/components/taskAllocation.vue b/src/views/trials/trials-panel/subject/brain-metastasis/components/taskAllocation.vue
new file mode 100644
index 0000000..57b3f75
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/brain-metastasis/components/taskAllocation.vue
@@ -0,0 +1,763 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.TaskName }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+ {{ $fd('TaskState', scope.row.TaskState) }}
+
+
+
+
+
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+ {{ $fd('ReadingCategory', scope.row.ReadingCategory) }}
+
+
+
+
+
+ {{ $fd('TaskAllocationState', scope.row.TaskAllocationState) }}
+ {{ $fd('TaskAllocationState', scope.row.TaskAllocationState) }}
+
+
+
+
+
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+ {{ $fd('ArmEnum', scope.row.ArmEnum) }}
+
+
+
+
+
+ {{ `${scope.row.UserName}(${scope.row.FullName})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/brain-metastasis/index.vue b/src/views/trials/trials-panel/subject/brain-metastasis/index.vue
new file mode 100644
index 0000000..f10a5ba
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/brain-metastasis/index.vue
@@ -0,0 +1,332 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+ {{ $t('trials:subject:action:BatchImageSelect') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Subject_Visit_Status', scope.row.SubjectStatus) }}
+ {{ $fd('Subject_Visit_Status', scope.row.SubjectStatus) }}
+
+
+
+
+
+ {{$fd(scope.row.FinalEvaluationList[index].FinalTranslateDictionaryCode, parseInt(scope.row.FinalEvaluationList[index].Answer))}}
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsJoinEvaluation) }}
+ {{ $fd('YesOrNo', scope.row.IsJoinEvaluation) }}
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsImageFiltering) }}
+ {{ $fd('YesOrNo', scope.row.IsImageFiltering) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/index.vue b/src/views/trials/trials-panel/subject/index.vue
new file mode 100644
index 0000000..7d4275d
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/index.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/AddOrEditCD.vue b/src/views/trials/trials-panel/subject/reading-period/components/AddOrEditCD.vue
new file mode 100644
index 0000000..6fd8bd0
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/AddOrEditCD.vue
@@ -0,0 +1,336 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingPeriod:cd:title:downloadTpl') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/AddOrEditPR.vue b/src/views/trials/trials-panel/subject/reading-period/components/AddOrEditPR.vue
new file mode 100644
index 0000000..aaf8fac
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/AddOrEditPR.vue
@@ -0,0 +1,376 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LatestScanDate?moment(scope.row.LatestScanDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.ExpirationDate?moment(scope.row.ExpirationDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:addRP:button:confirmAddPR') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/AddSubjectRP.vue b/src/views/trials/trials-panel/subject/reading-period/components/AddSubjectRP.vue
new file mode 100644
index 0000000..fedbc60
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/AddSubjectRP.vue
@@ -0,0 +1,202 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/ClinicalData.vue b/src/views/trials/trials-panel/subject/reading-period/components/ClinicalData.vue
new file mode 100644
index 0000000..7d54a0e
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/ClinicalData.vue
@@ -0,0 +1,629 @@
+
+
+
+
+
+
+
+ {{ $t('trials:readingPeriod:cd:title:tips') }}
+
+
+
+ {{ $t('trials:readingPeriod:cd:title:tips1') }}
+
+
+ {{ $t('trials:readingPeriod:cd:title:tips2') }}
+
+
+
+
+
+ {{ $t('trials:readingPeriod:cd:title:preview') }}
+
+
+
+ {{ $t('common:button:add') }}
+
+
+ 核查
+
+
+ 撤回审批
+
+
+
+
+
+
+
+
+
+ {{ $fd('ClinicalDataUploadRole',scope.row.UploadRole) }}
+
+
+
+
+
+ {{ $fd('ClinicalLevel',scope.row.ClinicalDataLevel) }}
+
+
+
+
+
+ {{ $fd('ClinicalUploadType',scope.row.ClinicalUploadType) }}
+
+
+
+
+
+ {{ scope.row.ClinicalUploadType === 0?'NA':scope.row.FileCount }}
+
+
+
+
+
+ {{ $fd('ReadingClinicalDataState', scope.row.ReadingClinicalDataState) }}
+ {{ $fd('ReadingClinicalDataState', scope.row.ReadingClinicalDataState) }}
+ {{ $fd('ReadingClinicalDataState', scope.row.ReadingClinicalDataState) }}
+ {{ $fd('ReadingClinicalDataState', scope.row.ReadingClinicalDataState) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingPeriod:cd:title:preview') }}
+
+
+
+ {{ $t('common:button:add') }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('ClinicalDataUploadRole',scope.row.UploadRole) }}
+
+
+
+
+
+ {{ $fd('ClinicalLevel',scope.row.ClinicalDataLevel) }}
+
+
+
+
+
+ {{ $fd('ClinicalUploadType',scope.row.ClinicalUploadType) }}
+
+
+
+
+
+ {{ scope.row.ClinicalUploadType === 0?'NA':scope.row.FileCount }}
+
+
+
+
+
+ {{ $fd('ReadingClinicalDataState', scope.row.ReadingClinicalDataState) }}
+ {{ $fd('ReadingClinicalDataState', scope.row.ReadingClinicalDataState) }}
+ {{ $fd('ReadingClinicalDataState', scope.row.ReadingClinicalDataState) }}
+ {{ $fd('ReadingClinicalDataState', scope.row.ReadingClinicalDataState) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/EditPRStatus.vue b/src/views/trials/trials-panel/subject/reading-period/components/EditPRStatus.vue
new file mode 100644
index 0000000..69cf8b3
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/EditPRStatus.vue
@@ -0,0 +1,100 @@
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/PreviewCD.vue b/src/views/trials/trials-panel/subject/reading-period/components/PreviewCD.vue
new file mode 100644
index 0000000..50f0183
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/PreviewCD.vue
@@ -0,0 +1,197 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:pastTreatment') }}
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ $fd('IsPdEnum', scope.row.IsPD) }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:pastSurgery') }}
+
+
+
+
+
+
+
+ {{ scope.row.OperationTime?moment(scope.row.OperationTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:others') }}
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/RPList.vue b/src/views/trials/trials-panel/subject/reading-period/components/RPList.vue
new file mode 100644
index 0000000..b7fb2cf
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/RPList.vue
@@ -0,0 +1,375 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+ {{ $t('trials:rpManage:button:addImageReading') }}
+
+
+
+ {{ $t('trials:rpManage:button:addOncologyReading') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('ReadingSetType',scope.row.ReadingSetType) }}
+
+
+
+
+
+
+
+ {{ $fd('ReadingScopeEnum',scope.row.ReadingScope) }}
+
+
+
+
+
+ {{ scope.row.SiteCodes.length>0? scope.row.SiteCodes.join(', '):'' }}
+
+
+
+
+
+ {{ scope.row.ExpirationDate?moment(scope.row.ExpirationDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+ {{ scope.row.PlanCount }}
+
+
+
+
+
+
+
+ {{ $fd('TakeEffect', scope.row.IsTakeEffect) }}
+
+
+ {{ $fd('TakeEffect', scope.row.IsTakeEffect) }}
+
+
+ {{ $fd('TakeEffect', scope.row.IsTakeEffect) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/RelationPRList.vue b/src/views/trials/trials-panel/subject/reading-period/components/RelationPRList.vue
new file mode 100644
index 0000000..aa009e6
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/RelationPRList.vue
@@ -0,0 +1,110 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.LatestScanDate?moment(scope.row.LatestScanDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.ExpirationDate?moment(scope.row.ExpirationDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/components/Verification.vue b/src/views/trials/trials-panel/subject/reading-period/components/Verification.vue
new file mode 100644
index 0000000..30f2a49
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/components/Verification.vue
@@ -0,0 +1,190 @@
+
+
+
+ {{ $t('trials:readingPeriod:verify:title:fileList') }}
+
+
+
+ {{ $t('trials:readingPeriod:verify:title:preview') }}
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingPeriod:verify:title:result') }}
+
+
+
+
+ {{ $fd('YesOrNo', true) }}
+ N/A
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', true) }}
+ N/A
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/reading-period/index.vue b/src/views/trials/trials-panel/subject/reading-period/index.vue
new file mode 100644
index 0000000..80ef66b
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/reading-period/index.vue
@@ -0,0 +1,582 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:readingPeriod:buttton:exportSubjectTbl') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.Data[i-1].Name }}
+
+
+
+ | {{ $t('trials:readingPeriod:table:enroll') }}
+
+
+ | {{ $t('trials:readingPeriod:table:pd') }}
+
+
+ | {{ $t('trials:readingPeriod:table:urgent') }}
+
+
+ | {{ $t('trials:readingPeriod:table:finalVisit') }}
+
+
+
+
+
{{ $fd('ModuleTypeEnum',scope.row.Data[i-1].ModuleType) }}
+
+ {{ $fd('ReadModuleEnum',scope.row.Data[i-1].ReadingStatus) }}
+
+
+
+
+
{{ $t('trials:readingPeriod:table:lastVisit') }}
+
{{ scope.row.Data[i-1].OutPlanPreviousVisitName }}
+
+
+
+
{{ $t('trials:readingPeriod:table:deadlineVisit') }}
+
{{ scope.row.Data[i-1].CutOffVisitName }}
+
+
+
+
{{ $t('trials:readingPeriod:table:correspondVisit2') }}
+
{{ scope.row.Data[i-1].ReadModuleName }}
+
+
+
+
+ {{ $t('trials:readingPeriod:table:clinicalInfo2') }}
+
+ {{ $t('trials:readingPeriod:button:view') }}
+
+ {{ $t('trials:readingPeriod:table:noCD') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:readingPeriod:button:detail') }}
+
+
+ {{ $t('common:button:edit') }}
+
+
+ {{ $t('trials:readingPeriod:button:delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ currentData.Name }}
+
+
+
+ {{ $fd('ModuleTypeEnum',currentData.ModuleType) }}
+
+
+
+
+
+ {{ $fd('ReadModuleEnum',currentData.ReadingStatus) }}
+
+
+ {{ currentData.CutOffVisitName }}
+
+
+ {{ currentData.OutPlanPreviousVisitName }}
+
+
+ {{ currentData.ReadModuleName }}
+
+
+
+
+ {{ $t('trials:readingPeriod:button:view') }}
+
+
+ {{ $t('trials:readingPeriod:table:noCD') }}
+
+
+
+
+ {{ currentData.Stakeholders }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/subject-list/components/MessageTable.vue b/src/views/trials/trials-panel/subject/subject-list/components/MessageTable.vue
new file mode 100644
index 0000000..0f23e76
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/subject-list/components/MessageTable.vue
@@ -0,0 +1,245 @@
+
+
+
+
+
+
+
+ {{ scope.row.TrialCriterionName }}
+
+
+
+
+
+ {{ $fd('Common_File_BusinessScenario',scope.row.BusinessScenarioEnum) }}
+
+
+
+
+ {{ scope.row.ToUserTypeNameList.length>0?scope.row.ToUserTypeNameList.join('、'):'' }}
+
+
+
+
+
+ {{ scope.row.CopyUserTypeNameList.length>0?scope.row.CopyUserTypeNameList.join('、'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/subject-list/components/SubjectStatusForm.vue b/src/views/trials/trials-panel/subject/subject-list/components/SubjectStatusForm.vue
new file mode 100644
index 0000000..06b1952
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/subject-list/components/SubjectStatusForm.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+
+ {{item.label}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/subject-list/components/SubjectsForm.vue b/src/views/trials/trials-panel/subject/subject-list/components/SubjectsForm.vue
new file mode 100644
index 0000000..938d11a
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/subject-list/components/SubjectsForm.vue
@@ -0,0 +1,207 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ otherInfo.SubjectCodeRule }}
+
+
+
+
+
+
+
+
+
+ {{ otherInfo.VisitBaseDataDes }}
+
+
+
+
+
+
+
+
+
+ F
+ M
+ O
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/subject/subject-list/index.vue b/src/views/trials/trials-panel/subject/subject-list/index.vue
new file mode 100644
index 0000000..3139e5b
--- /dev/null
+++ b/src/views/trials/trials-panel/subject/subject-list/index.vue
@@ -0,0 +1,460 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.FirstGiveMedicineTime?moment(scope.row.FirstGiveMedicineTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ $fd('Subject_Visit_Status', scope.row.Status) }}
+ {{ $fd('Subject_Visit_Status', scope.row.Status) }}
+
+
+
+
+
+
+ {{ scope.row.TotalVisitCount }}
+
+ {{ scope.row.TotalVisitCount }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsMissingImages) }}
+ {{ $fd('YesOrNo', scope.row.IsMissingImages) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/trial-summary/audit-record/index.vue b/src/views/trials/trials-panel/trial-summary/audit-record/index.vue
new file mode 100644
index 0000000..f649d2e
--- /dev/null
+++ b/src/views/trials/trials-panel/trial-summary/audit-record/index.vue
@@ -0,0 +1,1253 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$fd('ModuleType', scope.row.ModuleTypeId, 'id')}}
+
+
+
+
+
+ {{$i18n.locale === 'zh' ? scope.row.DescriptionCN : scope.row.Description}}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.SignText }}
+
+ {{ $fd('YesOrNo', scope.row.IsSign) }}
+
+
{{ $fd('YesOrNo', scope.row.IsSign) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:auditRecord:action:detail')}}
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:auditRecord:title:historicalOperations')}}
+
+ {{$t('trials:auditRecord:title:relationOperations')}}
+
+
+
+
+
+
+
+
+
+
+ {{$t('common:button:download')}}
+
+
+ {{$t('trials:auditRecord:title:viewDetail')}}
+
+
+
+ {{$t('trials:auditRecord:title:viewImage')}}{{scope.row.oldValue instanceof Array ? `(${scope.row.oldValue.length})` : ''}}
+
+
+
+
+ {{ scope.row.oldValue }}
+
+
+
+
+
+
+
+
+
+
+ {{$t('common:button:download')}}
+
+
+ {{$t('trials:auditRecord:title:viewDetail')}}
+
+
+
+ {{$t('trials:auditRecord:title:viewImage')}}{{scope.row.newValue instanceof Array ? `(${scope.row.newValue.length})` : ''}}
+
+
+
+
+ {{ scope.row.newValue }}
+
+
+
+
+
+
+
+
+
+ {{$t('trials:auditRecord:title:viewImage')}}
+
+
+ {{scope.row[item.ColumnValue]}}
+
+
+
+
+
+
+ {{$t('trials:auditRecord:title:viewImage')}}
+
+
+
+ {{scope.row[ite.ListName ? ite.ListName + ite.ColumnValue + index : ite.ColumnValue]}}
+
+
+
+
+
+
+ {{$t('trials:auditRecord:title:signInfo')}}
+
+
+ {{otherData[0].Value}}
+
+
+
+
+
+ {{$t('common:button:close')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$i18n.locale === 'zh' ? scope.row.ModuleTypeNameCN : scope.row.ModuleTypeName}}
+
+
+
+
+
+ {{$i18n.locale === 'zh' ? scope.row.DescriptionCN : scope.row.Description}}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.SignText }}
+
+ {{ $fd('YesOrNo', scope.row.IsSign) }}
+
+
{{ $fd('YesOrNo', scope.row.IsSign) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:auditRecord:action:detail')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.oldValue}}
+
+ {{ scope.row.oldValue }}
+
+
+
+
+
+
+
+
+ {{scope.row.newValue}}
+ {{ scope.row.newValue }}
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:auditRecord:title:viewImage')}}
+
+ {{scope.row[ite.ListName ? ite.ListName + ite.ColumnValue + index : ite.ColumnValue]}}
+
+
+
+
+
+ {{$t('trials:auditRecord:title:viewImage')}}
+
+ {{scope.row[item.ColumnValue]}}
+
+
+
+
+
+ {{$t('trials:auditRecord:title:signInfo')}}
+
+
+ {{otherData[0].Value}}
+
+
+
+
+
+ {{$t('common:button:close')}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/trial-summary/index.vue b/src/views/trials/trials-panel/trial-summary/index.vue
new file mode 100644
index 0000000..3481d7d
--- /dev/null
+++ b/src/views/trials/trials-panel/trial-summary/index.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/trial-summary/login-log/index.vue b/src/views/trials/trials-panel/trial-summary/login-log/index.vue
new file mode 100644
index 0000000..ed72ab3
--- /dev/null
+++ b/src/views/trials/trials-panel/trial-summary/login-log/index.vue
@@ -0,0 +1,223 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('UserOptType',scope.row.OptType) }}
+
+
+
+
+
+
+
+ {{ $fd('UserType',scope.row.LoginUserTypeEnum) }}
+
+
+
+
+
+ {{ $fd('UserType',scope.row.OptUserTypeEnum) }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/trial-summary/trial-information/index.vue b/src/views/trials/trials-panel/trial-summary/trial-information/index.vue
new file mode 100644
index 0000000..4f12593
--- /dev/null
+++ b/src/views/trials/trials-panel/trial-summary/trial-information/index.vue
@@ -0,0 +1,136 @@
+
+
+
+
+ {{trialInfo.TrialCode}}
+
+ ( {{ $fd('TrialStatusEnum',trialInfo.TrialStatusStr) }} )
+
+
+
+ {{ $fd('TrialType', trialInfo.TrialType) }}
+
+
+
+ {{trialInfo.ExperimentName}}
+
+
+ {{ trialInfo.ResearchProgramNo }}
+
+
+
+ {{trialInfo.MainResearchUnit}}
+
+
+ {{ trialInfo.HeadPI }}
+
+
+
+ {{trialInfo.Sponsor}}
+
+
+ {{ trialInfo.CRO }}
+
+
+
+ {{trialInfo.DeclarationTypeEnumList.map(v => $fd('DeclarationType', v)).toString()}}
+
+
+ {{ trialInfo.Phase }}
+
+
+
+ {{$fd('IndicationType', trialInfo.IndicationTypeId, 'id')}}
+
+
+ {{$fd('Indication', trialInfo.IndicationEnum)}}{{trialInfo.Indication}}
+
+
+ {{trialInfo.ModalityList}}
+
+
+ {{ trialInfo.PlanSiteCount }}
+
+
+
+ {{trialInfo.ExpectedPatients}}
+
+
+ {{ trialInfo.TimePointsPerPatient }}
+
+
+
+ {{trialInfo.PlanVisitCount}}
+
+
+
+
+ {{ trialInfo.Criterion }}
+
+
+
+
+
+
+ {{$fd('YesOrNoForInt', trialInfo.Expedited)}}
+
+
+ {{ trialInfo.ProjectCycle }}
+
+
+
+ {{trialInfo.TotalReviewers}}
+
+
+ {{trialInfo.AttendedReviewerTypeEnumList.map(v => $fd('AttendedReviewerType', v)).toString()}}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/trial-summary/upload-monitor/index.vue b/src/views/trials/trials-panel/trial-summary/upload-monitor/index.vue
new file mode 100644
index 0000000..31ec845
--- /dev/null
+++ b/src/views/trials/trials-panel/trial-summary/upload-monitor/index.vue
@@ -0,0 +1,442 @@
+/* eslint-disable */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$fd('IsDicom', scope.row.IsDicom)}}
+
+
+
+
+
+
+
+
+
+ {{scope.row.UploadStartTimeStr}}
+
+
+
+
+
+ {{scope.row.ArchiveFinishedTime}}
+
+
+
+
+
+ {{scope.row.UploadIntervalStr}}
+
+
+
+
+
+ {{scope.row.ArchiveIntervalStr}}
+
+
+
+
+
+ {{scope.row.TimeInterval}}
+
+
+
+
+
+
+
+ {{fileSizeFormatter(scope.row.FileSize)}}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsDicomReUpload) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsSuccess) }}
+ {{ $fd('YesOrNo', scope.row.IsSuccess) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$t('trials:uploadDicomList:table:FailedNumber')}}: {{lookText.Failed.length}}
+ {{$t('trials:uploadDicomList:table:ExistedNumber')}}: {{lookText.Existed.length}}
+ {{$t('trials:uploadDicomList:table:UploadedNumber')}}: {{lookText.Uploaded.length}}
+
+
+
{{$t('trials:uploadDicomList:table:Failed')}}:
+
+
无
+
+
+
{{$t('trials:uploadDicomList:table:Existed')}}:
+
+
无
+
+
+
{{$t('trials:uploadDicomList:table:Uploaded')}}:
+
+
无
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/consistency-check/components/consistencyCheckForm.vue b/src/views/trials/trials-panel/visit/consistency-check/components/consistencyCheckForm.vue
new file mode 100644
index 0000000..9e992da
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/consistency-check/components/consistencyCheckForm.vue
@@ -0,0 +1,384 @@
+
+
+
+
+
+
![Admin]()
+
![PM]()
+
![CRC]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+
+
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+
![Admin]()
+
![PM]()
+
![CRC]()
+
+
+
+
+
+
{{ $t('trials:consistencyCheck:label:noData') }}
+
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:action:applyFallback') }}
+
+
+
+ {{ $t('trials:consistencyCheck:button:rejectBack') }}
+
+
+
+ {{ $t('trials:consistencyCheck:action:fallback') }}
+
+
+
+ {{ $t('trials:consistencyCheck:button:sendMessage') }}
+
+
+
+ {{ $t('trials:consistencyCheck:title:reply') }}
+
+
+
+ {{ $t('trials:consistencyCheck:title:close') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/consistency-check/components/crcSendMessage.vue b/src/views/trials/trials-panel/visit/consistency-check/components/crcSendMessage.vue
new file mode 100644
index 0000000..8fc8313
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/consistency-check/components/crcSendMessage.vue
@@ -0,0 +1,178 @@
+
+
+
+
+
{{ $t('trials:consistencyCheck:title:message1') }}
+
+
{{ $t('trials:consistencyCheck:title:message2') }}
+
+
+ {{ item }}
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:title:message3') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:title:message5') }}
+
+
+
+ {{ $t('trials:consistencyCheck:title:message6') }}
+
+
+
+ {{ item }}
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:title:message7') }}
+
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:title:message9') }}
+
+
+ {{ $t('trials:consistencyCheck:title:message10') }}
+
+
+ {{ $t('trials:consistencyCheck:title:message11') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:button:sendMessage') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/consistency-check/components/crcSendMessageNew.vue b/src/views/trials/trials-panel/visit/consistency-check/components/crcSendMessageNew.vue
new file mode 100644
index 0000000..0cd4f7b
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/consistency-check/components/crcSendMessageNew.vue
@@ -0,0 +1,307 @@
+
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:title:message20') }}
+
+
+
{{ $t('trials:consistencyCheck:title:add') }}
+
+
+
+
+
+
+ {{ scope.row.StudyDate }}
+
+
+
+
+
+ {{ scope.row.Modality }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsJoin) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:title:delete') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:title:message9') }}
+
+
+ {{ $t('trials:consistencyCheck:title:message10') }}
+
+
+ {{ $t('trials:consistencyCheck:title:message11') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:button:sendMessage') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/consistency-check/components/uploadExcel.vue b/src/views/trials/trials-panel/visit/consistency-check/components/uploadExcel.vue
new file mode 100644
index 0000000..7cb3363
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/consistency-check/components/uploadExcel.vue
@@ -0,0 +1,107 @@
+
+
+
+
+
+
+
+ {{ $t('trials:consistencyCheck:dialogButton:upload') }}
+
+
+ ({{ $t('trials:consistencyCheck:message:excelFileOnly') }})
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/consistency-check/index.vue b/src/views/trials/trials-panel/visit/consistency-check/index.vue
new file mode 100644
index 0000000..5b1997e
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/consistency-check/index.vue
@@ -0,0 +1,794 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:consistencyCheck:button:export1') }}
+
+
+
+ {{ $t('trials:consistencyCheck:button:export2') }}
+
+
+
+ {{ $t('trials:consistencyCheck:button:download') }}
+
+
+
+
+ {{ $t('trials:consistencyCheck:button:upload') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+ --
+
+ {{ userTypeEnumInt === 2? $fd('CheckChallengeState', 1) : $fd('CheckChallengeState', 2) }}
+
+
+ {{ userTypeEnumInt === 2?$fd('CheckChallengeState', 2) : $fd('CheckChallengeState', 1) }}
+
+ {{ $fd('CheckChallengeState', scope.row.CheckChallengeState) }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.VisitName }}
+ 回
+
+
+
+
+
+
+ {{ scope.row.Modalitys }}
+
+
+
+
+
+
+ {{ scope.row.LatestScanDate.split(' ')[0] }}
+
+
+
+
+
+
+
+
+ {{ $fd('RequestBackState', scope.row.RequestBackState*1) }}
+ {{ $fd('RequestBackState', scope.row.RequestBackState*1) }}
+ {{ $fd('RequestBackState', scope.row.RequestBackState*1) }}
+ {{ $fd('RequestBackState', scope.row.RequestBackState*1) }}
+
+
+
+
+
+
+
+
+
+ --
+ {{ $fd('CheckState', scope.row.CheckState) }}
+ {{ $fd('CheckState', scope.row.CheckState) }}
+ {{ $fd('CheckState', scope.row.CheckState) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t(`trials:check:radio:${currentRow.type}reason${1}`) }}
+
+ {{ $t(`trials:check:radio:${currentRow.type}reason${2}`) }}
+
+ {{ $t(`trials:check:radio:${currentRow.type}reason${3}`) }}
+
+ {{ $t(`trials:check:radio:${currentRow.type}reason${4}`) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-question/components/chatForm.vue b/src/views/trials/trials-panel/visit/crc-question/components/chatForm.vue
new file mode 100644
index 0000000..b8e4f83
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-question/components/chatForm.vue
@@ -0,0 +1,553 @@
+
+
+
+
+
+
+
![Admin]()
+
![PM]()
+
![CRC]()
+
![QC]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+
+
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+
![Admin]()
+
![PM]()
+
![CRC]()
+
![QC]()
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:crcQuestion:button:applyReupload') }}
+
+
+
+ {{ $t('trials:crcQuestion:button:reupload') }}
+
+
+
+ {{ $t('trials:crcQuestion:button:reuploadCompleted') }}
+
+
+
+ {{ $t('trials:crcQuestion:button:send') }}
+
+
+
+ {{ $t('trials:crcQuestion:button:close') }}
+
+
+
+
+
+
+
+
+
+ {{ trialCode }}
+ {{ data.TrialSiteCode }}
+ {{ data.SubjectCode }}
+ {{ `${data.VisitName} (${data.VisitNum})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-question/index.vue b/src/views/trials/trials-panel/visit/crc-question/index.vue
new file mode 100644
index 0000000..6459f0f
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-question/index.vue
@@ -0,0 +1,374 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.ChallengeCode }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('CurrentQCType', 0) }}
+ --
+
+
+
+ {{ $fd('CurrentQCType', scope.row.CurrentQCEnum) }}
+ {{ $fd('CurrentQCType', scope.row.CurrentQCEnum) }}
+ --
+
+
+
+
+
+
+ --
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsOverTime) }}
+ {{ $fd('YesOrNo', scope.row.IsOverTime) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsClosed) }}
+ {{ $fd('YesOrNo', scope.row.IsClosed) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/SubjectsForm.vue b/src/views/trials/trials-panel/visit/crc-upload/components/SubjectsForm.vue
new file mode 100644
index 0000000..b95a59e
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/SubjectsForm.vue
@@ -0,0 +1,174 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ otherInfo.SubjectCodeRule }}
+
+
+
+
+
+ {{ otherInfo.VisitBaseDataDes }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/historyChat.vue b/src/views/trials/trials-panel/visit/crc-upload/components/historyChat.vue
new file mode 100644
index 0000000..cf90e6b
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/historyChat.vue
@@ -0,0 +1,539 @@
+
+
+
+
+
+ {{ item.ChallengeCode }}
+
+
+
+
+
+
+
+
![Admin]()
+
![PM]()
+
![CRC]()
+
![QC]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+
+
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+
![Admin]()
+
![PM]()
+
![CRC]()
+
![QC]()
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:reuploadDicoms:button:applyReupload') }}
+
+
+
+ {{ $t('trials:reuploadDicoms:button:reupload') }}
+
+
+
+ {{ $t('trials:reuploadDicoms:button:reuploadFinished') }}
+
+
+
+ {{ $t('trials:reuploadDicoms:button:send') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ trialCode }}
+ {{ data.TrialSiteCode }}
+ {{ data.SubjectCode }}
+ {{ `${data.VisitName} (${data.VisitNum})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/previewFiles.vue b/src/views/trials/trials-panel/visit/crc-upload/components/previewFiles.vue
new file mode 100644
index 0000000..ba49992
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/previewFiles.vue
@@ -0,0 +1,137 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:message:downloadFile') }}
+ {{ $t('common:button:download') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/previewVisitNoneDicomFiles.vue b/src/views/trials/trials-panel/visit/crc-upload/components/previewVisitNoneDicomFiles.vue
new file mode 100644
index 0000000..e949d0c
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/previewVisitNoneDicomFiles.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
{{ `${item.CodeView} (Modality: ${item.Modality})` }}
+
+
+ -
+ {{ file.FileName }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:message:downloadFile') }}
+
+ {{ $t('common:button:download') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/previousFiles.vue b/src/views/trials/trials-panel/visit/crc-upload/components/previousFiles.vue
new file mode 100644
index 0000000..23fd22d
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/previousFiles.vue
@@ -0,0 +1,159 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:uploadClinicalData:button:uploadFile') }}
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/previousOther.vue b/src/views/trials/trials-panel/visit/crc-upload/components/previousOther.vue
new file mode 100644
index 0000000..a9f3df3
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/previousOther.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/previousRadiotherapy.vue b/src/views/trials/trials-panel/visit/crc-upload/components/previousRadiotherapy.vue
new file mode 100644
index 0000000..b2c133e
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/previousRadiotherapy.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/previousSurgery.vue b/src/views/trials/trials-panel/visit/crc-upload/components/previousSurgery.vue
new file mode 100644
index 0000000..9b7530d
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/previousSurgery.vue
@@ -0,0 +1,109 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue b/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue
new file mode 100644
index 0000000..d16d646
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/studyInfo.vue
@@ -0,0 +1,399 @@
+
+
+
+
+
+ {{ $t('trials:uploadedDicoms:action:delete') }}
+
+
+
+ {{ $t('trials:uploadedDicoms:action:preview') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getBodyPart(scope.row.BodyPartForEdit)}}
+
+
+
+
+
+
+
+
+
+ {{ moment(scope.row.StudyTime).format('YYYY-MM-DD') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{$fd('Bodypart',bodyPart)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadClinicalData.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadClinicalData.vue
new file mode 100644
index 0000000..f406004
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadClinicalData.vue
@@ -0,0 +1,628 @@
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:pastTreatment') }}
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ $fd('IsPdEnum', scope.row.IsPD) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:pastSurgery') }}
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.OperationTime?moment(scope.row.OperationTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:others') }}
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:uploadClinicalData:button:downloadTemplate') }}
+
+
+
+ {{ $t('common:button:new') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles.vue
new file mode 100644
index 0000000..7995707
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles.vue
@@ -0,0 +1,1249 @@
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue
new file mode 100644
index 0000000..07a295f
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadDicomFiles2.vue
@@ -0,0 +1,1558 @@
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/uploadNonDicomFiles.vue b/src/views/trials/trials-panel/visit/crc-upload/components/uploadNonDicomFiles.vue
new file mode 100644
index 0000000..aeb0ee5
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/uploadNonDicomFiles.vue
@@ -0,0 +1,846 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/components/visitForm.vue b/src/views/trials/trials-panel/visit/crc-upload/components/visitForm.vue
new file mode 100644
index 0000000..a470b16
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/components/visitForm.vue
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ *{{ $t('trials:crcUpload:form:setFinalAssessment1').replaceAll('xxx', otherInfo.OutEnrollmentVisitName) }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ otherInfo.VisitBaseDataDes }}
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+ *{{ $t('trials:crcUpload:form:setFinalAssessment') }}
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/crc-upload/index.vue b/src/views/trials/trials-panel/visit/crc-upload/index.vue
new file mode 100644
index 0000000..5736a88
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/crc-upload/index.vue
@@ -0,0 +1,1719 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+ {{ $t('trials:crcUpload:button:submit') }}
+
+
+
+ {{ $t('trials:crcUpload:button:add') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+ {{ scope.row.SubjectCode }}
+
+
+ {{ $t('trials:crcUpload:label:firstGiveMedicineTime') }}
+
+
+
+
+
+
+
+ {{ scope.row.VisitName }}
+
+ {{ scope.row.VisitName }}
+
+
+
+ {{ $t('trials:crcUpload:label:lostVisit') }}
+
+
+
+ {{ $t('trials:crcUpload:label:finalVisit') }}
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:crcUpload:label:dicom') }}: {{ scope.row.DicomStudyCount }},
+
+ {{ $t('trials:crcUpload:label:noneDicom') }}: {{ scope.row.NoneDicomStudyCount }},
+ {{ $t('trials:crcUpload:label:clinicalData') }}: {{ scope.row.IsHaveClinicalData?'w/':'w/o' }}
+
+ {{ $t('trials:crcUpload:label:noneDicom') }}: {{ scope.row.NoneDicomStudyCount }}
+
+
+ {{ scope.row.IsBaseLine && otherInfo.ClinicalInformationTransmissionEnum > 0?[scope.row.DicomStudyCount,scope.row.NoneDicomStudyCount,scope.row.IsHaveClinicalData?'w/':'w/o'].join(', '):[scope.row.DicomStudyCount,scope.row.NoneDicomStudyCount].join(', ') }}
+
+
+
+
+
+
+
+ {{ scope.row.EarliestScanDate?moment(scope.row.EarliestScanDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.LatestScanDate?moment(scope.row.LatestScanDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ $fd('SubmitState', scope.row.SubmitState*1) }}
+ {{ $fd('SubmitState', scope.row.SubmitState*1) }}
+ {{ $fd('SubmitState', scope.row.SubmitState*1) }}
+
+
+
+
+
+
+
+ --
+ {{ $fd('AuditStatePE', scope.row.AuditState*1) }}
+ {{ $fd('AuditStatePE', scope.row.AuditState*1) }}
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ searchData.TrialCode }}
+ {{ rowData.TrialSiteCode }}
+ {{ rowData.SubjectCode }}
+ {{ `${rowData.VisitName} (${rowData.VisitNum})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:edit') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ searchData.TrialCode }}
+ {{ rowData.TrialSiteCode }}
+ {{ rowData.SubjectCode }}
+ {{ `${rowData.VisitName} (${rowData.VisitNum})` }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
{{ $t('trials:crcUpload:label:dicom') }}
+
+
+
+
+ {{ $t('trials:crcUpload:label:noneDicom') }}
+
+
+
+
+
+ {{ $t('trials:crcUpload:label:clinicalData') }}
+
+
+
+
+
+ {{ $t('trials:crcUpload:label:clinicalData') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ otherInfo.VisitBaseDataDes }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+ {{ $t('trials:crcUpload:dialogTitle:edit') }}
+
+
+
+ {{ $t('trials:crcUpload:message:baseDate') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.LatestScanDate.split(' ')[0]}}
+
+
+
+
+
+ {{$fd('YesOrNo', scope.row.IsCRCConfirm)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.ClinicalDataSetName }}
+
+
+
+
+
+
+
+
+
+
{{ item.ClinicalDataSetName }}
+
+ {{ date.CheckDate.split(' ')[0] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/forward-list/index.vue b/src/views/trials/trials-panel/visit/forward-list/index.vue
new file mode 100644
index 0000000..f69a9d9
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/forward-list/index.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('trials:dicomForward:action:forward') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ --
+ {{ $fd('ForwardStateEnum', scope.row.ForwardState*1) }}
+ {{ $fd('ForwardStateEnum', scope.row.ForwardState*1) }}
+ {{ $fd('ForwardStateEnum', scope.row.ForwardState*1) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/index.vue b/src/views/trials/trials-panel/visit/index.vue
new file mode 100644
index 0000000..7d4275d
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/index.vue
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/components/chatForm.vue b/src/views/trials/trials-panel/visit/qc-check/components/chatForm.vue
new file mode 100644
index 0000000..37bca56
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/components/chatForm.vue
@@ -0,0 +1,407 @@
+
+
+
+
+
+
+
![Admin]()
+
![PM]()
+
![CRC]()
+
![QC]()
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+
+
+
+
+ {{ record.CreateUserName }}
+ ({{ record.CreateTime }})
+
+
+
+
+
![Admin]()
+
![PM]()
+
![CRC]()
+
![QC]()
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:qcQuality:dialogButton:agreeToReupload') }}
+
+
+
+ {{ $t('trials:qcQuality:dialogButton:send') }}
+
+
+
+ {{ $t('trials:qcQuality:dialogButton:close') }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/components/clinicalData.vue b/src/views/trials/trials-panel/visit/qc-check/components/clinicalData.vue
new file mode 100644
index 0000000..be20bed
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/components/clinicalData.vue
@@ -0,0 +1,260 @@
+
+
+
+
+
+
+
+
{{ $t('trials:uploadClinicalData:title:pastTreatment') }}
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ $fd('IsPdEnum', scope.row.IsPD) }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:pastSurgery') }}
+
+
+
+
+
+
+
+ {{ scope.row.OperationTime?moment(scope.row.OperationTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+ {{ $t('trials:uploadClinicalData:title:others') }}
+
+
+
+
+
+
+
+ {{ scope.row.StartTime?moment(scope.row.StartTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.EndTime?moment(scope.row.EndTime).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:uploadClinicalData:action:preview') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/components/dicomFiles.vue b/src/views/trials/trials-panel/visit/qc-check/components/dicomFiles.vue
new file mode 100644
index 0000000..760e08a
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/components/dicomFiles.vue
@@ -0,0 +1,215 @@
+
+
+
+
+
+ {{ $t('trials:audit:action:preview') }}
+
+
+
+
+
+
+
+
+
+
+ {{ getBodyPart(scope.row.BodyPartExamined) }}
+
+
+
+
+
+
+
+
+
+ {{ moment(scope.row.StudyTime).format('YYYY-MM-DD') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/components/manuals.vue b/src/views/trials/trials-panel/visit/qc-check/components/manuals.vue
new file mode 100644
index 0000000..3cd5b59
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/components/manuals.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
+ {{ file.Name }}
+
+
+
+
+ {{ $t('trials:clinicaldara:title:nodata') }}
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/components/qsFormItem.vue b/src/views/trials/trials-panel/visit/qc-check/components/qsFormItem.vue
new file mode 100644
index 0000000..db06c60
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/components/qsFormItem.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+
+
+ {formItemChange(val, question)})"
+ >
+
+ {{ val }}
+
+
+
+
+
+ {{ val }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue b/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue
new file mode 100644
index 0000000..0b5f830
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/components/qualityAssurance.vue
@@ -0,0 +1,1716 @@
+
+
+
+
+
+ {{$t('trials:reading:button:handbooks')}}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:audit:title:dicoms') }}
+
+
+
+
+
+
+ {{ $t('trials:audit:tip:visitWindow') }}:
+
+ {{ `${upperLimit}~${lowerLimit}` }}
+
+
+ {{ $t('trials:audit:tip:visitWindowNotSet') }}
+
+
+
+
+
+
+
+
+ {{ $t('trials:audit:button:previewAllDiocms') }}
+
+
+
+ {{ $t('trials:audit:button:previewReadingDiocms') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ getBodyPart(scope.row.BodyPartForEdit) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.StudyTime ? moment(scope.row.StudyTime).format('YYYY-MM-DD') : '' }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:audit:title:series') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.StudyTime ? moment(scope.row.StudyTime).format('YYYY-MM-DD') : '' }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:audit:title:nonDicomsTitle') }}
+
+
+
+
{{ $t('trials:audit:tip:nonDicomsVisitWindow') }}:
+
+ {{ `${upperLimit}~${lowerLimit}` }}
+
+
+ {{ $t('trials:audit:tip:visitWindowNotSet') }}
+
+
+
+
+
+
+
+ {{ $t('trials:audit:tip:nonDicomsPreviewAll') }}
+
+
+
+
+
+
+
+
+
+
+ {{ getBodyPart(scope.row.BodyPart) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:audit:button:nonDicomsPreview') }}
+
+
+
+
+
+
+
+ {{ scope.row.FileCount }}
+
+
+
+ {{ scope.row.FileCount }}
+
+
+
+
+
+
+ {{ moment(scope.row.ImageDate).format('YYYY-MM-DD') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:audit:title:questions') }}
+
+
+
+
+ {{ $t('trials:audit:message:noData') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.ChallengeCode }}
+
+
+
+
+
+ {{ $fd('IsClosed', scope.row.IsClosed) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ --
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsOverTime) }}
+
+
+
+
+
+
+
+
+ {{ $t('trials:qcQuality:action:reply') }}
+
+
+
+ {{ $t('trials:qcQuality:action:close') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Bodypart',bodyPart) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('Bodypart',bodyPart) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:qcQuality:radio:reason1') }}
+
+ {{ $t('trials:qcQuality:radio:reason2') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:audit:button:save') }}
+
+
+
+ {{ $t('trials:audit:button:question') }}
+
+
+
+ {{ `${$t('trials:audit:button:historicalQuestions')}(${relationInfo && relationInfo.TotalChallengeCount !== undefined ?relationInfo.TotalChallengeCount:0}, ${relationInfo.NotClosedChallengeCount !== undefined?relationInfo.NotClosedChallengeCount:0})` }}
+
+
+
+
+ {{ $t('trials:audit:button:auditPassed') }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/components/questionForm.vue b/src/views/trials/trials-panel/visit/qc-check/components/questionForm.vue
new file mode 100644
index 0000000..dd4978f
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/components/questionForm.vue
@@ -0,0 +1,162 @@
+
+
+
+
+
+
+
+
+
+ {formItemChange(val, item)})"
+ >
+
+
+
+ {formItemChange(val, item)})"
+ >
+ {{ val }}
+
+
+ {formItemChange(val, item)})"
+ >
+ {{ val }}
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/components/questions.vue b/src/views/trials/trials-panel/visit/qc-check/components/questions.vue
new file mode 100644
index 0000000..457d913
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/components/questions.vue
@@ -0,0 +1,128 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-check/index.vue b/src/views/trials/trials-panel/visit/qc-check/index.vue
new file mode 100644
index 0000000..bfa89ac
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-check/index.vue
@@ -0,0 +1,1001 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.HandleUser }}
+
+ {{ item.HandleUserRealName }}
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+ --
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.VisitName }}
+
+
+ {{ scope.row.VisitName }}
+
+
+
+
+ {{ $t('trials:crcUpload:label:lostVisit') }}
+
+
+
+ {{ $t('trials:crcUpload:label:finalVisit') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:crcUpload:label:dicom') }}: {{ scope.row.DicomStudyCount }},
+
+ {{ $t('trials:crcUpload:label:noneDicom') }}: {{ scope.row.NoneDicomStudyCount }},
+ {{ $t('trials:crcUpload:label:clinicalData') }}: {{ scope.row.IsHaveClinicalData?'w/':'w/o' }}
+
+ {{ $t('trials:crcUpload:label:noneDicom') }}: {{ scope.row.NoneDicomStudyCount }}
+
+
+ {{ scope.row.IsBaseLine && OtherInfo.ClinicalInformationTransmissionEnum > 0?[scope.row.DicomStudyCount,scope.row.NoneDicomStudyCount,scope.row.IsHaveClinicalData?'w/':'w/o'].join(', '):[scope.row.DicomStudyCount,scope.row.NoneDicomStudyCount].join(', ') }}
+
+
+
+
+
+
+
+ {{ scope.row.EarliestScanDate?moment(scope.row.EarliestScanDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+ {{ scope.row.LatestScanDate?moment(scope.row.LatestScanDate).format('YYYY-MM-DD'):'' }}
+
+
+
+
+
+
+
+
+
+ --
+ {{ $fd('AuditStatePE', scope.row.AuditState*1) }}
+
+ {{ $fd('AuditStatePE', scope.row.AuditState*1) }}
+
+
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+
+
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+
+
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+ {{ $fd('AuditStateRC', scope.row.AuditState*1) }}
+
+
+
+
+
+
+
+ {{ scope.row.PreliminaryAuditUserName }}
+
+ {{ scope.row.PreliminaryAuditUserName }}
+
+ {{ $t('trials:qcCheck:label:preliminary') }}
+
+
+
+
+ {{ scope.row.ReviewAuditUserName }}
+
+
+ {{ $t('trials:qcCheck:label:review') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ trialCode }}
+ {{ rowData.TrialSiteCode }}
+ {{ rowData.SubjectCode }}
+
+ {{ `${rowData.VisitName} (${rowData.VisitNum})` }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ searchData.TrialCode }}
+ {{ rowData.TrialSiteCode }}
+ {{ rowData.SubjectCode }}
+ {{ `${rowData.VisitName} (${rowData.VisitNum})` }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
{{ $t('trials:audit:tab:dicoms') }}
+
+
+
+
+
+
+
+
{{ $t('trials:audit:tab:nonDicoms') }}
+
+
+
+
+
+
+
+
{{ $t('trials:audit:tab:clinicalData') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.label }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-panel/visit/qc-question/index.vue b/src/views/trials/trials-panel/visit/qc-question/index.vue
new file mode 100644
index 0000000..199c2f9
--- /dev/null
+++ b/src/views/trials/trials-panel/visit/qc-question/index.vue
@@ -0,0 +1,575 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.VisitName }}
+
+
+
+
+
+
+
+
+ {{ item.Creator }}
+
+ {{ item.CreatorRealName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+ {{ $t('common:button:export') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.row.ChallengeCode }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('CurrentQCType', 0) }}
+ --
+
+
+ {{ $fd('CurrentQCType', scope.row.CurrentQCEnum) }}
+ {{ $fd('CurrentQCType', scope.row.CurrentQCEnum) }}
+ --
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ --
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+ {{ $fd('ReuploadEnum', scope.row.ReuploadEnum) }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsOverTime) }}
+ {{ $fd('YesOrNo', scope.row.IsOverTime) }}
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsClosed) }}
+ {{ $fd('YesOrNo', scope.row.IsClosed) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:qcQuality:radio:reason1') }}
+ {{ $t('trials:qcQuality:radio:reason2') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/clinicalData.vue b/src/views/trials/trials-workbench/components/clinicalData.vue
new file mode 100644
index 0000000..d25caa9
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/clinicalData.vue
@@ -0,0 +1,806 @@
+
+
+
+
+ 临床数据录入
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.ClinicalDataSetName }}
+
+
+
+
+
+
+
+
+
+
{{ item.ClinicalDataSetName }}
+
+ {{ date.CheckDate.split(' ')[0] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/clinicalDataConfirm.vue b/src/views/trials/trials-workbench/components/clinicalDataConfirm.vue
new file mode 100644
index 0000000..686f5ff
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/clinicalDataConfirm.vue
@@ -0,0 +1,825 @@
+
+
+
+
+ 临床数据确认
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:button:search') }}
+
+
+
+ {{ $t('common:button:reset') }}
+
+
+
+
+
+
+
+ {{ scope.row.LatestScanDate ? scope.row.LatestScanDate.split(' ')[0] : ''}}
+
+
+
+
+
+ {{$fd('YesOrNo', scope.row.IsCRCConfirm)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.ClinicalDataSetName }}
+
+
+
+
+
+
+
+
+
+
{{ item.ClinicalDataSetName }}
+
+ {{ date.CheckDate.split(' ')[0] }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/clinicalDataPM.vue b/src/views/trials/trials-workbench/components/clinicalDataPM.vue
new file mode 100644
index 0000000..74ed1c3
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/clinicalDataPM.vue
@@ -0,0 +1,818 @@
+
+
+
+
+ {{ $t('trials:crcUpload:label:clinicalData') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{scope.row.LatestScanDate.split(' ')[0]}}
+
+
+
+
+ {{scope.row.ClinicalNameList.toString()}}
+
+
+
+
+
+ {{$fd('YesOrNo', scope.row.IsPMConfirm)}}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ item.ClinicalDataSetName }}
+
+
+
+
+
+
+
+
+
+
{{ item.ClinicalDataSetName }}
+
+ {{ date.CheckDate.split(' ')[0] }}
+
+
+
+
+
+
+
+
+
+
{{ $t('trials:readingPeriod:verify:title:result') }}
+
+
+
+
+
+ {{ $fd('YesOrNo', true) }}
+ N/A
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', true) }}
+ N/A
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/consistencyCheck.vue b/src/views/trials/trials-workbench/components/consistencyCheck.vue
new file mode 100644
index 0000000..cc3a284
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/consistencyCheck.vue
@@ -0,0 +1,150 @@
+
+
+
+
+
+ {{ $t('trials:tab:consistencyCheck') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/imageQualityControl.vue b/src/views/trials/trials-workbench/components/imageQualityControl.vue
new file mode 100644
index 0000000..78237ee
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/imageQualityControl.vue
@@ -0,0 +1,147 @@
+
+
+
+
+
+ 影像质控
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/imageQuestion.vue b/src/views/trials/trials-workbench/components/imageQuestion.vue
new file mode 100644
index 0000000..c61d501
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/imageQuestion.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+ 影像质疑
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/imageReupload.vue b/src/views/trials/trials-workbench/components/imageReupload.vue
new file mode 100644
index 0000000..05c3192
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/imageReupload.vue
@@ -0,0 +1,139 @@
+
+
+
+
+
+ 影像重传
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/imageSubmission.vue b/src/views/trials/trials-workbench/components/imageSubmission.vue
new file mode 100644
index 0000000..1518c00
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/imageSubmission.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+ 加急影像提交
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/imageVerification.vue b/src/views/trials/trials-workbench/components/imageVerification.vue
new file mode 100644
index 0000000..56d4eb0
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/imageVerification.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+ 核查质疑
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/imagesToRead.vue b/src/views/trials/trials-workbench/components/imagesToRead.vue
new file mode 100644
index 0000000..1af9a96
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/imagesToRead.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+ 影像待阅
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/medicalAudit.vue b/src/views/trials/trials-workbench/components/medicalAudit.vue
new file mode 100644
index 0000000..79bf7bf
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/medicalAudit.vue
@@ -0,0 +1,154 @@
+
+
+
+
+
+ 医学审核
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/medicalFeedback.vue b/src/views/trials/trials-workbench/components/medicalFeedback.vue
new file mode 100644
index 0000000..32fa410
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/medicalFeedback.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+ 医学反馈
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/needSignSysDoc.vue b/src/views/trials/trials-workbench/components/needSignSysDoc.vue
new file mode 100644
index 0000000..a6b7b11
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/needSignSysDoc.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+ {{ $t('trials:workbench:title:sysDocBeSigned') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('common:message:signTip') }}
+ {{ `(${currentMinMinutes * 60 - duration}s)` }}
+
+
+
+ {{ $t('common:button:sign') }}
+
+
+
+
+
+
+
+
+
+ {{ $t('common:dialogTitle:sign') }}
+ {{ `(${$t('common:label:sign')}${ currentUser })` }}
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/needSignTrialDoc.vue b/src/views/trials/trials-workbench/components/needSignTrialDoc.vue
new file mode 100644
index 0000000..f99b7f0
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/needSignTrialDoc.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+ {{ $t('trials:workbench:title:trialDocBeSigned') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/panelCount.vue b/src/views/trials/trials-workbench/components/panelCount.vue
new file mode 100644
index 0000000..f763fca
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/panelCount.vue
@@ -0,0 +1,209 @@
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:workbench:label:trialsStats') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:workbench:label:attachmentsStats') }}
+
+
+
+ /
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:workbench:label:pendingTasksStats') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $t('trials:workbench:label:messagesStats') }}
+
+
+
+ /
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/qcQuestion.vue b/src/views/trials/trials-workbench/components/qcQuestion.vue
new file mode 100644
index 0000000..4460031
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/qcQuestion.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+ QC质疑
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/rereadApproval.vue b/src/views/trials/trials-workbench/components/rereadApproval.vue
new file mode 100644
index 0000000..2e0c950
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/rereadApproval.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+ 重阅审批
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/reviewerApproval.vue b/src/views/trials/trials-workbench/components/reviewerApproval.vue
new file mode 100644
index 0000000..53fbf17
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/reviewerApproval.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+ 阅片人审批
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/reviewerScreen.vue b/src/views/trials/trials-workbench/components/reviewerScreen.vue
new file mode 100644
index 0000000..246cd1a
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/reviewerScreen.vue
@@ -0,0 +1,145 @@
+
+
+
+
+
+ 重阅审批
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+ {{ $fd('YesOrNo', scope.row.IsUrgent) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/siteResearch.vue b/src/views/trials/trials-workbench/components/siteResearch.vue
new file mode 100644
index 0000000..d5c0b4e
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/siteResearch.vue
@@ -0,0 +1,131 @@
+
+
+
+
+
+ {{ $t('trials:workbench:title:pendingSiteResearch') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/components/spmRereadApproval.vue b/src/views/trials/trials-workbench/components/spmRereadApproval.vue
new file mode 100644
index 0000000..61f3e44
--- /dev/null
+++ b/src/views/trials/trials-workbench/components/spmRereadApproval.vue
@@ -0,0 +1,140 @@
+
+
+
+
+
+ 重阅审批
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/trials/trials-workbench/index.vue b/src/views/trials/trials-workbench/index.vue
new file mode 100644
index 0000000..08ebb13
--- /dev/null
+++ b/src/views/trials/trials-workbench/index.vue
@@ -0,0 +1,292 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/user/account.vue b/src/views/user/account.vue
new file mode 100644
index 0000000..bea9261
--- /dev/null
+++ b/src/views/user/account.vue
@@ -0,0 +1,95 @@
+
+
+
+
+ Security
+
+
+
+
+
+
+
+
+
+
+
+
+ save
+
+
+
+
+
+
diff --git a/src/views/user/editInfo.vue b/src/views/user/editInfo.vue
new file mode 100644
index 0000000..abf5600
--- /dev/null
+++ b/src/views/user/editInfo.vue
@@ -0,0 +1,247 @@
+
+
+
+
+
+ Basic Information
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Male
+ Female
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Affiliation
+
+
+
+ Internal
+ External
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Save
+
+
+
+
+
+
diff --git a/src/views/user/myInfo.vue b/src/views/user/myInfo.vue
new file mode 100644
index 0000000..13d4993
--- /dev/null
+++ b/src/views/user/myInfo.vue
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/static/pdfjs/LICENSE b/static/pdfjs/LICENSE
new file mode 100644
index 0000000..f433b1a
--- /dev/null
+++ b/static/pdfjs/LICENSE
@@ -0,0 +1,177 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
diff --git a/static/pdfjs/build/pdf.js b/static/pdfjs/build/pdf.js
new file mode 100644
index 0000000..3e1de0b
--- /dev/null
+++ b/static/pdfjs/build/pdf.js
@@ -0,0 +1,15806 @@
+/**
+ * @licstart The following is the entire license notice for the
+ * Javascript code in this page
+ *
+ * Copyright 2022 Mozilla Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * @licend The above is the entire license notice for the
+ * Javascript code in this page
+ */
+
+(function webpackUniversalModuleDefinition(root, factory) {
+ if(typeof exports === 'object' && typeof module === 'object')
+ module.exports = factory();
+ else if(typeof define === 'function' && define.amd)
+ define("pdfjs-dist/build/pdf", [], factory);
+ else if(typeof exports === 'object')
+ exports["pdfjs-dist/build/pdf"] = factory();
+ else
+ root["pdfjs-dist/build/pdf"] = root.pdfjsLib = factory();
+})(this, function() {
+return /******/ (() => { // webpackBootstrap
+/******/ "use strict";
+/******/ var __webpack_modules__ = ([
+/* 0 */,
+/* 1 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.VerbosityLevel = exports.Util = exports.UnknownErrorException = exports.UnexpectedResponseException = exports.UNSUPPORTED_FEATURES = exports.TextRenderingMode = exports.StreamType = exports.RenderingIntentFlag = exports.PermissionFlag = exports.PasswordResponses = exports.PasswordException = exports.PageActionEventType = exports.OPS = exports.MissingPDFException = exports.IsLittleEndianCached = exports.IsEvalSupportedCached = exports.InvalidPDFException = exports.ImageKind = exports.IDENTITY_MATRIX = exports.FormatError = exports.FontType = exports.FONT_IDENTITY_MATRIX = exports.DocumentActionEventType = exports.CMapCompressionType = exports.BaseException = exports.AnnotationType = exports.AnnotationStateModelType = exports.AnnotationReviewState = exports.AnnotationReplyType = exports.AnnotationMode = exports.AnnotationMarkedState = exports.AnnotationFlag = exports.AnnotationFieldFlag = exports.AnnotationBorderStyleType = exports.AnnotationActionEventType = exports.AbortException = void 0;
+exports.arrayByteLength = arrayByteLength;
+exports.arraysToBytes = arraysToBytes;
+exports.assert = assert;
+exports.bytesToString = bytesToString;
+exports.createPromiseCapability = createPromiseCapability;
+exports.createValidAbsoluteUrl = createValidAbsoluteUrl;
+exports.escapeString = escapeString;
+exports.getModificationDate = getModificationDate;
+exports.getVerbosityLevel = getVerbosityLevel;
+exports.info = info;
+exports.isArrayBuffer = isArrayBuffer;
+exports.isArrayEqual = isArrayEqual;
+exports.isAscii = isAscii;
+exports.isSameOrigin = isSameOrigin;
+exports.objectFromMap = objectFromMap;
+exports.objectSize = objectSize;
+exports.setVerbosityLevel = setVerbosityLevel;
+exports.shadow = shadow;
+exports.string32 = string32;
+exports.stringToBytes = stringToBytes;
+exports.stringToPDFString = stringToPDFString;
+exports.stringToUTF16BEString = stringToUTF16BEString;
+exports.stringToUTF8String = stringToUTF8String;
+exports.unreachable = unreachable;
+exports.utf8StringToString = utf8StringToString;
+exports.warn = warn;
+
+__w_pdfjs_require__(2);
+
+const IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];
+exports.IDENTITY_MATRIX = IDENTITY_MATRIX;
+const FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];
+exports.FONT_IDENTITY_MATRIX = FONT_IDENTITY_MATRIX;
+const RenderingIntentFlag = {
+ ANY: 0x01,
+ DISPLAY: 0x02,
+ PRINT: 0x04,
+ ANNOTATIONS_FORMS: 0x10,
+ ANNOTATIONS_STORAGE: 0x20,
+ ANNOTATIONS_DISABLE: 0x40,
+ OPLIST: 0x100
+};
+exports.RenderingIntentFlag = RenderingIntentFlag;
+const AnnotationMode = {
+ DISABLE: 0,
+ ENABLE: 1,
+ ENABLE_FORMS: 2,
+ ENABLE_STORAGE: 3
+};
+exports.AnnotationMode = AnnotationMode;
+const PermissionFlag = {
+ PRINT: 0x04,
+ MODIFY_CONTENTS: 0x08,
+ COPY: 0x10,
+ MODIFY_ANNOTATIONS: 0x20,
+ FILL_INTERACTIVE_FORMS: 0x100,
+ COPY_FOR_ACCESSIBILITY: 0x200,
+ ASSEMBLE: 0x400,
+ PRINT_HIGH_QUALITY: 0x800
+};
+exports.PermissionFlag = PermissionFlag;
+const TextRenderingMode = {
+ FILL: 0,
+ STROKE: 1,
+ FILL_STROKE: 2,
+ INVISIBLE: 3,
+ FILL_ADD_TO_PATH: 4,
+ STROKE_ADD_TO_PATH: 5,
+ FILL_STROKE_ADD_TO_PATH: 6,
+ ADD_TO_PATH: 7,
+ FILL_STROKE_MASK: 3,
+ ADD_TO_PATH_FLAG: 4
+};
+exports.TextRenderingMode = TextRenderingMode;
+const ImageKind = {
+ GRAYSCALE_1BPP: 1,
+ RGB_24BPP: 2,
+ RGBA_32BPP: 3
+};
+exports.ImageKind = ImageKind;
+const AnnotationType = {
+ TEXT: 1,
+ LINK: 2,
+ FREETEXT: 3,
+ LINE: 4,
+ SQUARE: 5,
+ CIRCLE: 6,
+ POLYGON: 7,
+ POLYLINE: 8,
+ HIGHLIGHT: 9,
+ UNDERLINE: 10,
+ SQUIGGLY: 11,
+ STRIKEOUT: 12,
+ STAMP: 13,
+ CARET: 14,
+ INK: 15,
+ POPUP: 16,
+ FILEATTACHMENT: 17,
+ SOUND: 18,
+ MOVIE: 19,
+ WIDGET: 20,
+ SCREEN: 21,
+ PRINTERMARK: 22,
+ TRAPNET: 23,
+ WATERMARK: 24,
+ THREED: 25,
+ REDACT: 26
+};
+exports.AnnotationType = AnnotationType;
+const AnnotationStateModelType = {
+ MARKED: "Marked",
+ REVIEW: "Review"
+};
+exports.AnnotationStateModelType = AnnotationStateModelType;
+const AnnotationMarkedState = {
+ MARKED: "Marked",
+ UNMARKED: "Unmarked"
+};
+exports.AnnotationMarkedState = AnnotationMarkedState;
+const AnnotationReviewState = {
+ ACCEPTED: "Accepted",
+ REJECTED: "Rejected",
+ CANCELLED: "Cancelled",
+ COMPLETED: "Completed",
+ NONE: "None"
+};
+exports.AnnotationReviewState = AnnotationReviewState;
+const AnnotationReplyType = {
+ GROUP: "Group",
+ REPLY: "R"
+};
+exports.AnnotationReplyType = AnnotationReplyType;
+const AnnotationFlag = {
+ INVISIBLE: 0x01,
+ HIDDEN: 0x02,
+ PRINT: 0x04,
+ NOZOOM: 0x08,
+ NOROTATE: 0x10,
+ NOVIEW: 0x20,
+ READONLY: 0x40,
+ LOCKED: 0x80,
+ TOGGLENOVIEW: 0x100,
+ LOCKEDCONTENTS: 0x200
+};
+exports.AnnotationFlag = AnnotationFlag;
+const AnnotationFieldFlag = {
+ READONLY: 0x0000001,
+ REQUIRED: 0x0000002,
+ NOEXPORT: 0x0000004,
+ MULTILINE: 0x0001000,
+ PASSWORD: 0x0002000,
+ NOTOGGLETOOFF: 0x0004000,
+ RADIO: 0x0008000,
+ PUSHBUTTON: 0x0010000,
+ COMBO: 0x0020000,
+ EDIT: 0x0040000,
+ SORT: 0x0080000,
+ FILESELECT: 0x0100000,
+ MULTISELECT: 0x0200000,
+ DONOTSPELLCHECK: 0x0400000,
+ DONOTSCROLL: 0x0800000,
+ COMB: 0x1000000,
+ RICHTEXT: 0x2000000,
+ RADIOSINUNISON: 0x2000000,
+ COMMITONSELCHANGE: 0x4000000
+};
+exports.AnnotationFieldFlag = AnnotationFieldFlag;
+const AnnotationBorderStyleType = {
+ SOLID: 1,
+ DASHED: 2,
+ BEVELED: 3,
+ INSET: 4,
+ UNDERLINE: 5
+};
+exports.AnnotationBorderStyleType = AnnotationBorderStyleType;
+const AnnotationActionEventType = {
+ E: "Mouse Enter",
+ X: "Mouse Exit",
+ D: "Mouse Down",
+ U: "Mouse Up",
+ Fo: "Focus",
+ Bl: "Blur",
+ PO: "PageOpen",
+ PC: "PageClose",
+ PV: "PageVisible",
+ PI: "PageInvisible",
+ K: "Keystroke",
+ F: "Format",
+ V: "Validate",
+ C: "Calculate"
+};
+exports.AnnotationActionEventType = AnnotationActionEventType;
+const DocumentActionEventType = {
+ WC: "WillClose",
+ WS: "WillSave",
+ DS: "DidSave",
+ WP: "WillPrint",
+ DP: "DidPrint"
+};
+exports.DocumentActionEventType = DocumentActionEventType;
+const PageActionEventType = {
+ O: "PageOpen",
+ C: "PageClose"
+};
+exports.PageActionEventType = PageActionEventType;
+const StreamType = {
+ UNKNOWN: "UNKNOWN",
+ FLATE: "FLATE",
+ LZW: "LZW",
+ DCT: "DCT",
+ JPX: "JPX",
+ JBIG: "JBIG",
+ A85: "A85",
+ AHX: "AHX",
+ CCF: "CCF",
+ RLX: "RLX"
+};
+exports.StreamType = StreamType;
+const FontType = {
+ UNKNOWN: "UNKNOWN",
+ TYPE1: "TYPE1",
+ TYPE1STANDARD: "TYPE1STANDARD",
+ TYPE1C: "TYPE1C",
+ CIDFONTTYPE0: "CIDFONTTYPE0",
+ CIDFONTTYPE0C: "CIDFONTTYPE0C",
+ TRUETYPE: "TRUETYPE",
+ CIDFONTTYPE2: "CIDFONTTYPE2",
+ TYPE3: "TYPE3",
+ OPENTYPE: "OPENTYPE",
+ TYPE0: "TYPE0",
+ MMTYPE1: "MMTYPE1"
+};
+exports.FontType = FontType;
+const VerbosityLevel = {
+ ERRORS: 0,
+ WARNINGS: 1,
+ INFOS: 5
+};
+exports.VerbosityLevel = VerbosityLevel;
+const CMapCompressionType = {
+ NONE: 0,
+ BINARY: 1,
+ STREAM: 2
+};
+exports.CMapCompressionType = CMapCompressionType;
+const OPS = {
+ dependency: 1,
+ setLineWidth: 2,
+ setLineCap: 3,
+ setLineJoin: 4,
+ setMiterLimit: 5,
+ setDash: 6,
+ setRenderingIntent: 7,
+ setFlatness: 8,
+ setGState: 9,
+ save: 10,
+ restore: 11,
+ transform: 12,
+ moveTo: 13,
+ lineTo: 14,
+ curveTo: 15,
+ curveTo2: 16,
+ curveTo3: 17,
+ closePath: 18,
+ rectangle: 19,
+ stroke: 20,
+ closeStroke: 21,
+ fill: 22,
+ eoFill: 23,
+ fillStroke: 24,
+ eoFillStroke: 25,
+ closeFillStroke: 26,
+ closeEOFillStroke: 27,
+ endPath: 28,
+ clip: 29,
+ eoClip: 30,
+ beginText: 31,
+ endText: 32,
+ setCharSpacing: 33,
+ setWordSpacing: 34,
+ setHScale: 35,
+ setLeading: 36,
+ setFont: 37,
+ setTextRenderingMode: 38,
+ setTextRise: 39,
+ moveText: 40,
+ setLeadingMoveText: 41,
+ setTextMatrix: 42,
+ nextLine: 43,
+ showText: 44,
+ showSpacedText: 45,
+ nextLineShowText: 46,
+ nextLineSetSpacingShowText: 47,
+ setCharWidth: 48,
+ setCharWidthAndBounds: 49,
+ setStrokeColorSpace: 50,
+ setFillColorSpace: 51,
+ setStrokeColor: 52,
+ setStrokeColorN: 53,
+ setFillColor: 54,
+ setFillColorN: 55,
+ setStrokeGray: 56,
+ setFillGray: 57,
+ setStrokeRGBColor: 58,
+ setFillRGBColor: 59,
+ setStrokeCMYKColor: 60,
+ setFillCMYKColor: 61,
+ shadingFill: 62,
+ beginInlineImage: 63,
+ beginImageData: 64,
+ endInlineImage: 65,
+ paintXObject: 66,
+ markPoint: 67,
+ markPointProps: 68,
+ beginMarkedContent: 69,
+ beginMarkedContentProps: 70,
+ endMarkedContent: 71,
+ beginCompat: 72,
+ endCompat: 73,
+ paintFormXObjectBegin: 74,
+ paintFormXObjectEnd: 75,
+ beginGroup: 76,
+ endGroup: 77,
+ beginAnnotations: 78,
+ endAnnotations: 79,
+ beginAnnotation: 80,
+ endAnnotation: 81,
+ paintJpegXObject: 82,
+ paintImageMaskXObject: 83,
+ paintImageMaskXObjectGroup: 84,
+ paintImageXObject: 85,
+ paintInlineImageXObject: 86,
+ paintInlineImageXObjectGroup: 87,
+ paintImageXObjectRepeat: 88,
+ paintImageMaskXObjectRepeat: 89,
+ paintSolidColorImageMask: 90,
+ constructPath: 91
+};
+exports.OPS = OPS;
+const UNSUPPORTED_FEATURES = {
+ unknown: "unknown",
+ forms: "forms",
+ javaScript: "javaScript",
+ signatures: "signatures",
+ smask: "smask",
+ shadingPattern: "shadingPattern",
+ font: "font",
+ errorTilingPattern: "errorTilingPattern",
+ errorExtGState: "errorExtGState",
+ errorXObject: "errorXObject",
+ errorFontLoadType3: "errorFontLoadType3",
+ errorFontState: "errorFontState",
+ errorFontMissing: "errorFontMissing",
+ errorFontTranslate: "errorFontTranslate",
+ errorColorSpace: "errorColorSpace",
+ errorOperatorList: "errorOperatorList",
+ errorFontToUnicode: "errorFontToUnicode",
+ errorFontLoadNative: "errorFontLoadNative",
+ errorFontBuildPath: "errorFontBuildPath",
+ errorFontGetPath: "errorFontGetPath",
+ errorMarkedContent: "errorMarkedContent",
+ errorContentSubStream: "errorContentSubStream"
+};
+exports.UNSUPPORTED_FEATURES = UNSUPPORTED_FEATURES;
+const PasswordResponses = {
+ NEED_PASSWORD: 1,
+ INCORRECT_PASSWORD: 2
+};
+exports.PasswordResponses = PasswordResponses;
+let verbosity = VerbosityLevel.WARNINGS;
+
+function setVerbosityLevel(level) {
+ if (Number.isInteger(level)) {
+ verbosity = level;
+ }
+}
+
+function getVerbosityLevel() {
+ return verbosity;
+}
+
+function info(msg) {
+ if (verbosity >= VerbosityLevel.INFOS) {
+ console.log(`Info: ${msg}`);
+ }
+}
+
+function warn(msg) {
+ if (verbosity >= VerbosityLevel.WARNINGS) {
+ console.log(`Warning: ${msg}`);
+ }
+}
+
+function unreachable(msg) {
+ throw new Error(msg);
+}
+
+function assert(cond, msg) {
+ if (!cond) {
+ unreachable(msg);
+ }
+}
+
+function isSameOrigin(baseUrl, otherUrl) {
+ let base;
+
+ try {
+ base = new URL(baseUrl);
+
+ if (!base.origin || base.origin === "null") {
+ return false;
+ }
+ } catch (e) {
+ return false;
+ }
+
+ const other = new URL(otherUrl, base);
+ return base.origin === other.origin;
+}
+
+function _isValidProtocol(url) {
+ if (!url) {
+ return false;
+ }
+
+ switch (url.protocol) {
+ case "http:":
+ case "https:":
+ case "ftp:":
+ case "mailto:":
+ case "tel:":
+ return true;
+
+ default:
+ return false;
+ }
+}
+
+function createValidAbsoluteUrl(url, baseUrl = null, options = null) {
+ if (!url) {
+ return null;
+ }
+
+ try {
+ if (options && typeof url === "string") {
+ if (options.addDefaultProtocol && url.startsWith("www.")) {
+ const dots = url.match(/\./g);
+
+ if (dots && dots.length >= 2) {
+ url = `http://${url}`;
+ }
+ }
+
+ if (options.tryConvertEncoding) {
+ try {
+ url = stringToUTF8String(url);
+ } catch (ex) {}
+ }
+ }
+
+ const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);
+
+ if (_isValidProtocol(absoluteUrl)) {
+ return absoluteUrl;
+ }
+ } catch (ex) {}
+
+ return null;
+}
+
+function shadow(obj, prop, value) {
+ Object.defineProperty(obj, prop, {
+ value,
+ enumerable: true,
+ configurable: true,
+ writable: false
+ });
+ return value;
+}
+
+const BaseException = function BaseExceptionClosure() {
+ function BaseException(message, name) {
+ if (this.constructor === BaseException) {
+ unreachable("Cannot initialize BaseException.");
+ }
+
+ this.message = message;
+ this.name = name;
+ }
+
+ BaseException.prototype = new Error();
+ BaseException.constructor = BaseException;
+ return BaseException;
+}();
+
+exports.BaseException = BaseException;
+
+class PasswordException extends BaseException {
+ constructor(msg, code) {
+ super(msg, "PasswordException");
+ this.code = code;
+ }
+
+}
+
+exports.PasswordException = PasswordException;
+
+class UnknownErrorException extends BaseException {
+ constructor(msg, details) {
+ super(msg, "UnknownErrorException");
+ this.details = details;
+ }
+
+}
+
+exports.UnknownErrorException = UnknownErrorException;
+
+class InvalidPDFException extends BaseException {
+ constructor(msg) {
+ super(msg, "InvalidPDFException");
+ }
+
+}
+
+exports.InvalidPDFException = InvalidPDFException;
+
+class MissingPDFException extends BaseException {
+ constructor(msg) {
+ super(msg, "MissingPDFException");
+ }
+
+}
+
+exports.MissingPDFException = MissingPDFException;
+
+class UnexpectedResponseException extends BaseException {
+ constructor(msg, status) {
+ super(msg, "UnexpectedResponseException");
+ this.status = status;
+ }
+
+}
+
+exports.UnexpectedResponseException = UnexpectedResponseException;
+
+class FormatError extends BaseException {
+ constructor(msg) {
+ super(msg, "FormatError");
+ }
+
+}
+
+exports.FormatError = FormatError;
+
+class AbortException extends BaseException {
+ constructor(msg) {
+ super(msg, "AbortException");
+ }
+
+}
+
+exports.AbortException = AbortException;
+
+function bytesToString(bytes) {
+ if (typeof bytes !== "object" || bytes === null || bytes.length === undefined) {
+ unreachable("Invalid argument for bytesToString");
+ }
+
+ const length = bytes.length;
+ const MAX_ARGUMENT_COUNT = 8192;
+
+ if (length < MAX_ARGUMENT_COUNT) {
+ return String.fromCharCode.apply(null, bytes);
+ }
+
+ const strBuf = [];
+
+ for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {
+ const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);
+ const chunk = bytes.subarray(i, chunkEnd);
+ strBuf.push(String.fromCharCode.apply(null, chunk));
+ }
+
+ return strBuf.join("");
+}
+
+function stringToBytes(str) {
+ if (typeof str !== "string") {
+ unreachable("Invalid argument for stringToBytes");
+ }
+
+ const length = str.length;
+ const bytes = new Uint8Array(length);
+
+ for (let i = 0; i < length; ++i) {
+ bytes[i] = str.charCodeAt(i) & 0xff;
+ }
+
+ return bytes;
+}
+
+function arrayByteLength(arr) {
+ if (arr.length !== undefined) {
+ return arr.length;
+ }
+
+ if (arr.byteLength !== undefined) {
+ return arr.byteLength;
+ }
+
+ unreachable("Invalid argument for arrayByteLength");
+}
+
+function arraysToBytes(arr) {
+ const length = arr.length;
+
+ if (length === 1 && arr[0] instanceof Uint8Array) {
+ return arr[0];
+ }
+
+ let resultLength = 0;
+
+ for (let i = 0; i < length; i++) {
+ resultLength += arrayByteLength(arr[i]);
+ }
+
+ let pos = 0;
+ const data = new Uint8Array(resultLength);
+
+ for (let i = 0; i < length; i++) {
+ let item = arr[i];
+
+ if (!(item instanceof Uint8Array)) {
+ if (typeof item === "string") {
+ item = stringToBytes(item);
+ } else {
+ item = new Uint8Array(item);
+ }
+ }
+
+ const itemLength = item.byteLength;
+ data.set(item, pos);
+ pos += itemLength;
+ }
+
+ return data;
+}
+
+function string32(value) {
+ return String.fromCharCode(value >> 24 & 0xff, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff);
+}
+
+function objectSize(obj) {
+ return Object.keys(obj).length;
+}
+
+function objectFromMap(map) {
+ const obj = Object.create(null);
+
+ for (const [key, value] of map) {
+ obj[key] = value;
+ }
+
+ return obj;
+}
+
+function isLittleEndian() {
+ const buffer8 = new Uint8Array(4);
+ buffer8[0] = 1;
+ const view32 = new Uint32Array(buffer8.buffer, 0, 1);
+ return view32[0] === 1;
+}
+
+const IsLittleEndianCached = {
+ get value() {
+ return shadow(this, "value", isLittleEndian());
+ }
+
+};
+exports.IsLittleEndianCached = IsLittleEndianCached;
+
+function isEvalSupported() {
+ try {
+ new Function("");
+ return true;
+ } catch (e) {
+ return false;
+ }
+}
+
+const IsEvalSupportedCached = {
+ get value() {
+ return shadow(this, "value", isEvalSupported());
+ }
+
+};
+exports.IsEvalSupportedCached = IsEvalSupportedCached;
+const hexNumbers = [...Array(256).keys()].map(n => n.toString(16).padStart(2, "0"));
+
+class Util {
+ static makeHexColor(r, g, b) {
+ return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;
+ }
+
+ static transform(m1, m2) {
+ return [m1[0] * m2[0] + m1[2] * m2[1], m1[1] * m2[0] + m1[3] * m2[1], m1[0] * m2[2] + m1[2] * m2[3], m1[1] * m2[2] + m1[3] * m2[3], m1[0] * m2[4] + m1[2] * m2[5] + m1[4], m1[1] * m2[4] + m1[3] * m2[5] + m1[5]];
+ }
+
+ static applyTransform(p, m) {
+ const xt = p[0] * m[0] + p[1] * m[2] + m[4];
+ const yt = p[0] * m[1] + p[1] * m[3] + m[5];
+ return [xt, yt];
+ }
+
+ static applyInverseTransform(p, m) {
+ const d = m[0] * m[3] - m[1] * m[2];
+ const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;
+ const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;
+ return [xt, yt];
+ }
+
+ static getAxialAlignedBoundingBox(r, m) {
+ const p1 = Util.applyTransform(r, m);
+ const p2 = Util.applyTransform(r.slice(2, 4), m);
+ const p3 = Util.applyTransform([r[0], r[3]], m);
+ const p4 = Util.applyTransform([r[2], r[1]], m);
+ return [Math.min(p1[0], p2[0], p3[0], p4[0]), Math.min(p1[1], p2[1], p3[1], p4[1]), Math.max(p1[0], p2[0], p3[0], p4[0]), Math.max(p1[1], p2[1], p3[1], p4[1])];
+ }
+
+ static inverseTransform(m) {
+ const d = m[0] * m[3] - m[1] * m[2];
+ return [m[3] / d, -m[1] / d, -m[2] / d, m[0] / d, (m[2] * m[5] - m[4] * m[3]) / d, (m[4] * m[1] - m[5] * m[0]) / d];
+ }
+
+ static apply3dTransform(m, v) {
+ return [m[0] * v[0] + m[1] * v[1] + m[2] * v[2], m[3] * v[0] + m[4] * v[1] + m[5] * v[2], m[6] * v[0] + m[7] * v[1] + m[8] * v[2]];
+ }
+
+ static singularValueDecompose2dScale(m) {
+ const transpose = [m[0], m[2], m[1], m[3]];
+ const a = m[0] * transpose[0] + m[1] * transpose[2];
+ const b = m[0] * transpose[1] + m[1] * transpose[3];
+ const c = m[2] * transpose[0] + m[3] * transpose[2];
+ const d = m[2] * transpose[1] + m[3] * transpose[3];
+ const first = (a + d) / 2;
+ const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;
+ const sx = first + second || 1;
+ const sy = first - second || 1;
+ return [Math.sqrt(sx), Math.sqrt(sy)];
+ }
+
+ static normalizeRect(rect) {
+ const r = rect.slice(0);
+
+ if (rect[0] > rect[2]) {
+ r[0] = rect[2];
+ r[2] = rect[0];
+ }
+
+ if (rect[1] > rect[3]) {
+ r[1] = rect[3];
+ r[3] = rect[1];
+ }
+
+ return r;
+ }
+
+ static intersect(rect1, rect2) {
+ function compare(a, b) {
+ return a - b;
+ }
+
+ const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);
+ const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);
+ const result = [];
+ rect1 = Util.normalizeRect(rect1);
+ rect2 = Util.normalizeRect(rect2);
+
+ if (orderedX[0] === rect1[0] && orderedX[1] === rect2[0] || orderedX[0] === rect2[0] && orderedX[1] === rect1[0]) {
+ result[0] = orderedX[1];
+ result[2] = orderedX[2];
+ } else {
+ return null;
+ }
+
+ if (orderedY[0] === rect1[1] && orderedY[1] === rect2[1] || orderedY[0] === rect2[1] && orderedY[1] === rect1[1]) {
+ result[1] = orderedY[1];
+ result[3] = orderedY[2];
+ } else {
+ return null;
+ }
+
+ return result;
+ }
+
+ static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {
+ const tvalues = [],
+ bounds = [[], []];
+ let a, b, c, t, t1, t2, b2ac, sqrtb2ac;
+
+ for (let i = 0; i < 2; ++i) {
+ if (i === 0) {
+ b = 6 * x0 - 12 * x1 + 6 * x2;
+ a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;
+ c = 3 * x1 - 3 * x0;
+ } else {
+ b = 6 * y0 - 12 * y1 + 6 * y2;
+ a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;
+ c = 3 * y1 - 3 * y0;
+ }
+
+ if (Math.abs(a) < 1e-12) {
+ if (Math.abs(b) < 1e-12) {
+ continue;
+ }
+
+ t = -c / b;
+
+ if (0 < t && t < 1) {
+ tvalues.push(t);
+ }
+
+ continue;
+ }
+
+ b2ac = b * b - 4 * c * a;
+ sqrtb2ac = Math.sqrt(b2ac);
+
+ if (b2ac < 0) {
+ continue;
+ }
+
+ t1 = (-b + sqrtb2ac) / (2 * a);
+
+ if (0 < t1 && t1 < 1) {
+ tvalues.push(t1);
+ }
+
+ t2 = (-b - sqrtb2ac) / (2 * a);
+
+ if (0 < t2 && t2 < 1) {
+ tvalues.push(t2);
+ }
+ }
+
+ let j = tvalues.length,
+ mt;
+ const jlen = j;
+
+ while (j--) {
+ t = tvalues[j];
+ mt = 1 - t;
+ bounds[0][j] = mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3;
+ bounds[1][j] = mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3;
+ }
+
+ bounds[0][jlen] = x0;
+ bounds[1][jlen] = y0;
+ bounds[0][jlen + 1] = x3;
+ bounds[1][jlen + 1] = y3;
+ bounds[0].length = bounds[1].length = jlen + 2;
+ return [Math.min(...bounds[0]), Math.min(...bounds[1]), Math.max(...bounds[0]), Math.max(...bounds[1])];
+ }
+
+}
+
+exports.Util = Util;
+const PDFStringTranslateTable = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8, 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192, 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018, 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d, 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac];
+
+function stringToPDFString(str) {
+ if (str[0] >= "\xEF") {
+ let encoding;
+
+ if (str[0] === "\xFE" && str[1] === "\xFF") {
+ encoding = "utf-16be";
+ } else if (str[0] === "\xFF" && str[1] === "\xFE") {
+ encoding = "utf-16le";
+ } else if (str[0] === "\xEF" && str[1] === "\xBB" && str[2] === "\xBF") {
+ encoding = "utf-8";
+ }
+
+ if (encoding) {
+ try {
+ const decoder = new TextDecoder(encoding, {
+ fatal: true
+ });
+ const buffer = stringToBytes(str);
+ return decoder.decode(buffer);
+ } catch (ex) {
+ warn(`stringToPDFString: "${ex}".`);
+ }
+ }
+ }
+
+ const strBuf = [];
+
+ for (let i = 0, ii = str.length; i < ii; i++) {
+ const code = PDFStringTranslateTable[str.charCodeAt(i)];
+ strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));
+ }
+
+ return strBuf.join("");
+}
+
+function escapeString(str) {
+ return str.replace(/([()\\\n\r])/g, match => {
+ if (match === "\n") {
+ return "\\n";
+ } else if (match === "\r") {
+ return "\\r";
+ }
+
+ return `\\${match}`;
+ });
+}
+
+function isAscii(str) {
+ return /^[\x00-\x7F]*$/.test(str);
+}
+
+function stringToUTF16BEString(str) {
+ const buf = ["\xFE\xFF"];
+
+ for (let i = 0, ii = str.length; i < ii; i++) {
+ const char = str.charCodeAt(i);
+ buf.push(String.fromCharCode(char >> 8 & 0xff), String.fromCharCode(char & 0xff));
+ }
+
+ return buf.join("");
+}
+
+function stringToUTF8String(str) {
+ return decodeURIComponent(escape(str));
+}
+
+function utf8StringToString(str) {
+ return unescape(encodeURIComponent(str));
+}
+
+function isArrayBuffer(v) {
+ return typeof v === "object" && v !== null && v.byteLength !== undefined;
+}
+
+function isArrayEqual(arr1, arr2) {
+ if (arr1.length !== arr2.length) {
+ return false;
+ }
+
+ for (let i = 0, ii = arr1.length; i < ii; i++) {
+ if (arr1[i] !== arr2[i]) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+function getModificationDate(date = new Date()) {
+ const buffer = [date.getUTCFullYear().toString(), (date.getUTCMonth() + 1).toString().padStart(2, "0"), date.getUTCDate().toString().padStart(2, "0"), date.getUTCHours().toString().padStart(2, "0"), date.getUTCMinutes().toString().padStart(2, "0"), date.getUTCSeconds().toString().padStart(2, "0")];
+ return buffer.join("");
+}
+
+function createPromiseCapability() {
+ const capability = Object.create(null);
+ let isSettled = false;
+ Object.defineProperty(capability, "settled", {
+ get() {
+ return isSettled;
+ }
+
+ });
+ capability.promise = new Promise(function (resolve, reject) {
+ capability.resolve = function (data) {
+ isSettled = true;
+ resolve(data);
+ };
+
+ capability.reject = function (reason) {
+ isSettled = true;
+ reject(reason);
+ };
+ });
+ return capability;
+}
+
+/***/ }),
+/* 2 */
+/***/ ((__unused_webpack_module, __unused_webpack_exports, __w_pdfjs_require__) => {
+
+
+
+var _is_node = __w_pdfjs_require__(3);
+
+;
+
+/***/ }),
+/* 3 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.isNodeJS = void 0;
+const isNodeJS = typeof process === "object" && process + "" === "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser");
+exports.isNodeJS = isNodeJS;
+
+/***/ }),
+/* 4 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.build = exports.RenderTask = exports.PDFWorker = exports.PDFPageProxy = exports.PDFDocumentProxy = exports.PDFDocumentLoadingTask = exports.PDFDataRangeTransport = exports.LoopbackPort = exports.DefaultStandardFontDataFactory = exports.DefaultCanvasFactory = exports.DefaultCMapReaderFactory = void 0;
+exports.getDocument = getDocument;
+exports.setPDFNetworkStreamFactory = setPDFNetworkStreamFactory;
+exports.version = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _display_utils = __w_pdfjs_require__(5);
+
+var _font_loader = __w_pdfjs_require__(7);
+
+var _node_utils = __w_pdfjs_require__(8);
+
+var _annotation_storage = __w_pdfjs_require__(9);
+
+var _canvas = __w_pdfjs_require__(10);
+
+var _worker_options = __w_pdfjs_require__(12);
+
+var _is_node = __w_pdfjs_require__(3);
+
+var _message_handler = __w_pdfjs_require__(13);
+
+var _metadata = __w_pdfjs_require__(14);
+
+var _optional_content_config = __w_pdfjs_require__(15);
+
+var _transport_stream = __w_pdfjs_require__(16);
+
+var _xfa_text = __w_pdfjs_require__(17);
+
+const DEFAULT_RANGE_CHUNK_SIZE = 65536;
+const RENDERING_CANCELLED_TIMEOUT = 100;
+const DefaultCanvasFactory = _is_node.isNodeJS ? _node_utils.NodeCanvasFactory : _display_utils.DOMCanvasFactory;
+exports.DefaultCanvasFactory = DefaultCanvasFactory;
+const DefaultCMapReaderFactory = _is_node.isNodeJS ? _node_utils.NodeCMapReaderFactory : _display_utils.DOMCMapReaderFactory;
+exports.DefaultCMapReaderFactory = DefaultCMapReaderFactory;
+const DefaultStandardFontDataFactory = _is_node.isNodeJS ? _node_utils.NodeStandardFontDataFactory : _display_utils.DOMStandardFontDataFactory;
+exports.DefaultStandardFontDataFactory = DefaultStandardFontDataFactory;
+let createPDFNetworkStream;
+
+function setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {
+ createPDFNetworkStream = pdfNetworkStreamFactory;
+}
+
+function getDocument(src) {
+ const task = new PDFDocumentLoadingTask();
+ let source;
+
+ if (typeof src === "string" || src instanceof URL) {
+ source = {
+ url: src
+ };
+ } else if ((0, _util.isArrayBuffer)(src)) {
+ source = {
+ data: src
+ };
+ } else if (src instanceof PDFDataRangeTransport) {
+ source = {
+ range: src
+ };
+ } else {
+ if (typeof src !== "object") {
+ throw new Error("Invalid parameter in getDocument, " + "need either string, URL, Uint8Array, or parameter object.");
+ }
+
+ if (!src.url && !src.data && !src.range) {
+ throw new Error("Invalid parameter object: need either .data, .range or .url");
+ }
+
+ source = src;
+ }
+
+ const params = Object.create(null);
+ let rangeTransport = null,
+ worker = null;
+
+ for (const key in source) {
+ const value = source[key];
+
+ switch (key) {
+ case "url":
+ if (typeof window !== "undefined") {
+ try {
+ params[key] = new URL(value, window.location).href;
+ continue;
+ } catch (ex) {
+ (0, _util.warn)(`Cannot create valid URL: "${ex}".`);
+ }
+ } else if (typeof value === "string" || value instanceof URL) {
+ params[key] = value.toString();
+ continue;
+ }
+
+ throw new Error("Invalid PDF url data: " + "either string or URL-object is expected in the url property.");
+
+ case "range":
+ rangeTransport = value;
+ continue;
+
+ case "worker":
+ worker = value;
+ continue;
+
+ case "data":
+ if (_is_node.isNodeJS && typeof Buffer !== "undefined" && value instanceof Buffer) {
+ params[key] = new Uint8Array(value);
+ } else if (value instanceof Uint8Array) {
+ break;
+ } else if (typeof value === "string") {
+ params[key] = (0, _util.stringToBytes)(value);
+ } else if (typeof value === "object" && value !== null && !isNaN(value.length)) {
+ params[key] = new Uint8Array(value);
+ } else if ((0, _util.isArrayBuffer)(value)) {
+ params[key] = new Uint8Array(value);
+ } else {
+ throw new Error("Invalid PDF binary data: either typed array, " + "string, or array-like object is expected in the data property.");
+ }
+
+ continue;
+ }
+
+ params[key] = value;
+ }
+
+ params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;
+ params.CMapReaderFactory = params.CMapReaderFactory || DefaultCMapReaderFactory;
+ params.StandardFontDataFactory = params.StandardFontDataFactory || DefaultStandardFontDataFactory;
+ params.ignoreErrors = params.stopAtErrors !== true;
+ params.fontExtraProperties = params.fontExtraProperties === true;
+ params.pdfBug = params.pdfBug === true;
+ params.enableXfa = params.enableXfa === true;
+
+ if (typeof params.docBaseUrl !== "string" || (0, _display_utils.isDataScheme)(params.docBaseUrl)) {
+ params.docBaseUrl = null;
+ }
+
+ if (!Number.isInteger(params.maxImageSize)) {
+ params.maxImageSize = -1;
+ }
+
+ if (typeof params.useWorkerFetch !== "boolean") {
+ params.useWorkerFetch = params.CMapReaderFactory === _display_utils.DOMCMapReaderFactory && params.StandardFontDataFactory === _display_utils.DOMStandardFontDataFactory;
+ }
+
+ if (typeof params.isEvalSupported !== "boolean") {
+ params.isEvalSupported = true;
+ }
+
+ if (typeof params.disableFontFace !== "boolean") {
+ params.disableFontFace = _is_node.isNodeJS;
+ }
+
+ if (typeof params.useSystemFonts !== "boolean") {
+ params.useSystemFonts = !_is_node.isNodeJS && !params.disableFontFace;
+ }
+
+ if (typeof params.ownerDocument === "undefined") {
+ params.ownerDocument = globalThis.document;
+ }
+
+ if (typeof params.disableRange !== "boolean") {
+ params.disableRange = false;
+ }
+
+ if (typeof params.disableStream !== "boolean") {
+ params.disableStream = false;
+ }
+
+ if (typeof params.disableAutoFetch !== "boolean") {
+ params.disableAutoFetch = false;
+ }
+
+ (0, _util.setVerbosityLevel)(params.verbosity);
+
+ if (!worker) {
+ const workerParams = {
+ verbosity: params.verbosity,
+ port: _worker_options.GlobalWorkerOptions.workerPort
+ };
+ worker = workerParams.port ? PDFWorker.fromPort(workerParams) : new PDFWorker(workerParams);
+ task._worker = worker;
+ }
+
+ const docId = task.docId;
+ worker.promise.then(function () {
+ if (task.destroyed) {
+ throw new Error("Loading aborted");
+ }
+
+ const workerIdPromise = _fetchDocument(worker, params, rangeTransport, docId);
+
+ const networkStreamPromise = new Promise(function (resolve) {
+ let networkStream;
+
+ if (rangeTransport) {
+ networkStream = new _transport_stream.PDFDataTransportStream({
+ length: params.length,
+ initialData: params.initialData,
+ progressiveDone: params.progressiveDone,
+ contentDispositionFilename: params.contentDispositionFilename,
+ disableRange: params.disableRange,
+ disableStream: params.disableStream
+ }, rangeTransport);
+ } else if (!params.data) {
+ networkStream = createPDFNetworkStream({
+ url: params.url,
+ length: params.length,
+ httpHeaders: params.httpHeaders,
+ withCredentials: params.withCredentials,
+ rangeChunkSize: params.rangeChunkSize,
+ disableRange: params.disableRange,
+ disableStream: params.disableStream
+ });
+ }
+
+ resolve(networkStream);
+ });
+ return Promise.all([workerIdPromise, networkStreamPromise]).then(function ([workerId, networkStream]) {
+ if (task.destroyed) {
+ throw new Error("Loading aborted");
+ }
+
+ const messageHandler = new _message_handler.MessageHandler(docId, workerId, worker.port);
+ const transport = new WorkerTransport(messageHandler, task, networkStream, params);
+ task._transport = transport;
+ messageHandler.send("Ready", null);
+ });
+ }).catch(task._capability.reject);
+ return task;
+}
+
+async function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {
+ if (worker.destroyed) {
+ throw new Error("Worker was destroyed");
+ }
+
+ if (pdfDataRangeTransport) {
+ source.length = pdfDataRangeTransport.length;
+ source.initialData = pdfDataRangeTransport.initialData;
+ source.progressiveDone = pdfDataRangeTransport.progressiveDone;
+ source.contentDispositionFilename = pdfDataRangeTransport.contentDispositionFilename;
+ }
+
+ const workerId = await worker.messageHandler.sendWithPromise("GetDocRequest", {
+ docId,
+ apiVersion: '2.13.216',
+ source: {
+ data: source.data,
+ url: source.url,
+ password: source.password,
+ disableAutoFetch: source.disableAutoFetch,
+ rangeChunkSize: source.rangeChunkSize,
+ length: source.length
+ },
+ maxImageSize: source.maxImageSize,
+ disableFontFace: source.disableFontFace,
+ docBaseUrl: source.docBaseUrl,
+ ignoreErrors: source.ignoreErrors,
+ isEvalSupported: source.isEvalSupported,
+ fontExtraProperties: source.fontExtraProperties,
+ enableXfa: source.enableXfa,
+ useSystemFonts: source.useSystemFonts,
+ cMapUrl: source.useWorkerFetch ? source.cMapUrl : null,
+ standardFontDataUrl: source.useWorkerFetch ? source.standardFontDataUrl : null
+ });
+
+ if (worker.destroyed) {
+ throw new Error("Worker was destroyed");
+ }
+
+ return workerId;
+}
+
+class PDFDocumentLoadingTask {
+ static get idCounters() {
+ return (0, _util.shadow)(this, "idCounters", {
+ doc: 0
+ });
+ }
+
+ constructor() {
+ this._capability = (0, _util.createPromiseCapability)();
+ this._transport = null;
+ this._worker = null;
+ this.docId = `d${PDFDocumentLoadingTask.idCounters.doc++}`;
+ this.destroyed = false;
+ this.onPassword = null;
+ this.onProgress = null;
+ this.onUnsupportedFeature = null;
+ }
+
+ get promise() {
+ return this._capability.promise;
+ }
+
+ async destroy() {
+ this.destroyed = true;
+ await this._transport?.destroy();
+ this._transport = null;
+
+ if (this._worker) {
+ this._worker.destroy();
+
+ this._worker = null;
+ }
+ }
+
+}
+
+exports.PDFDocumentLoadingTask = PDFDocumentLoadingTask;
+
+class PDFDataRangeTransport {
+ constructor(length, initialData, progressiveDone = false, contentDispositionFilename = null) {
+ this.length = length;
+ this.initialData = initialData;
+ this.progressiveDone = progressiveDone;
+ this.contentDispositionFilename = contentDispositionFilename;
+ this._rangeListeners = [];
+ this._progressListeners = [];
+ this._progressiveReadListeners = [];
+ this._progressiveDoneListeners = [];
+ this._readyCapability = (0, _util.createPromiseCapability)();
+ }
+
+ addRangeListener(listener) {
+ this._rangeListeners.push(listener);
+ }
+
+ addProgressListener(listener) {
+ this._progressListeners.push(listener);
+ }
+
+ addProgressiveReadListener(listener) {
+ this._progressiveReadListeners.push(listener);
+ }
+
+ addProgressiveDoneListener(listener) {
+ this._progressiveDoneListeners.push(listener);
+ }
+
+ onDataRange(begin, chunk) {
+ for (const listener of this._rangeListeners) {
+ listener(begin, chunk);
+ }
+ }
+
+ onDataProgress(loaded, total) {
+ this._readyCapability.promise.then(() => {
+ for (const listener of this._progressListeners) {
+ listener(loaded, total);
+ }
+ });
+ }
+
+ onDataProgressiveRead(chunk) {
+ this._readyCapability.promise.then(() => {
+ for (const listener of this._progressiveReadListeners) {
+ listener(chunk);
+ }
+ });
+ }
+
+ onDataProgressiveDone() {
+ this._readyCapability.promise.then(() => {
+ for (const listener of this._progressiveDoneListeners) {
+ listener();
+ }
+ });
+ }
+
+ transportReady() {
+ this._readyCapability.resolve();
+ }
+
+ requestDataRange(begin, end) {
+ (0, _util.unreachable)("Abstract method PDFDataRangeTransport.requestDataRange");
+ }
+
+ abort() {}
+
+}
+
+exports.PDFDataRangeTransport = PDFDataRangeTransport;
+
+class PDFDocumentProxy {
+ constructor(pdfInfo, transport) {
+ this._pdfInfo = pdfInfo;
+ this._transport = transport;
+ Object.defineProperty(this, "fingerprint", {
+ get() {
+ (0, _display_utils.deprecated)("`PDFDocumentProxy.fingerprint`, " + "please use `PDFDocumentProxy.fingerprints` instead.");
+ return this.fingerprints[0];
+ }
+
+ });
+ Object.defineProperty(this, "getStats", {
+ value: async () => {
+ (0, _display_utils.deprecated)("`PDFDocumentProxy.getStats`, " + "please use the `PDFDocumentProxy.stats`-getter instead.");
+ return this.stats || {
+ streamTypes: {},
+ fontTypes: {}
+ };
+ }
+ });
+ }
+
+ get annotationStorage() {
+ return this._transport.annotationStorage;
+ }
+
+ get numPages() {
+ return this._pdfInfo.numPages;
+ }
+
+ get fingerprints() {
+ return this._pdfInfo.fingerprints;
+ }
+
+ get stats() {
+ return this._transport.stats;
+ }
+
+ get isPureXfa() {
+ return !!this._transport._htmlForXfa;
+ }
+
+ get allXfaHtml() {
+ return this._transport._htmlForXfa;
+ }
+
+ getPage(pageNumber) {
+ return this._transport.getPage(pageNumber);
+ }
+
+ getPageIndex(ref) {
+ return this._transport.getPageIndex(ref);
+ }
+
+ getDestinations() {
+ return this._transport.getDestinations();
+ }
+
+ getDestination(id) {
+ return this._transport.getDestination(id);
+ }
+
+ getPageLabels() {
+ return this._transport.getPageLabels();
+ }
+
+ getPageLayout() {
+ return this._transport.getPageLayout();
+ }
+
+ getPageMode() {
+ return this._transport.getPageMode();
+ }
+
+ getViewerPreferences() {
+ return this._transport.getViewerPreferences();
+ }
+
+ getOpenAction() {
+ return this._transport.getOpenAction();
+ }
+
+ getAttachments() {
+ return this._transport.getAttachments();
+ }
+
+ getJavaScript() {
+ return this._transport.getJavaScript();
+ }
+
+ getJSActions() {
+ return this._transport.getDocJSActions();
+ }
+
+ getOutline() {
+ return this._transport.getOutline();
+ }
+
+ getOptionalContentConfig() {
+ return this._transport.getOptionalContentConfig();
+ }
+
+ getPermissions() {
+ return this._transport.getPermissions();
+ }
+
+ getMetadata() {
+ return this._transport.getMetadata();
+ }
+
+ getMarkInfo() {
+ return this._transport.getMarkInfo();
+ }
+
+ getData() {
+ return this._transport.getData();
+ }
+
+ getDownloadInfo() {
+ return this._transport.downloadInfoCapability.promise;
+ }
+
+ cleanup(keepLoadedFonts = false) {
+ return this._transport.startCleanup(keepLoadedFonts || this.isPureXfa);
+ }
+
+ destroy() {
+ return this.loadingTask.destroy();
+ }
+
+ get loadingParams() {
+ return this._transport.loadingParams;
+ }
+
+ get loadingTask() {
+ return this._transport.loadingTask;
+ }
+
+ saveDocument() {
+ if (this._transport.annotationStorage.size <= 0) {
+ (0, _display_utils.deprecated)("saveDocument called while `annotationStorage` is empty, " + "please use the getData-method instead.");
+ }
+
+ return this._transport.saveDocument();
+ }
+
+ getFieldObjects() {
+ return this._transport.getFieldObjects();
+ }
+
+ hasJSActions() {
+ return this._transport.hasJSActions();
+ }
+
+ getCalculationOrderIds() {
+ return this._transport.getCalculationOrderIds();
+ }
+
+}
+
+exports.PDFDocumentProxy = PDFDocumentProxy;
+
+class PDFPageProxy {
+ constructor(pageIndex, pageInfo, transport, ownerDocument, pdfBug = false) {
+ this._pageIndex = pageIndex;
+ this._pageInfo = pageInfo;
+ this._ownerDocument = ownerDocument;
+ this._transport = transport;
+ this._stats = pdfBug ? new _display_utils.StatTimer() : null;
+ this._pdfBug = pdfBug;
+ this.commonObjs = transport.commonObjs;
+ this.objs = new PDFObjects();
+ this.cleanupAfterRender = false;
+ this.pendingCleanup = false;
+ this._intentStates = new Map();
+ this._annotationPromises = new Map();
+ this.destroyed = false;
+ }
+
+ get pageNumber() {
+ return this._pageIndex + 1;
+ }
+
+ get rotate() {
+ return this._pageInfo.rotate;
+ }
+
+ get ref() {
+ return this._pageInfo.ref;
+ }
+
+ get userUnit() {
+ return this._pageInfo.userUnit;
+ }
+
+ get view() {
+ return this._pageInfo.view;
+ }
+
+ getViewport({
+ scale,
+ rotation = this.rotate,
+ offsetX = 0,
+ offsetY = 0,
+ dontFlip = false
+ } = {}) {
+ return new _display_utils.PageViewport({
+ viewBox: this.view,
+ scale,
+ rotation,
+ offsetX,
+ offsetY,
+ dontFlip
+ });
+ }
+
+ getAnnotations({
+ intent = "display"
+ } = {}) {
+ const intentArgs = this._transport.getRenderingIntent(intent);
+
+ let promise = this._annotationPromises.get(intentArgs.cacheKey);
+
+ if (!promise) {
+ promise = this._transport.getAnnotations(this._pageIndex, intentArgs.renderingIntent);
+
+ this._annotationPromises.set(intentArgs.cacheKey, promise);
+
+ promise = promise.then(annotations => {
+ for (const annotation of annotations) {
+ if (annotation.titleObj !== undefined) {
+ Object.defineProperty(annotation, "title", {
+ get() {
+ (0, _display_utils.deprecated)("`title`-property on annotation, please use `titleObj` instead.");
+ return annotation.titleObj.str;
+ }
+
+ });
+ }
+
+ if (annotation.contentsObj !== undefined) {
+ Object.defineProperty(annotation, "contents", {
+ get() {
+ (0, _display_utils.deprecated)("`contents`-property on annotation, please use `contentsObj` instead.");
+ return annotation.contentsObj.str;
+ }
+
+ });
+ }
+ }
+
+ return annotations;
+ });
+ }
+
+ return promise;
+ }
+
+ getJSActions() {
+ return this._jsActionsPromise ||= this._transport.getPageJSActions(this._pageIndex);
+ }
+
+ async getXfa() {
+ return this._transport._htmlForXfa?.children[this._pageIndex] || null;
+ }
+
+ render({
+ canvasContext,
+ viewport,
+ intent = "display",
+ annotationMode = _util.AnnotationMode.ENABLE,
+ transform = null,
+ imageLayer = null,
+ canvasFactory = null,
+ background = null,
+ optionalContentConfigPromise = null,
+ annotationCanvasMap = null
+ }) {
+ if (arguments[0]?.renderInteractiveForms !== undefined) {
+ (0, _display_utils.deprecated)("render no longer accepts the `renderInteractiveForms`-option, " + "please use the `annotationMode`-option instead.");
+
+ if (arguments[0].renderInteractiveForms === true && annotationMode === _util.AnnotationMode.ENABLE) {
+ annotationMode = _util.AnnotationMode.ENABLE_FORMS;
+ }
+ }
+
+ if (arguments[0]?.includeAnnotationStorage !== undefined) {
+ (0, _display_utils.deprecated)("render no longer accepts the `includeAnnotationStorage`-option, " + "please use the `annotationMode`-option instead.");
+
+ if (arguments[0].includeAnnotationStorage === true && annotationMode === _util.AnnotationMode.ENABLE) {
+ annotationMode = _util.AnnotationMode.ENABLE_STORAGE;
+ }
+ }
+
+ if (this._stats) {
+ this._stats.time("Overall");
+ }
+
+ const intentArgs = this._transport.getRenderingIntent(intent, annotationMode);
+
+ this.pendingCleanup = false;
+
+ if (!optionalContentConfigPromise) {
+ optionalContentConfigPromise = this._transport.getOptionalContentConfig();
+ }
+
+ let intentState = this._intentStates.get(intentArgs.cacheKey);
+
+ if (!intentState) {
+ intentState = Object.create(null);
+
+ this._intentStates.set(intentArgs.cacheKey, intentState);
+ }
+
+ if (intentState.streamReaderCancelTimeout) {
+ clearTimeout(intentState.streamReaderCancelTimeout);
+ intentState.streamReaderCancelTimeout = null;
+ }
+
+ const canvasFactoryInstance = canvasFactory || new DefaultCanvasFactory({
+ ownerDocument: this._ownerDocument
+ });
+ const intentPrint = !!(intentArgs.renderingIntent & _util.RenderingIntentFlag.PRINT);
+
+ if (!intentState.displayReadyCapability) {
+ intentState.displayReadyCapability = (0, _util.createPromiseCapability)();
+ intentState.operatorList = {
+ fnArray: [],
+ argsArray: [],
+ lastChunk: false
+ };
+
+ if (this._stats) {
+ this._stats.time("Page Request");
+ }
+
+ this._pumpOperatorList(intentArgs);
+ }
+
+ const complete = error => {
+ intentState.renderTasks.delete(internalRenderTask);
+
+ if (this.cleanupAfterRender || intentPrint) {
+ this.pendingCleanup = true;
+ }
+
+ this._tryCleanup();
+
+ if (error) {
+ internalRenderTask.capability.reject(error);
+
+ this._abortOperatorList({
+ intentState,
+ reason: error instanceof Error ? error : new Error(error)
+ });
+ } else {
+ internalRenderTask.capability.resolve();
+ }
+
+ if (this._stats) {
+ this._stats.timeEnd("Rendering");
+
+ this._stats.timeEnd("Overall");
+ }
+ };
+
+ const internalRenderTask = new InternalRenderTask({
+ callback: complete,
+ params: {
+ canvasContext,
+ viewport,
+ transform,
+ imageLayer,
+ background
+ },
+ objs: this.objs,
+ commonObjs: this.commonObjs,
+ annotationCanvasMap,
+ operatorList: intentState.operatorList,
+ pageIndex: this._pageIndex,
+ canvasFactory: canvasFactoryInstance,
+ useRequestAnimationFrame: !intentPrint,
+ pdfBug: this._pdfBug
+ });
+ (intentState.renderTasks ||= new Set()).add(internalRenderTask);
+ const renderTask = internalRenderTask.task;
+ Promise.all([intentState.displayReadyCapability.promise, optionalContentConfigPromise]).then(([transparency, optionalContentConfig]) => {
+ if (this.pendingCleanup) {
+ complete();
+ return;
+ }
+
+ if (this._stats) {
+ this._stats.time("Rendering");
+ }
+
+ internalRenderTask.initializeGraphics({
+ transparency,
+ optionalContentConfig
+ });
+ internalRenderTask.operatorListChanged();
+ }).catch(complete);
+ return renderTask;
+ }
+
+ getOperatorList({
+ intent = "display",
+ annotationMode = _util.AnnotationMode.ENABLE
+ } = {}) {
+ function operatorListChanged() {
+ if (intentState.operatorList.lastChunk) {
+ intentState.opListReadCapability.resolve(intentState.operatorList);
+ intentState.renderTasks.delete(opListTask);
+ }
+ }
+
+ const intentArgs = this._transport.getRenderingIntent(intent, annotationMode, true);
+
+ let intentState = this._intentStates.get(intentArgs.cacheKey);
+
+ if (!intentState) {
+ intentState = Object.create(null);
+
+ this._intentStates.set(intentArgs.cacheKey, intentState);
+ }
+
+ let opListTask;
+
+ if (!intentState.opListReadCapability) {
+ opListTask = Object.create(null);
+ opListTask.operatorListChanged = operatorListChanged;
+ intentState.opListReadCapability = (0, _util.createPromiseCapability)();
+ (intentState.renderTasks ||= new Set()).add(opListTask);
+ intentState.operatorList = {
+ fnArray: [],
+ argsArray: [],
+ lastChunk: false
+ };
+
+ if (this._stats) {
+ this._stats.time("Page Request");
+ }
+
+ this._pumpOperatorList(intentArgs);
+ }
+
+ return intentState.opListReadCapability.promise;
+ }
+
+ streamTextContent({
+ disableCombineTextItems = false,
+ includeMarkedContent = false
+ } = {}) {
+ const TEXT_CONTENT_CHUNK_SIZE = 100;
+ return this._transport.messageHandler.sendWithStream("GetTextContent", {
+ pageIndex: this._pageIndex,
+ combineTextItems: disableCombineTextItems !== true,
+ includeMarkedContent: includeMarkedContent === true
+ }, {
+ highWaterMark: TEXT_CONTENT_CHUNK_SIZE,
+
+ size(textContent) {
+ return textContent.items.length;
+ }
+
+ });
+ }
+
+ getTextContent(params = {}) {
+ if (this._transport._htmlForXfa) {
+ return this.getXfa().then(xfa => {
+ return _xfa_text.XfaText.textContent(xfa);
+ });
+ }
+
+ const readableStream = this.streamTextContent(params);
+ return new Promise(function (resolve, reject) {
+ function pump() {
+ reader.read().then(function ({
+ value,
+ done
+ }) {
+ if (done) {
+ resolve(textContent);
+ return;
+ }
+
+ Object.assign(textContent.styles, value.styles);
+ textContent.items.push(...value.items);
+ pump();
+ }, reject);
+ }
+
+ const reader = readableStream.getReader();
+ const textContent = {
+ items: [],
+ styles: Object.create(null)
+ };
+ pump();
+ });
+ }
+
+ getStructTree() {
+ return this._structTreePromise ||= this._transport.getStructTree(this._pageIndex);
+ }
+
+ _destroy() {
+ this.destroyed = true;
+ const waitOn = [];
+
+ for (const intentState of this._intentStates.values()) {
+ this._abortOperatorList({
+ intentState,
+ reason: new Error("Page was destroyed."),
+ force: true
+ });
+
+ if (intentState.opListReadCapability) {
+ continue;
+ }
+
+ for (const internalRenderTask of intentState.renderTasks) {
+ waitOn.push(internalRenderTask.completed);
+ internalRenderTask.cancel();
+ }
+ }
+
+ this.objs.clear();
+
+ this._annotationPromises.clear();
+
+ this._jsActionsPromise = null;
+ this._structTreePromise = null;
+ this.pendingCleanup = false;
+ return Promise.all(waitOn);
+ }
+
+ cleanup(resetStats = false) {
+ this.pendingCleanup = true;
+ return this._tryCleanup(resetStats);
+ }
+
+ _tryCleanup(resetStats = false) {
+ if (!this.pendingCleanup) {
+ return false;
+ }
+
+ for (const {
+ renderTasks,
+ operatorList
+ } of this._intentStates.values()) {
+ if (renderTasks.size > 0 || !operatorList.lastChunk) {
+ return false;
+ }
+ }
+
+ this._intentStates.clear();
+
+ this.objs.clear();
+
+ this._annotationPromises.clear();
+
+ this._jsActionsPromise = null;
+ this._structTreePromise = null;
+
+ if (resetStats && this._stats) {
+ this._stats = new _display_utils.StatTimer();
+ }
+
+ this.pendingCleanup = false;
+ return true;
+ }
+
+ _startRenderPage(transparency, cacheKey) {
+ const intentState = this._intentStates.get(cacheKey);
+
+ if (!intentState) {
+ return;
+ }
+
+ if (this._stats) {
+ this._stats.timeEnd("Page Request");
+ }
+
+ if (intentState.displayReadyCapability) {
+ intentState.displayReadyCapability.resolve(transparency);
+ }
+ }
+
+ _renderPageChunk(operatorListChunk, intentState) {
+ for (let i = 0, ii = operatorListChunk.length; i < ii; i++) {
+ intentState.operatorList.fnArray.push(operatorListChunk.fnArray[i]);
+ intentState.operatorList.argsArray.push(operatorListChunk.argsArray[i]);
+ }
+
+ intentState.operatorList.lastChunk = operatorListChunk.lastChunk;
+
+ for (const internalRenderTask of intentState.renderTasks) {
+ internalRenderTask.operatorListChanged();
+ }
+
+ if (operatorListChunk.lastChunk) {
+ this._tryCleanup();
+ }
+ }
+
+ _pumpOperatorList({
+ renderingIntent,
+ cacheKey
+ }) {
+ const readableStream = this._transport.messageHandler.sendWithStream("GetOperatorList", {
+ pageIndex: this._pageIndex,
+ intent: renderingIntent,
+ cacheKey,
+ annotationStorage: renderingIntent & _util.RenderingIntentFlag.ANNOTATIONS_STORAGE ? this._transport.annotationStorage.serializable : null
+ });
+
+ const reader = readableStream.getReader();
+
+ const intentState = this._intentStates.get(cacheKey);
+
+ intentState.streamReader = reader;
+
+ const pump = () => {
+ reader.read().then(({
+ value,
+ done
+ }) => {
+ if (done) {
+ intentState.streamReader = null;
+ return;
+ }
+
+ if (this._transport.destroyed) {
+ return;
+ }
+
+ this._renderPageChunk(value, intentState);
+
+ pump();
+ }, reason => {
+ intentState.streamReader = null;
+
+ if (this._transport.destroyed) {
+ return;
+ }
+
+ if (intentState.operatorList) {
+ intentState.operatorList.lastChunk = true;
+
+ for (const internalRenderTask of intentState.renderTasks) {
+ internalRenderTask.operatorListChanged();
+ }
+
+ this._tryCleanup();
+ }
+
+ if (intentState.displayReadyCapability) {
+ intentState.displayReadyCapability.reject(reason);
+ } else if (intentState.opListReadCapability) {
+ intentState.opListReadCapability.reject(reason);
+ } else {
+ throw reason;
+ }
+ });
+ };
+
+ pump();
+ }
+
+ _abortOperatorList({
+ intentState,
+ reason,
+ force = false
+ }) {
+ if (!intentState.streamReader) {
+ return;
+ }
+
+ if (!force) {
+ if (intentState.renderTasks.size > 0) {
+ return;
+ }
+
+ if (reason instanceof _display_utils.RenderingCancelledException) {
+ intentState.streamReaderCancelTimeout = setTimeout(() => {
+ this._abortOperatorList({
+ intentState,
+ reason,
+ force: true
+ });
+
+ intentState.streamReaderCancelTimeout = null;
+ }, RENDERING_CANCELLED_TIMEOUT);
+ return;
+ }
+ }
+
+ intentState.streamReader.cancel(new _util.AbortException(reason.message)).catch(() => {});
+ intentState.streamReader = null;
+
+ if (this._transport.destroyed) {
+ return;
+ }
+
+ for (const [curCacheKey, curIntentState] of this._intentStates) {
+ if (curIntentState === intentState) {
+ this._intentStates.delete(curCacheKey);
+
+ break;
+ }
+ }
+
+ this.cleanup();
+ }
+
+ get stats() {
+ return this._stats;
+ }
+
+}
+
+exports.PDFPageProxy = PDFPageProxy;
+
+class LoopbackPort {
+ constructor() {
+ this._listeners = [];
+ this._deferred = Promise.resolve();
+ }
+
+ postMessage(obj, transfers) {
+ const event = {
+ data: structuredClone(obj, transfers)
+ };
+
+ this._deferred.then(() => {
+ for (const listener of this._listeners) {
+ listener.call(this, event);
+ }
+ });
+ }
+
+ addEventListener(name, listener) {
+ this._listeners.push(listener);
+ }
+
+ removeEventListener(name, listener) {
+ const i = this._listeners.indexOf(listener);
+
+ this._listeners.splice(i, 1);
+ }
+
+ terminate() {
+ this._listeners.length = 0;
+ }
+
+}
+
+exports.LoopbackPort = LoopbackPort;
+const PDFWorkerUtil = {
+ isWorkerDisabled: false,
+ fallbackWorkerSrc: null,
+ fakeWorkerId: 0
+};
+{
+ if (_is_node.isNodeJS && typeof require === "function") {
+ PDFWorkerUtil.isWorkerDisabled = true;
+ PDFWorkerUtil.fallbackWorkerSrc = "./pdf.worker.js";
+ } else if (typeof document === "object") {
+ const pdfjsFilePath = document?.currentScript?.src;
+
+ if (pdfjsFilePath) {
+ PDFWorkerUtil.fallbackWorkerSrc = pdfjsFilePath.replace(/(\.(?:min\.)?js)(\?.*)?$/i, ".worker$1$2");
+ }
+ }
+
+ PDFWorkerUtil.createCDNWrapper = function (url) {
+ const wrapper = `importScripts("${url}");`;
+ return URL.createObjectURL(new Blob([wrapper]));
+ };
+}
+
+class PDFWorker {
+ static get _workerPorts() {
+ return (0, _util.shadow)(this, "_workerPorts", new WeakMap());
+ }
+
+ constructor({
+ name = null,
+ port = null,
+ verbosity = (0, _util.getVerbosityLevel)()
+ } = {}) {
+ if (port && PDFWorker._workerPorts.has(port)) {
+ throw new Error("Cannot use more than one PDFWorker per port.");
+ }
+
+ this.name = name;
+ this.destroyed = false;
+ this.verbosity = verbosity;
+ this._readyCapability = (0, _util.createPromiseCapability)();
+ this._port = null;
+ this._webWorker = null;
+ this._messageHandler = null;
+
+ if (port) {
+ PDFWorker._workerPorts.set(port, this);
+
+ this._initializeFromPort(port);
+
+ return;
+ }
+
+ this._initialize();
+ }
+
+ get promise() {
+ return this._readyCapability.promise;
+ }
+
+ get port() {
+ return this._port;
+ }
+
+ get messageHandler() {
+ return this._messageHandler;
+ }
+
+ _initializeFromPort(port) {
+ this._port = port;
+ this._messageHandler = new _message_handler.MessageHandler("main", "worker", port);
+
+ this._messageHandler.on("ready", function () {});
+
+ this._readyCapability.resolve();
+ }
+
+ _initialize() {
+ if (typeof Worker !== "undefined" && !PDFWorkerUtil.isWorkerDisabled && !PDFWorker._mainThreadWorkerMessageHandler) {
+ let workerSrc = PDFWorker.workerSrc;
+
+ try {
+ if (!(0, _util.isSameOrigin)(window.location.href, workerSrc)) {
+ workerSrc = PDFWorkerUtil.createCDNWrapper(new URL(workerSrc, window.location).href);
+ }
+
+ const worker = new Worker(workerSrc);
+ const messageHandler = new _message_handler.MessageHandler("main", "worker", worker);
+
+ const terminateEarly = () => {
+ worker.removeEventListener("error", onWorkerError);
+ messageHandler.destroy();
+ worker.terminate();
+
+ if (this.destroyed) {
+ this._readyCapability.reject(new Error("Worker was destroyed"));
+ } else {
+ this._setupFakeWorker();
+ }
+ };
+
+ const onWorkerError = () => {
+ if (!this._webWorker) {
+ terminateEarly();
+ }
+ };
+
+ worker.addEventListener("error", onWorkerError);
+ messageHandler.on("test", data => {
+ worker.removeEventListener("error", onWorkerError);
+
+ if (this.destroyed) {
+ terminateEarly();
+ return;
+ }
+
+ if (data) {
+ this._messageHandler = messageHandler;
+ this._port = worker;
+ this._webWorker = worker;
+
+ this._readyCapability.resolve();
+
+ messageHandler.send("configure", {
+ verbosity: this.verbosity
+ });
+ } else {
+ this._setupFakeWorker();
+
+ messageHandler.destroy();
+ worker.terminate();
+ }
+ });
+ messageHandler.on("ready", data => {
+ worker.removeEventListener("error", onWorkerError);
+
+ if (this.destroyed) {
+ terminateEarly();
+ return;
+ }
+
+ try {
+ sendTest();
+ } catch (e) {
+ this._setupFakeWorker();
+ }
+ });
+
+ const sendTest = () => {
+ const testObj = new Uint8Array([255]);
+
+ try {
+ messageHandler.send("test", testObj, [testObj.buffer]);
+ } catch (ex) {
+ (0, _util.warn)("Cannot use postMessage transfers.");
+ testObj[0] = 0;
+ messageHandler.send("test", testObj);
+ }
+ };
+
+ sendTest();
+ return;
+ } catch (e) {
+ (0, _util.info)("The worker has been disabled.");
+ }
+ }
+
+ this._setupFakeWorker();
+ }
+
+ _setupFakeWorker() {
+ if (!PDFWorkerUtil.isWorkerDisabled) {
+ (0, _util.warn)("Setting up fake worker.");
+ PDFWorkerUtil.isWorkerDisabled = true;
+ }
+
+ PDFWorker._setupFakeWorkerGlobal.then(WorkerMessageHandler => {
+ if (this.destroyed) {
+ this._readyCapability.reject(new Error("Worker was destroyed"));
+
+ return;
+ }
+
+ const port = new LoopbackPort();
+ this._port = port;
+ const id = `fake${PDFWorkerUtil.fakeWorkerId++}`;
+ const workerHandler = new _message_handler.MessageHandler(id + "_worker", id, port);
+ WorkerMessageHandler.setup(workerHandler, port);
+ const messageHandler = new _message_handler.MessageHandler(id, id + "_worker", port);
+ this._messageHandler = messageHandler;
+
+ this._readyCapability.resolve();
+
+ messageHandler.send("configure", {
+ verbosity: this.verbosity
+ });
+ }).catch(reason => {
+ this._readyCapability.reject(new Error(`Setting up fake worker failed: "${reason.message}".`));
+ });
+ }
+
+ destroy() {
+ this.destroyed = true;
+
+ if (this._webWorker) {
+ this._webWorker.terminate();
+
+ this._webWorker = null;
+ }
+
+ PDFWorker._workerPorts.delete(this._port);
+
+ this._port = null;
+
+ if (this._messageHandler) {
+ this._messageHandler.destroy();
+
+ this._messageHandler = null;
+ }
+ }
+
+ static fromPort(params) {
+ if (!params?.port) {
+ throw new Error("PDFWorker.fromPort - invalid method signature.");
+ }
+
+ if (this._workerPorts.has(params.port)) {
+ return this._workerPorts.get(params.port);
+ }
+
+ return new PDFWorker(params);
+ }
+
+ static get workerSrc() {
+ if (_worker_options.GlobalWorkerOptions.workerSrc) {
+ return _worker_options.GlobalWorkerOptions.workerSrc;
+ }
+
+ if (PDFWorkerUtil.fallbackWorkerSrc !== null) {
+ if (!_is_node.isNodeJS) {
+ (0, _display_utils.deprecated)('No "GlobalWorkerOptions.workerSrc" specified.');
+ }
+
+ return PDFWorkerUtil.fallbackWorkerSrc;
+ }
+
+ throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
+ }
+
+ static get _mainThreadWorkerMessageHandler() {
+ try {
+ return globalThis.pdfjsWorker?.WorkerMessageHandler || null;
+ } catch (ex) {
+ return null;
+ }
+ }
+
+ static get _setupFakeWorkerGlobal() {
+ const loader = async () => {
+ const mainWorkerMessageHandler = this._mainThreadWorkerMessageHandler;
+
+ if (mainWorkerMessageHandler) {
+ return mainWorkerMessageHandler;
+ }
+
+ if (_is_node.isNodeJS && typeof require === "function") {
+ const worker = eval("require")(this.workerSrc);
+ return worker.WorkerMessageHandler;
+ }
+
+ await (0, _display_utils.loadScript)(this.workerSrc);
+ return window.pdfjsWorker.WorkerMessageHandler;
+ };
+
+ return (0, _util.shadow)(this, "_setupFakeWorkerGlobal", loader());
+ }
+
+}
+
+exports.PDFWorker = PDFWorker;
+{
+ PDFWorker.getWorkerSrc = function () {
+ (0, _display_utils.deprecated)("`PDFWorker.getWorkerSrc()`, please use `PDFWorker.workerSrc` instead.");
+ return this.workerSrc;
+ };
+}
+
+class WorkerTransport {
+ #docStats = null;
+ #pageCache = new Map();
+ #pagePromises = new Map();
+ #metadataPromise = null;
+
+ constructor(messageHandler, loadingTask, networkStream, params) {
+ this.messageHandler = messageHandler;
+ this.loadingTask = loadingTask;
+ this.commonObjs = new PDFObjects();
+ this.fontLoader = new _font_loader.FontLoader({
+ docId: loadingTask.docId,
+ onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
+ ownerDocument: params.ownerDocument,
+ styleElement: params.styleElement
+ });
+ this._params = params;
+
+ if (!params.useWorkerFetch) {
+ this.CMapReaderFactory = new params.CMapReaderFactory({
+ baseUrl: params.cMapUrl,
+ isCompressed: params.cMapPacked
+ });
+ this.StandardFontDataFactory = new params.StandardFontDataFactory({
+ baseUrl: params.standardFontDataUrl
+ });
+ }
+
+ this.destroyed = false;
+ this.destroyCapability = null;
+ this._passwordCapability = null;
+ this._networkStream = networkStream;
+ this._fullReader = null;
+ this._lastProgress = null;
+ this.downloadInfoCapability = (0, _util.createPromiseCapability)();
+ this.setupMessageHandler();
+ }
+
+ get annotationStorage() {
+ return (0, _util.shadow)(this, "annotationStorage", new _annotation_storage.AnnotationStorage());
+ }
+
+ get stats() {
+ return this.#docStats;
+ }
+
+ getRenderingIntent(intent, annotationMode = _util.AnnotationMode.ENABLE, isOpList = false) {
+ let renderingIntent = _util.RenderingIntentFlag.DISPLAY;
+ let lastModified = "";
+
+ switch (intent) {
+ case "any":
+ renderingIntent = _util.RenderingIntentFlag.ANY;
+ break;
+
+ case "display":
+ break;
+
+ case "print":
+ renderingIntent = _util.RenderingIntentFlag.PRINT;
+ break;
+
+ default:
+ (0, _util.warn)(`getRenderingIntent - invalid intent: ${intent}`);
+ }
+
+ switch (annotationMode) {
+ case _util.AnnotationMode.DISABLE:
+ renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_DISABLE;
+ break;
+
+ case _util.AnnotationMode.ENABLE:
+ break;
+
+ case _util.AnnotationMode.ENABLE_FORMS:
+ renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_FORMS;
+ break;
+
+ case _util.AnnotationMode.ENABLE_STORAGE:
+ renderingIntent += _util.RenderingIntentFlag.ANNOTATIONS_STORAGE;
+ lastModified = this.annotationStorage.lastModified;
+ break;
+
+ default:
+ (0, _util.warn)(`getRenderingIntent - invalid annotationMode: ${annotationMode}`);
+ }
+
+ if (isOpList) {
+ renderingIntent += _util.RenderingIntentFlag.OPLIST;
+ }
+
+ return {
+ renderingIntent,
+ cacheKey: `${renderingIntent}_${lastModified}`
+ };
+ }
+
+ destroy() {
+ if (this.destroyCapability) {
+ return this.destroyCapability.promise;
+ }
+
+ this.destroyed = true;
+ this.destroyCapability = (0, _util.createPromiseCapability)();
+
+ if (this._passwordCapability) {
+ this._passwordCapability.reject(new Error("Worker was destroyed during onPassword callback"));
+ }
+
+ const waitOn = [];
+
+ for (const page of this.#pageCache.values()) {
+ waitOn.push(page._destroy());
+ }
+
+ this.#pageCache.clear();
+ this.#pagePromises.clear();
+
+ if (this.hasOwnProperty("annotationStorage")) {
+ this.annotationStorage.resetModified();
+ }
+
+ const terminated = this.messageHandler.sendWithPromise("Terminate", null);
+ waitOn.push(terminated);
+ Promise.all(waitOn).then(() => {
+ this.commonObjs.clear();
+ this.fontLoader.clear();
+ this.#metadataPromise = null;
+ this._getFieldObjectsPromise = null;
+ this._hasJSActionsPromise = null;
+
+ if (this._networkStream) {
+ this._networkStream.cancelAllRequests(new _util.AbortException("Worker was terminated."));
+ }
+
+ if (this.messageHandler) {
+ this.messageHandler.destroy();
+ this.messageHandler = null;
+ }
+
+ this.destroyCapability.resolve();
+ }, this.destroyCapability.reject);
+ return this.destroyCapability.promise;
+ }
+
+ setupMessageHandler() {
+ const {
+ messageHandler,
+ loadingTask
+ } = this;
+ messageHandler.on("GetReader", (data, sink) => {
+ (0, _util.assert)(this._networkStream, "GetReader - no `IPDFStream` instance available.");
+ this._fullReader = this._networkStream.getFullReader();
+
+ this._fullReader.onProgress = evt => {
+ this._lastProgress = {
+ loaded: evt.loaded,
+ total: evt.total
+ };
+ };
+
+ sink.onPull = () => {
+ this._fullReader.read().then(function ({
+ value,
+ done
+ }) {
+ if (done) {
+ sink.close();
+ return;
+ }
+
+ (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetReader - expected an ArrayBuffer.");
+ sink.enqueue(new Uint8Array(value), 1, [value]);
+ }).catch(reason => {
+ sink.error(reason);
+ });
+ };
+
+ sink.onCancel = reason => {
+ this._fullReader.cancel(reason);
+
+ sink.ready.catch(readyReason => {
+ if (this.destroyed) {
+ return;
+ }
+
+ throw readyReason;
+ });
+ };
+ });
+ messageHandler.on("ReaderHeadersReady", data => {
+ const headersCapability = (0, _util.createPromiseCapability)();
+ const fullReader = this._fullReader;
+ fullReader.headersReady.then(() => {
+ if (!fullReader.isStreamingSupported || !fullReader.isRangeSupported) {
+ if (this._lastProgress) {
+ loadingTask.onProgress?.(this._lastProgress);
+ }
+
+ fullReader.onProgress = evt => {
+ loadingTask.onProgress?.({
+ loaded: evt.loaded,
+ total: evt.total
+ });
+ };
+ }
+
+ headersCapability.resolve({
+ isStreamingSupported: fullReader.isStreamingSupported,
+ isRangeSupported: fullReader.isRangeSupported,
+ contentLength: fullReader.contentLength
+ });
+ }, headersCapability.reject);
+ return headersCapability.promise;
+ });
+ messageHandler.on("GetRangeReader", (data, sink) => {
+ (0, _util.assert)(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
+
+ const rangeReader = this._networkStream.getRangeReader(data.begin, data.end);
+
+ if (!rangeReader) {
+ sink.close();
+ return;
+ }
+
+ sink.onPull = () => {
+ rangeReader.read().then(function ({
+ value,
+ done
+ }) {
+ if (done) {
+ sink.close();
+ return;
+ }
+
+ (0, _util.assert)((0, _util.isArrayBuffer)(value), "GetRangeReader - expected an ArrayBuffer.");
+ sink.enqueue(new Uint8Array(value), 1, [value]);
+ }).catch(reason => {
+ sink.error(reason);
+ });
+ };
+
+ sink.onCancel = reason => {
+ rangeReader.cancel(reason);
+ sink.ready.catch(readyReason => {
+ if (this.destroyed) {
+ return;
+ }
+
+ throw readyReason;
+ });
+ };
+ });
+ messageHandler.on("GetDoc", ({
+ pdfInfo
+ }) => {
+ this._numPages = pdfInfo.numPages;
+ this._htmlForXfa = pdfInfo.htmlForXfa;
+ delete pdfInfo.htmlForXfa;
+
+ loadingTask._capability.resolve(new PDFDocumentProxy(pdfInfo, this));
+ });
+ messageHandler.on("DocException", function (ex) {
+ let reason;
+
+ switch (ex.name) {
+ case "PasswordException":
+ reason = new _util.PasswordException(ex.message, ex.code);
+ break;
+
+ case "InvalidPDFException":
+ reason = new _util.InvalidPDFException(ex.message);
+ break;
+
+ case "MissingPDFException":
+ reason = new _util.MissingPDFException(ex.message);
+ break;
+
+ case "UnexpectedResponseException":
+ reason = new _util.UnexpectedResponseException(ex.message, ex.status);
+ break;
+
+ case "UnknownErrorException":
+ reason = new _util.UnknownErrorException(ex.message, ex.details);
+ break;
+
+ default:
+ (0, _util.unreachable)("DocException - expected a valid Error.");
+ }
+
+ loadingTask._capability.reject(reason);
+ });
+ messageHandler.on("PasswordRequest", exception => {
+ this._passwordCapability = (0, _util.createPromiseCapability)();
+
+ if (loadingTask.onPassword) {
+ const updatePassword = password => {
+ if (password instanceof Error) {
+ this._passwordCapability.reject(password);
+ } else {
+ this._passwordCapability.resolve({
+ password
+ });
+ }
+ };
+
+ try {
+ loadingTask.onPassword(updatePassword, exception.code);
+ } catch (ex) {
+ this._passwordCapability.reject(ex);
+ }
+ } else {
+ this._passwordCapability.reject(new _util.PasswordException(exception.message, exception.code));
+ }
+
+ return this._passwordCapability.promise;
+ });
+ messageHandler.on("DataLoaded", data => {
+ loadingTask.onProgress?.({
+ loaded: data.length,
+ total: data.length
+ });
+ this.downloadInfoCapability.resolve(data);
+ });
+ messageHandler.on("StartRenderPage", data => {
+ if (this.destroyed) {
+ return;
+ }
+
+ const page = this.#pageCache.get(data.pageIndex);
+
+ page._startRenderPage(data.transparency, data.cacheKey);
+ });
+ messageHandler.on("commonobj", ([id, type, exportedData]) => {
+ if (this.destroyed) {
+ return;
+ }
+
+ if (this.commonObjs.has(id)) {
+ return;
+ }
+
+ switch (type) {
+ case "Font":
+ const params = this._params;
+
+ if ("error" in exportedData) {
+ const exportedError = exportedData.error;
+ (0, _util.warn)(`Error during font loading: ${exportedError}`);
+ this.commonObjs.resolve(id, exportedError);
+ break;
+ }
+
+ let fontRegistry = null;
+
+ if (params.pdfBug && globalThis.FontInspector?.enabled) {
+ fontRegistry = {
+ registerFont(font, url) {
+ globalThis.FontInspector.fontAdded(font, url);
+ }
+
+ };
+ }
+
+ const font = new _font_loader.FontFaceObject(exportedData, {
+ isEvalSupported: params.isEvalSupported,
+ disableFontFace: params.disableFontFace,
+ ignoreErrors: params.ignoreErrors,
+ onUnsupportedFeature: this._onUnsupportedFeature.bind(this),
+ fontRegistry
+ });
+ this.fontLoader.bind(font).catch(reason => {
+ return messageHandler.sendWithPromise("FontFallback", {
+ id
+ });
+ }).finally(() => {
+ if (!params.fontExtraProperties && font.data) {
+ font.data = null;
+ }
+
+ this.commonObjs.resolve(id, font);
+ });
+ break;
+
+ case "FontPath":
+ case "Image":
+ this.commonObjs.resolve(id, exportedData);
+ break;
+
+ default:
+ throw new Error(`Got unknown common object type ${type}`);
+ }
+ });
+ messageHandler.on("obj", ([id, pageIndex, type, imageData]) => {
+ if (this.destroyed) {
+ return;
+ }
+
+ const pageProxy = this.#pageCache.get(pageIndex);
+
+ if (pageProxy.objs.has(id)) {
+ return;
+ }
+
+ switch (type) {
+ case "Image":
+ pageProxy.objs.resolve(id, imageData);
+ const MAX_IMAGE_SIZE_TO_STORE = 8000000;
+
+ if (imageData?.data?.length > MAX_IMAGE_SIZE_TO_STORE) {
+ pageProxy.cleanupAfterRender = true;
+ }
+
+ break;
+
+ case "Pattern":
+ pageProxy.objs.resolve(id, imageData);
+ break;
+
+ default:
+ throw new Error(`Got unknown object type ${type}`);
+ }
+ });
+ messageHandler.on("DocProgress", data => {
+ if (this.destroyed) {
+ return;
+ }
+
+ loadingTask.onProgress?.({
+ loaded: data.loaded,
+ total: data.total
+ });
+ });
+ messageHandler.on("DocStats", data => {
+ if (this.destroyed) {
+ return;
+ }
+
+ this.#docStats = Object.freeze({
+ streamTypes: Object.freeze(data.streamTypes),
+ fontTypes: Object.freeze(data.fontTypes)
+ });
+ });
+ messageHandler.on("UnsupportedFeature", this._onUnsupportedFeature.bind(this));
+ messageHandler.on("FetchBuiltInCMap", data => {
+ if (this.destroyed) {
+ return Promise.reject(new Error("Worker was destroyed."));
+ }
+
+ if (!this.CMapReaderFactory) {
+ return Promise.reject(new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter."));
+ }
+
+ return this.CMapReaderFactory.fetch(data);
+ });
+ messageHandler.on("FetchStandardFontData", data => {
+ if (this.destroyed) {
+ return Promise.reject(new Error("Worker was destroyed."));
+ }
+
+ if (!this.StandardFontDataFactory) {
+ return Promise.reject(new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter."));
+ }
+
+ return this.StandardFontDataFactory.fetch(data);
+ });
+ }
+
+ _onUnsupportedFeature({
+ featureId
+ }) {
+ if (this.destroyed) {
+ return;
+ }
+
+ this.loadingTask.onUnsupportedFeature?.(featureId);
+ }
+
+ getData() {
+ return this.messageHandler.sendWithPromise("GetData", null);
+ }
+
+ getPage(pageNumber) {
+ if (!Number.isInteger(pageNumber) || pageNumber <= 0 || pageNumber > this._numPages) {
+ return Promise.reject(new Error("Invalid page request."));
+ }
+
+ const pageIndex = pageNumber - 1,
+ cachedPromise = this.#pagePromises.get(pageIndex);
+
+ if (cachedPromise) {
+ return cachedPromise;
+ }
+
+ const promise = this.messageHandler.sendWithPromise("GetPage", {
+ pageIndex
+ }).then(pageInfo => {
+ if (this.destroyed) {
+ throw new Error("Transport destroyed");
+ }
+
+ const page = new PDFPageProxy(pageIndex, pageInfo, this, this._params.ownerDocument, this._params.pdfBug);
+ this.#pageCache.set(pageIndex, page);
+ return page;
+ });
+ this.#pagePromises.set(pageIndex, promise);
+ return promise;
+ }
+
+ getPageIndex(ref) {
+ if (typeof ref !== "object" || ref === null || !Number.isInteger(ref.num) || ref.num < 0 || !Number.isInteger(ref.gen) || ref.gen < 0) {
+ return Promise.reject(new Error("Invalid pageIndex request."));
+ }
+
+ return this.messageHandler.sendWithPromise("GetPageIndex", {
+ num: ref.num,
+ gen: ref.gen
+ });
+ }
+
+ getAnnotations(pageIndex, intent) {
+ return this.messageHandler.sendWithPromise("GetAnnotations", {
+ pageIndex,
+ intent
+ });
+ }
+
+ saveDocument() {
+ return this.messageHandler.sendWithPromise("SaveDocument", {
+ isPureXfa: !!this._htmlForXfa,
+ numPages: this._numPages,
+ annotationStorage: this.annotationStorage.serializable,
+ filename: this._fullReader?.filename ?? null
+ }).finally(() => {
+ this.annotationStorage.resetModified();
+ });
+ }
+
+ getFieldObjects() {
+ return this._getFieldObjectsPromise ||= this.messageHandler.sendWithPromise("GetFieldObjects", null);
+ }
+
+ hasJSActions() {
+ return this._hasJSActionsPromise ||= this.messageHandler.sendWithPromise("HasJSActions", null);
+ }
+
+ getCalculationOrderIds() {
+ return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
+ }
+
+ getDestinations() {
+ return this.messageHandler.sendWithPromise("GetDestinations", null);
+ }
+
+ getDestination(id) {
+ if (typeof id !== "string") {
+ return Promise.reject(new Error("Invalid destination request."));
+ }
+
+ return this.messageHandler.sendWithPromise("GetDestination", {
+ id
+ });
+ }
+
+ getPageLabels() {
+ return this.messageHandler.sendWithPromise("GetPageLabels", null);
+ }
+
+ getPageLayout() {
+ return this.messageHandler.sendWithPromise("GetPageLayout", null);
+ }
+
+ getPageMode() {
+ return this.messageHandler.sendWithPromise("GetPageMode", null);
+ }
+
+ getViewerPreferences() {
+ return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
+ }
+
+ getOpenAction() {
+ return this.messageHandler.sendWithPromise("GetOpenAction", null);
+ }
+
+ getAttachments() {
+ return this.messageHandler.sendWithPromise("GetAttachments", null);
+ }
+
+ getJavaScript() {
+ return this.messageHandler.sendWithPromise("GetJavaScript", null);
+ }
+
+ getDocJSActions() {
+ return this.messageHandler.sendWithPromise("GetDocJSActions", null);
+ }
+
+ getPageJSActions(pageIndex) {
+ return this.messageHandler.sendWithPromise("GetPageJSActions", {
+ pageIndex
+ });
+ }
+
+ getStructTree(pageIndex) {
+ return this.messageHandler.sendWithPromise("GetStructTree", {
+ pageIndex
+ });
+ }
+
+ getOutline() {
+ return this.messageHandler.sendWithPromise("GetOutline", null);
+ }
+
+ getOptionalContentConfig() {
+ return this.messageHandler.sendWithPromise("GetOptionalContentConfig", null).then(results => {
+ return new _optional_content_config.OptionalContentConfig(results);
+ });
+ }
+
+ getPermissions() {
+ return this.messageHandler.sendWithPromise("GetPermissions", null);
+ }
+
+ getMetadata() {
+ return this.#metadataPromise ||= this.messageHandler.sendWithPromise("GetMetadata", null).then(results => {
+ return {
+ info: results[0],
+ metadata: results[1] ? new _metadata.Metadata(results[1]) : null,
+ contentDispositionFilename: this._fullReader?.filename ?? null,
+ contentLength: this._fullReader?.contentLength ?? null
+ };
+ });
+ }
+
+ getMarkInfo() {
+ return this.messageHandler.sendWithPromise("GetMarkInfo", null);
+ }
+
+ async startCleanup(keepLoadedFonts = false) {
+ await this.messageHandler.sendWithPromise("Cleanup", null);
+
+ if (this.destroyed) {
+ return;
+ }
+
+ for (const page of this.#pageCache.values()) {
+ const cleanupSuccessful = page.cleanup();
+
+ if (!cleanupSuccessful) {
+ throw new Error(`startCleanup: Page ${page.pageNumber} is currently rendering.`);
+ }
+ }
+
+ this.commonObjs.clear();
+
+ if (!keepLoadedFonts) {
+ this.fontLoader.clear();
+ }
+
+ this.#metadataPromise = null;
+ this._getFieldObjectsPromise = null;
+ this._hasJSActionsPromise = null;
+ }
+
+ get loadingParams() {
+ const params = this._params;
+ return (0, _util.shadow)(this, "loadingParams", {
+ disableAutoFetch: params.disableAutoFetch,
+ enableXfa: params.enableXfa
+ });
+ }
+
+}
+
+class PDFObjects {
+ #objs = Object.create(null);
+
+ #ensureObj(objId) {
+ const obj = this.#objs[objId];
+
+ if (obj) {
+ return obj;
+ }
+
+ return this.#objs[objId] = {
+ capability: (0, _util.createPromiseCapability)(),
+ data: null
+ };
+ }
+
+ get(objId, callback = null) {
+ if (callback) {
+ const obj = this.#ensureObj(objId);
+ obj.capability.promise.then(() => callback(obj.data));
+ return null;
+ }
+
+ const obj = this.#objs[objId];
+
+ if (!obj?.capability.settled) {
+ throw new Error(`Requesting object that isn't resolved yet ${objId}.`);
+ }
+
+ return obj.data;
+ }
+
+ has(objId) {
+ const obj = this.#objs[objId];
+ return obj?.capability.settled || false;
+ }
+
+ resolve(objId, data = null) {
+ const obj = this.#ensureObj(objId);
+ obj.data = data;
+ obj.capability.resolve();
+ }
+
+ clear() {
+ this.#objs = Object.create(null);
+ }
+
+}
+
+class RenderTask {
+ constructor(internalRenderTask) {
+ this._internalRenderTask = internalRenderTask;
+ this.onContinue = null;
+ }
+
+ get promise() {
+ return this._internalRenderTask.capability.promise;
+ }
+
+ cancel() {
+ this._internalRenderTask.cancel();
+ }
+
+}
+
+exports.RenderTask = RenderTask;
+
+class InternalRenderTask {
+ static get canvasInUse() {
+ return (0, _util.shadow)(this, "canvasInUse", new WeakSet());
+ }
+
+ constructor({
+ callback,
+ params,
+ objs,
+ commonObjs,
+ annotationCanvasMap,
+ operatorList,
+ pageIndex,
+ canvasFactory,
+ useRequestAnimationFrame = false,
+ pdfBug = false
+ }) {
+ this.callback = callback;
+ this.params = params;
+ this.objs = objs;
+ this.commonObjs = commonObjs;
+ this.annotationCanvasMap = annotationCanvasMap;
+ this.operatorListIdx = null;
+ this.operatorList = operatorList;
+ this._pageIndex = pageIndex;
+ this.canvasFactory = canvasFactory;
+ this._pdfBug = pdfBug;
+ this.running = false;
+ this.graphicsReadyCallback = null;
+ this.graphicsReady = false;
+ this._useRequestAnimationFrame = useRequestAnimationFrame === true && typeof window !== "undefined";
+ this.cancelled = false;
+ this.capability = (0, _util.createPromiseCapability)();
+ this.task = new RenderTask(this);
+ this._cancelBound = this.cancel.bind(this);
+ this._continueBound = this._continue.bind(this);
+ this._scheduleNextBound = this._scheduleNext.bind(this);
+ this._nextBound = this._next.bind(this);
+ this._canvas = params.canvasContext.canvas;
+ }
+
+ get completed() {
+ return this.capability.promise.catch(function () {});
+ }
+
+ initializeGraphics({
+ transparency = false,
+ optionalContentConfig
+ }) {
+ if (this.cancelled) {
+ return;
+ }
+
+ if (this._canvas) {
+ if (InternalRenderTask.canvasInUse.has(this._canvas)) {
+ throw new Error("Cannot use the same canvas during multiple render() operations. " + "Use different canvas or ensure previous operations were " + "cancelled or completed.");
+ }
+
+ InternalRenderTask.canvasInUse.add(this._canvas);
+ }
+
+ if (this._pdfBug && globalThis.StepperManager?.enabled) {
+ this.stepper = globalThis.StepperManager.create(this._pageIndex);
+ this.stepper.init(this.operatorList);
+ this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint();
+ }
+
+ const {
+ canvasContext,
+ viewport,
+ transform,
+ imageLayer,
+ background
+ } = this.params;
+ this.gfx = new _canvas.CanvasGraphics(canvasContext, this.commonObjs, this.objs, this.canvasFactory, imageLayer, optionalContentConfig, this.annotationCanvasMap);
+ this.gfx.beginDrawing({
+ transform,
+ viewport,
+ transparency,
+ background
+ });
+ this.operatorListIdx = 0;
+ this.graphicsReady = true;
+
+ if (this.graphicsReadyCallback) {
+ this.graphicsReadyCallback();
+ }
+ }
+
+ cancel(error = null) {
+ this.running = false;
+ this.cancelled = true;
+
+ if (this.gfx) {
+ this.gfx.endDrawing();
+ }
+
+ if (this._canvas) {
+ InternalRenderTask.canvasInUse.delete(this._canvas);
+ }
+
+ this.callback(error || new _display_utils.RenderingCancelledException(`Rendering cancelled, page ${this._pageIndex + 1}`, "canvas"));
+ }
+
+ operatorListChanged() {
+ if (!this.graphicsReady) {
+ if (!this.graphicsReadyCallback) {
+ this.graphicsReadyCallback = this._continueBound;
+ }
+
+ return;
+ }
+
+ if (this.stepper) {
+ this.stepper.updateOperatorList(this.operatorList);
+ }
+
+ if (this.running) {
+ return;
+ }
+
+ this._continue();
+ }
+
+ _continue() {
+ this.running = true;
+
+ if (this.cancelled) {
+ return;
+ }
+
+ if (this.task.onContinue) {
+ this.task.onContinue(this._scheduleNextBound);
+ } else {
+ this._scheduleNext();
+ }
+ }
+
+ _scheduleNext() {
+ if (this._useRequestAnimationFrame) {
+ window.requestAnimationFrame(() => {
+ this._nextBound().catch(this._cancelBound);
+ });
+ } else {
+ Promise.resolve().then(this._nextBound).catch(this._cancelBound);
+ }
+ }
+
+ async _next() {
+ if (this.cancelled) {
+ return;
+ }
+
+ this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper);
+
+ if (this.operatorListIdx === this.operatorList.argsArray.length) {
+ this.running = false;
+
+ if (this.operatorList.lastChunk) {
+ this.gfx.endDrawing();
+
+ if (this._canvas) {
+ InternalRenderTask.canvasInUse.delete(this._canvas);
+ }
+
+ this.callback();
+ }
+ }
+ }
+
+}
+
+const version = '2.13.216';
+exports.version = version;
+const build = '399a0ec60';
+exports.build = build;
+
+/***/ }),
+/* 5 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.StatTimer = exports.RenderingCancelledException = exports.PixelsPerInch = exports.PageViewport = exports.PDFDateString = exports.DOMStandardFontDataFactory = exports.DOMSVGFactory = exports.DOMCanvasFactory = exports.DOMCMapReaderFactory = void 0;
+exports.deprecated = deprecated;
+exports.getFilenameFromUrl = getFilenameFromUrl;
+exports.getPdfFilenameFromUrl = getPdfFilenameFromUrl;
+exports.getXfaPageViewport = getXfaPageViewport;
+exports.isDataScheme = isDataScheme;
+exports.isPdfFile = isPdfFile;
+exports.isValidFetchUrl = isValidFetchUrl;
+exports.loadScript = loadScript;
+
+var _base_factory = __w_pdfjs_require__(6);
+
+var _util = __w_pdfjs_require__(1);
+
+const SVG_NS = "http://www.w3.org/2000/svg";
+
+class PixelsPerInch {
+ static CSS = 96.0;
+ static PDF = 72.0;
+ static PDF_TO_CSS_UNITS = this.CSS / this.PDF;
+}
+
+exports.PixelsPerInch = PixelsPerInch;
+
+class DOMCanvasFactory extends _base_factory.BaseCanvasFactory {
+ constructor({
+ ownerDocument = globalThis.document
+ } = {}) {
+ super();
+ this._document = ownerDocument;
+ }
+
+ _createCanvas(width, height) {
+ const canvas = this._document.createElement("canvas");
+
+ canvas.width = width;
+ canvas.height = height;
+ return canvas;
+ }
+
+}
+
+exports.DOMCanvasFactory = DOMCanvasFactory;
+
+async function fetchData(url, asTypedArray = false) {
+ if (isValidFetchUrl(url, document.baseURI)) {
+ const response = await fetch(url);
+
+ if (!response.ok) {
+ throw new Error(response.statusText);
+ }
+
+ return asTypedArray ? new Uint8Array(await response.arrayBuffer()) : (0, _util.stringToBytes)(await response.text());
+ }
+
+ return new Promise((resolve, reject) => {
+ const request = new XMLHttpRequest();
+ request.open("GET", url, true);
+
+ if (asTypedArray) {
+ request.responseType = "arraybuffer";
+ }
+
+ request.onreadystatechange = () => {
+ if (request.readyState !== XMLHttpRequest.DONE) {
+ return;
+ }
+
+ if (request.status === 200 || request.status === 0) {
+ let data;
+
+ if (asTypedArray && request.response) {
+ data = new Uint8Array(request.response);
+ } else if (!asTypedArray && request.responseText) {
+ data = (0, _util.stringToBytes)(request.responseText);
+ }
+
+ if (data) {
+ resolve(data);
+ return;
+ }
+ }
+
+ reject(new Error(request.statusText));
+ };
+
+ request.send(null);
+ });
+}
+
+class DOMCMapReaderFactory extends _base_factory.BaseCMapReaderFactory {
+ _fetchData(url, compressionType) {
+ return fetchData(url, this.isCompressed).then(data => {
+ return {
+ cMapData: data,
+ compressionType
+ };
+ });
+ }
+
+}
+
+exports.DOMCMapReaderFactory = DOMCMapReaderFactory;
+
+class DOMStandardFontDataFactory extends _base_factory.BaseStandardFontDataFactory {
+ _fetchData(url) {
+ return fetchData(url, true);
+ }
+
+}
+
+exports.DOMStandardFontDataFactory = DOMStandardFontDataFactory;
+
+class DOMSVGFactory extends _base_factory.BaseSVGFactory {
+ _createSVG(type) {
+ return document.createElementNS(SVG_NS, type);
+ }
+
+}
+
+exports.DOMSVGFactory = DOMSVGFactory;
+
+class PageViewport {
+ constructor({
+ viewBox,
+ scale,
+ rotation,
+ offsetX = 0,
+ offsetY = 0,
+ dontFlip = false
+ }) {
+ this.viewBox = viewBox;
+ this.scale = scale;
+ this.rotation = rotation;
+ this.offsetX = offsetX;
+ this.offsetY = offsetY;
+ const centerX = (viewBox[2] + viewBox[0]) / 2;
+ const centerY = (viewBox[3] + viewBox[1]) / 2;
+ let rotateA, rotateB, rotateC, rotateD;
+ rotation %= 360;
+
+ if (rotation < 0) {
+ rotation += 360;
+ }
+
+ switch (rotation) {
+ case 180:
+ rotateA = -1;
+ rotateB = 0;
+ rotateC = 0;
+ rotateD = 1;
+ break;
+
+ case 90:
+ rotateA = 0;
+ rotateB = 1;
+ rotateC = 1;
+ rotateD = 0;
+ break;
+
+ case 270:
+ rotateA = 0;
+ rotateB = -1;
+ rotateC = -1;
+ rotateD = 0;
+ break;
+
+ case 0:
+ rotateA = 1;
+ rotateB = 0;
+ rotateC = 0;
+ rotateD = -1;
+ break;
+
+ default:
+ throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
+ }
+
+ if (dontFlip) {
+ rotateC = -rotateC;
+ rotateD = -rotateD;
+ }
+
+ let offsetCanvasX, offsetCanvasY;
+ let width, height;
+
+ if (rotateA === 0) {
+ offsetCanvasX = Math.abs(centerY - viewBox[1]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerX - viewBox[0]) * scale + offsetY;
+ width = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ height = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ } else {
+ offsetCanvasX = Math.abs(centerX - viewBox[0]) * scale + offsetX;
+ offsetCanvasY = Math.abs(centerY - viewBox[1]) * scale + offsetY;
+ width = Math.abs(viewBox[2] - viewBox[0]) * scale;
+ height = Math.abs(viewBox[3] - viewBox[1]) * scale;
+ }
+
+ this.transform = [rotateA * scale, rotateB * scale, rotateC * scale, rotateD * scale, offsetCanvasX - rotateA * scale * centerX - rotateC * scale * centerY, offsetCanvasY - rotateB * scale * centerX - rotateD * scale * centerY];
+ this.width = width;
+ this.height = height;
+ }
+
+ clone({
+ scale = this.scale,
+ rotation = this.rotation,
+ offsetX = this.offsetX,
+ offsetY = this.offsetY,
+ dontFlip = false
+ } = {}) {
+ return new PageViewport({
+ viewBox: this.viewBox.slice(),
+ scale,
+ rotation,
+ offsetX,
+ offsetY,
+ dontFlip
+ });
+ }
+
+ convertToViewportPoint(x, y) {
+ return _util.Util.applyTransform([x, y], this.transform);
+ }
+
+ convertToViewportRectangle(rect) {
+ const topLeft = _util.Util.applyTransform([rect[0], rect[1]], this.transform);
+
+ const bottomRight = _util.Util.applyTransform([rect[2], rect[3]], this.transform);
+
+ return [topLeft[0], topLeft[1], bottomRight[0], bottomRight[1]];
+ }
+
+ convertToPdfPoint(x, y) {
+ return _util.Util.applyInverseTransform([x, y], this.transform);
+ }
+
+}
+
+exports.PageViewport = PageViewport;
+
+class RenderingCancelledException extends _util.BaseException {
+ constructor(msg, type) {
+ super(msg, "RenderingCancelledException");
+ this.type = type;
+ }
+
+}
+
+exports.RenderingCancelledException = RenderingCancelledException;
+
+function isDataScheme(url) {
+ const ii = url.length;
+ let i = 0;
+
+ while (i < ii && url[i].trim() === "") {
+ i++;
+ }
+
+ return url.substring(i, i + 5).toLowerCase() === "data:";
+}
+
+function isPdfFile(filename) {
+ return typeof filename === "string" && /\.pdf$/i.test(filename);
+}
+
+function getFilenameFromUrl(url) {
+ const anchor = url.indexOf("#");
+ const query = url.indexOf("?");
+ const end = Math.min(anchor > 0 ? anchor : url.length, query > 0 ? query : url.length);
+ return url.substring(url.lastIndexOf("/", end) + 1, end);
+}
+
+function getPdfFilenameFromUrl(url, defaultFilename = "document.pdf") {
+ if (typeof url !== "string") {
+ return defaultFilename;
+ }
+
+ if (isDataScheme(url)) {
+ (0, _util.warn)('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.');
+ return defaultFilename;
+ }
+
+ const reURI = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/;
+ const reFilename = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i;
+ const splitURI = reURI.exec(url);
+ let suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]);
+
+ if (suggestedFilename) {
+ suggestedFilename = suggestedFilename[0];
+
+ if (suggestedFilename.includes("%")) {
+ try {
+ suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0];
+ } catch (ex) {}
+ }
+ }
+
+ return suggestedFilename || defaultFilename;
+}
+
+class StatTimer {
+ constructor() {
+ this.started = Object.create(null);
+ this.times = [];
+ }
+
+ time(name) {
+ if (name in this.started) {
+ (0, _util.warn)(`Timer is already running for ${name}`);
+ }
+
+ this.started[name] = Date.now();
+ }
+
+ timeEnd(name) {
+ if (!(name in this.started)) {
+ (0, _util.warn)(`Timer has not been started for ${name}`);
+ }
+
+ this.times.push({
+ name,
+ start: this.started[name],
+ end: Date.now()
+ });
+ delete this.started[name];
+ }
+
+ toString() {
+ const outBuf = [];
+ let longest = 0;
+
+ for (const time of this.times) {
+ const name = time.name;
+
+ if (name.length > longest) {
+ longest = name.length;
+ }
+ }
+
+ for (const time of this.times) {
+ const duration = time.end - time.start;
+ outBuf.push(`${time.name.padEnd(longest)} ${duration}ms\n`);
+ }
+
+ return outBuf.join("");
+ }
+
+}
+
+exports.StatTimer = StatTimer;
+
+function isValidFetchUrl(url, baseUrl) {
+ try {
+ const {
+ protocol
+ } = baseUrl ? new URL(url, baseUrl) : new URL(url);
+ return protocol === "http:" || protocol === "https:";
+ } catch (ex) {
+ return false;
+ }
+}
+
+function loadScript(src, removeScriptElement = false) {
+ return new Promise((resolve, reject) => {
+ const script = document.createElement("script");
+ script.src = src;
+
+ script.onload = function (evt) {
+ if (removeScriptElement) {
+ script.remove();
+ }
+
+ resolve(evt);
+ };
+
+ script.onerror = function () {
+ reject(new Error(`Cannot load script at: ${script.src}`));
+ };
+
+ (document.head || document.documentElement).appendChild(script);
+ });
+}
+
+function deprecated(details) {
+ console.log("Deprecated API usage: " + details);
+}
+
+let pdfDateStringRegex;
+
+class PDFDateString {
+ static toDateObject(input) {
+ if (!input || typeof input !== "string") {
+ return null;
+ }
+
+ if (!pdfDateStringRegex) {
+ pdfDateStringRegex = new RegExp("^D:" + "(\\d{4})" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "(\\d{2})?" + "([Z|+|-])?" + "(\\d{2})?" + "'?" + "(\\d{2})?" + "'?");
+ }
+
+ const matches = pdfDateStringRegex.exec(input);
+
+ if (!matches) {
+ return null;
+ }
+
+ const year = parseInt(matches[1], 10);
+ let month = parseInt(matches[2], 10);
+ month = month >= 1 && month <= 12 ? month - 1 : 0;
+ let day = parseInt(matches[3], 10);
+ day = day >= 1 && day <= 31 ? day : 1;
+ let hour = parseInt(matches[4], 10);
+ hour = hour >= 0 && hour <= 23 ? hour : 0;
+ let minute = parseInt(matches[5], 10);
+ minute = minute >= 0 && minute <= 59 ? minute : 0;
+ let second = parseInt(matches[6], 10);
+ second = second >= 0 && second <= 59 ? second : 0;
+ const universalTimeRelation = matches[7] || "Z";
+ let offsetHour = parseInt(matches[8], 10);
+ offsetHour = offsetHour >= 0 && offsetHour <= 23 ? offsetHour : 0;
+ let offsetMinute = parseInt(matches[9], 10) || 0;
+ offsetMinute = offsetMinute >= 0 && offsetMinute <= 59 ? offsetMinute : 0;
+
+ if (universalTimeRelation === "-") {
+ hour += offsetHour;
+ minute += offsetMinute;
+ } else if (universalTimeRelation === "+") {
+ hour -= offsetHour;
+ minute -= offsetMinute;
+ }
+
+ return new Date(Date.UTC(year, month, day, hour, minute, second));
+ }
+
+}
+
+exports.PDFDateString = PDFDateString;
+
+function getXfaPageViewport(xfaPage, {
+ scale = 1,
+ rotation = 0
+}) {
+ const {
+ width,
+ height
+ } = xfaPage.attributes.style;
+ const viewBox = [0, 0, parseInt(width), parseInt(height)];
+ return new PageViewport({
+ viewBox,
+ scale,
+ rotation
+ });
+}
+
+/***/ }),
+/* 6 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.BaseStandardFontDataFactory = exports.BaseSVGFactory = exports.BaseCanvasFactory = exports.BaseCMapReaderFactory = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+class BaseCanvasFactory {
+ constructor() {
+ if (this.constructor === BaseCanvasFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseCanvasFactory.");
+ }
+ }
+
+ create(width, height) {
+ if (width <= 0 || height <= 0) {
+ throw new Error("Invalid canvas size");
+ }
+
+ const canvas = this._createCanvas(width, height);
+
+ return {
+ canvas,
+ context: canvas.getContext("2d")
+ };
+ }
+
+ reset(canvasAndContext, width, height) {
+ if (!canvasAndContext.canvas) {
+ throw new Error("Canvas is not specified");
+ }
+
+ if (width <= 0 || height <= 0) {
+ throw new Error("Invalid canvas size");
+ }
+
+ canvasAndContext.canvas.width = width;
+ canvasAndContext.canvas.height = height;
+ }
+
+ destroy(canvasAndContext) {
+ if (!canvasAndContext.canvas) {
+ throw new Error("Canvas is not specified");
+ }
+
+ canvasAndContext.canvas.width = 0;
+ canvasAndContext.canvas.height = 0;
+ canvasAndContext.canvas = null;
+ canvasAndContext.context = null;
+ }
+
+ _createCanvas(width, height) {
+ (0, _util.unreachable)("Abstract method `_createCanvas` called.");
+ }
+
+}
+
+exports.BaseCanvasFactory = BaseCanvasFactory;
+
+class BaseCMapReaderFactory {
+ constructor({
+ baseUrl = null,
+ isCompressed = false
+ }) {
+ if (this.constructor === BaseCMapReaderFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseCMapReaderFactory.");
+ }
+
+ this.baseUrl = baseUrl;
+ this.isCompressed = isCompressed;
+ }
+
+ async fetch({
+ name
+ }) {
+ if (!this.baseUrl) {
+ throw new Error('The CMap "baseUrl" parameter must be specified, ensure that ' + 'the "cMapUrl" and "cMapPacked" API parameters are provided.');
+ }
+
+ if (!name) {
+ throw new Error("CMap name must be specified.");
+ }
+
+ const url = this.baseUrl + name + (this.isCompressed ? ".bcmap" : "");
+ const compressionType = this.isCompressed ? _util.CMapCompressionType.BINARY : _util.CMapCompressionType.NONE;
+ return this._fetchData(url, compressionType).catch(reason => {
+ throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${url}`);
+ });
+ }
+
+ _fetchData(url, compressionType) {
+ (0, _util.unreachable)("Abstract method `_fetchData` called.");
+ }
+
+}
+
+exports.BaseCMapReaderFactory = BaseCMapReaderFactory;
+
+class BaseStandardFontDataFactory {
+ constructor({
+ baseUrl = null
+ }) {
+ if (this.constructor === BaseStandardFontDataFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseStandardFontDataFactory.");
+ }
+
+ this.baseUrl = baseUrl;
+ }
+
+ async fetch({
+ filename
+ }) {
+ if (!this.baseUrl) {
+ throw new Error('The standard font "baseUrl" parameter must be specified, ensure that ' + 'the "standardFontDataUrl" API parameter is provided.');
+ }
+
+ if (!filename) {
+ throw new Error("Font filename must be specified.");
+ }
+
+ const url = `${this.baseUrl}${filename}`;
+ return this._fetchData(url).catch(reason => {
+ throw new Error(`Unable to load font data at: ${url}`);
+ });
+ }
+
+ _fetchData(url) {
+ (0, _util.unreachable)("Abstract method `_fetchData` called.");
+ }
+
+}
+
+exports.BaseStandardFontDataFactory = BaseStandardFontDataFactory;
+
+class BaseSVGFactory {
+ constructor() {
+ if (this.constructor === BaseSVGFactory) {
+ (0, _util.unreachable)("Cannot initialize BaseSVGFactory.");
+ }
+ }
+
+ create(width, height) {
+ if (width <= 0 || height <= 0) {
+ throw new Error("Invalid SVG dimensions");
+ }
+
+ const svg = this._createSVG("svg:svg");
+
+ svg.setAttribute("version", "1.1");
+ svg.setAttribute("width", `${width}px`);
+ svg.setAttribute("height", `${height}px`);
+ svg.setAttribute("preserveAspectRatio", "none");
+ svg.setAttribute("viewBox", `0 0 ${width} ${height}`);
+ return svg;
+ }
+
+ createElement(type) {
+ if (typeof type !== "string") {
+ throw new Error("Invalid SVG element type");
+ }
+
+ return this._createSVG(type);
+ }
+
+ _createSVG(type) {
+ (0, _util.unreachable)("Abstract method `_createSVG` called.");
+ }
+
+}
+
+exports.BaseSVGFactory = BaseSVGFactory;
+
+/***/ }),
+/* 7 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.FontLoader = exports.FontFaceObject = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+class BaseFontLoader {
+ constructor({
+ docId,
+ onUnsupportedFeature,
+ ownerDocument = globalThis.document,
+ styleElement = null
+ }) {
+ if (this.constructor === BaseFontLoader) {
+ (0, _util.unreachable)("Cannot initialize BaseFontLoader.");
+ }
+
+ this.docId = docId;
+ this._onUnsupportedFeature = onUnsupportedFeature;
+ this._document = ownerDocument;
+ this.nativeFontFaces = [];
+ this.styleElement = null;
+ }
+
+ addNativeFontFace(nativeFontFace) {
+ this.nativeFontFaces.push(nativeFontFace);
+
+ this._document.fonts.add(nativeFontFace);
+ }
+
+ insertRule(rule) {
+ let styleElement = this.styleElement;
+
+ if (!styleElement) {
+ styleElement = this.styleElement = this._document.createElement("style");
+ styleElement.id = `PDFJS_FONT_STYLE_TAG_${this.docId}`;
+
+ this._document.documentElement.getElementsByTagName("head")[0].appendChild(styleElement);
+ }
+
+ const styleSheet = styleElement.sheet;
+ styleSheet.insertRule(rule, styleSheet.cssRules.length);
+ }
+
+ clear() {
+ for (const nativeFontFace of this.nativeFontFaces) {
+ this._document.fonts.delete(nativeFontFace);
+ }
+
+ this.nativeFontFaces.length = 0;
+
+ if (this.styleElement) {
+ this.styleElement.remove();
+ this.styleElement = null;
+ }
+ }
+
+ async bind(font) {
+ if (font.attached || font.missingFile) {
+ return;
+ }
+
+ font.attached = true;
+
+ if (this.isFontLoadingAPISupported) {
+ const nativeFontFace = font.createNativeFontFace();
+
+ if (nativeFontFace) {
+ this.addNativeFontFace(nativeFontFace);
+
+ try {
+ await nativeFontFace.loaded;
+ } catch (ex) {
+ this._onUnsupportedFeature({
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontLoadNative
+ });
+
+ (0, _util.warn)(`Failed to load font '${nativeFontFace.family}': '${ex}'.`);
+ font.disableFontFace = true;
+ throw ex;
+ }
+ }
+
+ return;
+ }
+
+ const rule = font.createFontFaceRule();
+
+ if (rule) {
+ this.insertRule(rule);
+
+ if (this.isSyncFontLoadingSupported) {
+ return;
+ }
+
+ await new Promise(resolve => {
+ const request = this._queueLoadingCallback(resolve);
+
+ this._prepareFontLoadEvent([rule], [font], request);
+ });
+ }
+ }
+
+ _queueLoadingCallback(callback) {
+ (0, _util.unreachable)("Abstract method `_queueLoadingCallback`.");
+ }
+
+ get isFontLoadingAPISupported() {
+ const hasFonts = !!this._document?.fonts;
+ return (0, _util.shadow)(this, "isFontLoadingAPISupported", hasFonts);
+ }
+
+ get isSyncFontLoadingSupported() {
+ (0, _util.unreachable)("Abstract method `isSyncFontLoadingSupported`.");
+ }
+
+ get _loadTestFont() {
+ (0, _util.unreachable)("Abstract method `_loadTestFont`.");
+ }
+
+ _prepareFontLoadEvent(rules, fontsToLoad, request) {
+ (0, _util.unreachable)("Abstract method `_prepareFontLoadEvent`.");
+ }
+
+}
+
+let FontLoader;
+exports.FontLoader = FontLoader;
+{
+ exports.FontLoader = FontLoader = class GenericFontLoader extends BaseFontLoader {
+ constructor(params) {
+ super(params);
+ this.loadingContext = {
+ requests: [],
+ nextRequestId: 0
+ };
+ this.loadTestFontId = 0;
+ }
+
+ get isSyncFontLoadingSupported() {
+ let supported = false;
+
+ if (typeof navigator === "undefined") {
+ supported = true;
+ } else {
+ const m = /Mozilla\/5.0.*?rv:(\d+).*? Gecko/.exec(navigator.userAgent);
+
+ if (m?.[1] >= 14) {
+ supported = true;
+ }
+ }
+
+ return (0, _util.shadow)(this, "isSyncFontLoadingSupported", supported);
+ }
+
+ _queueLoadingCallback(callback) {
+ function completeRequest() {
+ (0, _util.assert)(!request.done, "completeRequest() cannot be called twice.");
+ request.done = true;
+
+ while (context.requests.length > 0 && context.requests[0].done) {
+ const otherRequest = context.requests.shift();
+ setTimeout(otherRequest.callback, 0);
+ }
+ }
+
+ const context = this.loadingContext;
+ const request = {
+ id: `pdfjs-font-loading-${context.nextRequestId++}`,
+ done: false,
+ complete: completeRequest,
+ callback
+ };
+ context.requests.push(request);
+ return request;
+ }
+
+ get _loadTestFont() {
+ const getLoadTestFont = function () {
+ return atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQA" + "FQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAA" + "ALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgA" + "AAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1" + "AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD" + "6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACM" + "AooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4D" + "IP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAA" + "AAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUA" + "AQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgAB" + "AAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABY" + "AAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAA" + "AC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAA" + "AAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQAC" + "AQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3" + "Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTj" + "FQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
+ };
+
+ return (0, _util.shadow)(this, "_loadTestFont", getLoadTestFont());
+ }
+
+ _prepareFontLoadEvent(rules, fonts, request) {
+ function int32(data, offset) {
+ return data.charCodeAt(offset) << 24 | data.charCodeAt(offset + 1) << 16 | data.charCodeAt(offset + 2) << 8 | data.charCodeAt(offset + 3) & 0xff;
+ }
+
+ function spliceString(s, offset, remove, insert) {
+ const chunk1 = s.substring(0, offset);
+ const chunk2 = s.substring(offset + remove);
+ return chunk1 + insert + chunk2;
+ }
+
+ let i, ii;
+
+ const canvas = this._document.createElement("canvas");
+
+ canvas.width = 1;
+ canvas.height = 1;
+ const ctx = canvas.getContext("2d");
+ let called = 0;
+
+ function isFontReady(name, callback) {
+ called++;
+
+ if (called > 30) {
+ (0, _util.warn)("Load test font never loaded.");
+ callback();
+ return;
+ }
+
+ ctx.font = "30px " + name;
+ ctx.fillText(".", 0, 20);
+ const imageData = ctx.getImageData(0, 0, 1, 1);
+
+ if (imageData.data[3] > 0) {
+ callback();
+ return;
+ }
+
+ setTimeout(isFontReady.bind(null, name, callback));
+ }
+
+ const loadTestFontId = `lt${Date.now()}${this.loadTestFontId++}`;
+ let data = this._loadTestFont;
+ const COMMENT_OFFSET = 976;
+ data = spliceString(data, COMMENT_OFFSET, loadTestFontId.length, loadTestFontId);
+ const CFF_CHECKSUM_OFFSET = 16;
+ const XXXX_VALUE = 0x58585858;
+ let checksum = int32(data, CFF_CHECKSUM_OFFSET);
+
+ for (i = 0, ii = loadTestFontId.length - 3; i < ii; i += 4) {
+ checksum = checksum - XXXX_VALUE + int32(loadTestFontId, i) | 0;
+ }
+
+ if (i < loadTestFontId.length) {
+ checksum = checksum - XXXX_VALUE + int32(loadTestFontId + "XXX", i) | 0;
+ }
+
+ data = spliceString(data, CFF_CHECKSUM_OFFSET, 4, (0, _util.string32)(checksum));
+ const url = `url(data:font/opentype;base64,${btoa(data)});`;
+ const rule = `@font-face {font-family:"${loadTestFontId}";src:${url}}`;
+ this.insertRule(rule);
+ const names = [];
+
+ for (const font of fonts) {
+ names.push(font.loadedName);
+ }
+
+ names.push(loadTestFontId);
+
+ const div = this._document.createElement("div");
+
+ div.style.visibility = "hidden";
+ div.style.width = div.style.height = "10px";
+ div.style.position = "absolute";
+ div.style.top = div.style.left = "0px";
+
+ for (const name of names) {
+ const span = this._document.createElement("span");
+
+ span.textContent = "Hi";
+ span.style.fontFamily = name;
+ div.appendChild(span);
+ }
+
+ this._document.body.appendChild(div);
+
+ isFontReady(loadTestFontId, () => {
+ div.remove();
+ request.complete();
+ });
+ }
+
+ };
+}
+
+class FontFaceObject {
+ constructor(translatedData, {
+ isEvalSupported = true,
+ disableFontFace = false,
+ ignoreErrors = false,
+ onUnsupportedFeature,
+ fontRegistry = null
+ }) {
+ this.compiledGlyphs = Object.create(null);
+
+ for (const i in translatedData) {
+ this[i] = translatedData[i];
+ }
+
+ this.isEvalSupported = isEvalSupported !== false;
+ this.disableFontFace = disableFontFace === true;
+ this.ignoreErrors = ignoreErrors === true;
+ this._onUnsupportedFeature = onUnsupportedFeature;
+ this.fontRegistry = fontRegistry;
+ }
+
+ createNativeFontFace() {
+ if (!this.data || this.disableFontFace) {
+ return null;
+ }
+
+ let nativeFontFace;
+
+ if (!this.cssFontInfo) {
+ nativeFontFace = new FontFace(this.loadedName, this.data, {});
+ } else {
+ const css = {
+ weight: this.cssFontInfo.fontWeight
+ };
+
+ if (this.cssFontInfo.italicAngle) {
+ css.style = `oblique ${this.cssFontInfo.italicAngle}deg`;
+ }
+
+ nativeFontFace = new FontFace(this.cssFontInfo.fontFamily, this.data, css);
+ }
+
+ if (this.fontRegistry) {
+ this.fontRegistry.registerFont(this);
+ }
+
+ return nativeFontFace;
+ }
+
+ createFontFaceRule() {
+ if (!this.data || this.disableFontFace) {
+ return null;
+ }
+
+ const data = (0, _util.bytesToString)(this.data);
+ const url = `url(data:${this.mimetype};base64,${btoa(data)});`;
+ let rule;
+
+ if (!this.cssFontInfo) {
+ rule = `@font-face {font-family:"${this.loadedName}";src:${url}}`;
+ } else {
+ let css = `font-weight: ${this.cssFontInfo.fontWeight};`;
+
+ if (this.cssFontInfo.italicAngle) {
+ css += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`;
+ }
+
+ rule = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${css}src:${url}}`;
+ }
+
+ if (this.fontRegistry) {
+ this.fontRegistry.registerFont(this, url);
+ }
+
+ return rule;
+ }
+
+ getPathGenerator(objs, character) {
+ if (this.compiledGlyphs[character] !== undefined) {
+ return this.compiledGlyphs[character];
+ }
+
+ let cmds;
+
+ try {
+ cmds = objs.get(this.loadedName + "_path_" + character);
+ } catch (ex) {
+ if (!this.ignoreErrors) {
+ throw ex;
+ }
+
+ this._onUnsupportedFeature({
+ featureId: _util.UNSUPPORTED_FEATURES.errorFontGetPath
+ });
+
+ (0, _util.warn)(`getPathGenerator - ignoring character: "${ex}".`);
+ return this.compiledGlyphs[character] = function (c, size) {};
+ }
+
+ if (this.isEvalSupported && _util.IsEvalSupportedCached.value) {
+ const jsBuf = [];
+
+ for (const current of cmds) {
+ const args = current.args !== undefined ? current.args.join(",") : "";
+ jsBuf.push("c.", current.cmd, "(", args, ");\n");
+ }
+
+ return this.compiledGlyphs[character] = new Function("c", "size", jsBuf.join(""));
+ }
+
+ return this.compiledGlyphs[character] = function (c, size) {
+ for (const current of cmds) {
+ if (current.cmd === "scale") {
+ current.args = [size, -size];
+ }
+
+ c[current.cmd].apply(c, current.args);
+ }
+ };
+ }
+
+}
+
+exports.FontFaceObject = FontFaceObject;
+
+/***/ }),
+/* 8 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.NodeStandardFontDataFactory = exports.NodeCanvasFactory = exports.NodeCMapReaderFactory = void 0;
+
+var _base_factory = __w_pdfjs_require__(6);
+
+var _is_node = __w_pdfjs_require__(3);
+
+var _util = __w_pdfjs_require__(1);
+
+let NodeCanvasFactory = class {
+ constructor() {
+ (0, _util.unreachable)("Not implemented: NodeCanvasFactory");
+ }
+
+};
+exports.NodeCanvasFactory = NodeCanvasFactory;
+let NodeCMapReaderFactory = class {
+ constructor() {
+ (0, _util.unreachable)("Not implemented: NodeCMapReaderFactory");
+ }
+
+};
+exports.NodeCMapReaderFactory = NodeCMapReaderFactory;
+let NodeStandardFontDataFactory = class {
+ constructor() {
+ (0, _util.unreachable)("Not implemented: NodeStandardFontDataFactory");
+ }
+
+};
+exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory;
+
+if (_is_node.isNodeJS) {
+ const fetchData = function (url) {
+ return new Promise((resolve, reject) => {
+ const fs = require("fs");
+
+ fs.readFile(url, (error, data) => {
+ if (error || !data) {
+ reject(new Error(error));
+ return;
+ }
+
+ resolve(new Uint8Array(data));
+ });
+ });
+ };
+
+ exports.NodeCanvasFactory = NodeCanvasFactory = class extends _base_factory.BaseCanvasFactory {
+ _createCanvas(width, height) {
+ const Canvas = require("canvas");
+
+ return Canvas.createCanvas(width, height);
+ }
+
+ };
+ exports.NodeCMapReaderFactory = NodeCMapReaderFactory = class extends _base_factory.BaseCMapReaderFactory {
+ _fetchData(url, compressionType) {
+ return fetchData(url).then(data => {
+ return {
+ cMapData: data,
+ compressionType
+ };
+ });
+ }
+
+ };
+ exports.NodeStandardFontDataFactory = NodeStandardFontDataFactory = class extends _base_factory.BaseStandardFontDataFactory {
+ _fetchData(url) {
+ return fetchData(url);
+ }
+
+ };
+}
+
+/***/ }),
+/* 9 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.AnnotationStorage = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+class AnnotationStorage {
+ constructor() {
+ this._storage = new Map();
+ this._timeStamp = Date.now();
+ this._modified = false;
+ this.onSetModified = null;
+ this.onResetModified = null;
+ }
+
+ getValue(key, defaultValue) {
+ const value = this._storage.get(key);
+
+ if (value === undefined) {
+ return defaultValue;
+ }
+
+ return Object.assign(defaultValue, value);
+ }
+
+ setValue(key, value) {
+ const obj = this._storage.get(key);
+
+ let modified = false;
+
+ if (obj !== undefined) {
+ for (const [entry, val] of Object.entries(value)) {
+ if (obj[entry] !== val) {
+ modified = true;
+ obj[entry] = val;
+ }
+ }
+ } else {
+ modified = true;
+
+ this._storage.set(key, value);
+ }
+
+ if (modified) {
+ this._timeStamp = Date.now();
+
+ this._setModified();
+ }
+ }
+
+ getAll() {
+ return this._storage.size > 0 ? (0, _util.objectFromMap)(this._storage) : null;
+ }
+
+ get size() {
+ return this._storage.size;
+ }
+
+ _setModified() {
+ if (!this._modified) {
+ this._modified = true;
+
+ if (typeof this.onSetModified === "function") {
+ this.onSetModified();
+ }
+ }
+ }
+
+ resetModified() {
+ if (this._modified) {
+ this._modified = false;
+
+ if (typeof this.onResetModified === "function") {
+ this.onResetModified();
+ }
+ }
+ }
+
+ get serializable() {
+ return this._storage.size > 0 ? this._storage : null;
+ }
+
+ get lastModified() {
+ return this._timeStamp.toString();
+ }
+
+}
+
+exports.AnnotationStorage = AnnotationStorage;
+
+/***/ }),
+/* 10 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.CanvasGraphics = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _pattern_helper = __w_pdfjs_require__(11);
+
+var _display_utils = __w_pdfjs_require__(5);
+
+const MIN_FONT_SIZE = 16;
+const MAX_FONT_SIZE = 100;
+const MAX_GROUP_SIZE = 4096;
+const EXECUTION_TIME = 15;
+const EXECUTION_STEPS = 10;
+const COMPILE_TYPE3_GLYPHS = true;
+const MAX_SIZE_TO_COMPILE = 1000;
+const FULL_CHUNK_HEIGHT = 16;
+const LINEWIDTH_SCALE_FACTOR = 1.000001;
+
+function mirrorContextOperations(ctx, destCtx) {
+ if (ctx._removeMirroring) {
+ throw new Error("Context is already forwarding operations.");
+ }
+
+ ctx.__originalSave = ctx.save;
+ ctx.__originalRestore = ctx.restore;
+ ctx.__originalRotate = ctx.rotate;
+ ctx.__originalScale = ctx.scale;
+ ctx.__originalTranslate = ctx.translate;
+ ctx.__originalTransform = ctx.transform;
+ ctx.__originalSetTransform = ctx.setTransform;
+ ctx.__originalResetTransform = ctx.resetTransform;
+ ctx.__originalClip = ctx.clip;
+ ctx.__originalMoveTo = ctx.moveTo;
+ ctx.__originalLineTo = ctx.lineTo;
+ ctx.__originalBezierCurveTo = ctx.bezierCurveTo;
+ ctx.__originalRect = ctx.rect;
+ ctx.__originalClosePath = ctx.closePath;
+ ctx.__originalBeginPath = ctx.beginPath;
+
+ ctx._removeMirroring = () => {
+ ctx.save = ctx.__originalSave;
+ ctx.restore = ctx.__originalRestore;
+ ctx.rotate = ctx.__originalRotate;
+ ctx.scale = ctx.__originalScale;
+ ctx.translate = ctx.__originalTranslate;
+ ctx.transform = ctx.__originalTransform;
+ ctx.setTransform = ctx.__originalSetTransform;
+ ctx.resetTransform = ctx.__originalResetTransform;
+ ctx.clip = ctx.__originalClip;
+ ctx.moveTo = ctx.__originalMoveTo;
+ ctx.lineTo = ctx.__originalLineTo;
+ ctx.bezierCurveTo = ctx.__originalBezierCurveTo;
+ ctx.rect = ctx.__originalRect;
+ ctx.closePath = ctx.__originalClosePath;
+ ctx.beginPath = ctx.__originalBeginPath;
+ delete ctx._removeMirroring;
+ };
+
+ ctx.save = function ctxSave() {
+ destCtx.save();
+
+ this.__originalSave();
+ };
+
+ ctx.restore = function ctxRestore() {
+ destCtx.restore();
+
+ this.__originalRestore();
+ };
+
+ ctx.translate = function ctxTranslate(x, y) {
+ destCtx.translate(x, y);
+
+ this.__originalTranslate(x, y);
+ };
+
+ ctx.scale = function ctxScale(x, y) {
+ destCtx.scale(x, y);
+
+ this.__originalScale(x, y);
+ };
+
+ ctx.transform = function ctxTransform(a, b, c, d, e, f) {
+ destCtx.transform(a, b, c, d, e, f);
+
+ this.__originalTransform(a, b, c, d, e, f);
+ };
+
+ ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
+ destCtx.setTransform(a, b, c, d, e, f);
+
+ this.__originalSetTransform(a, b, c, d, e, f);
+ };
+
+ ctx.resetTransform = function ctxResetTransform() {
+ destCtx.resetTransform();
+
+ this.__originalResetTransform();
+ };
+
+ ctx.rotate = function ctxRotate(angle) {
+ destCtx.rotate(angle);
+
+ this.__originalRotate(angle);
+ };
+
+ ctx.clip = function ctxRotate(rule) {
+ destCtx.clip(rule);
+
+ this.__originalClip(rule);
+ };
+
+ ctx.moveTo = function (x, y) {
+ destCtx.moveTo(x, y);
+
+ this.__originalMoveTo(x, y);
+ };
+
+ ctx.lineTo = function (x, y) {
+ destCtx.lineTo(x, y);
+
+ this.__originalLineTo(x, y);
+ };
+
+ ctx.bezierCurveTo = function (cp1x, cp1y, cp2x, cp2y, x, y) {
+ destCtx.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+
+ this.__originalBezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y);
+ };
+
+ ctx.rect = function (x, y, width, height) {
+ destCtx.rect(x, y, width, height);
+
+ this.__originalRect(x, y, width, height);
+ };
+
+ ctx.closePath = function () {
+ destCtx.closePath();
+
+ this.__originalClosePath();
+ };
+
+ ctx.beginPath = function () {
+ destCtx.beginPath();
+
+ this.__originalBeginPath();
+ };
+}
+
+function addContextCurrentTransform(ctx) {
+ if (ctx._transformStack) {
+ ctx._transformStack = [];
+ }
+
+ if (ctx.mozCurrentTransform) {
+ return;
+ }
+
+ ctx._originalSave = ctx.save;
+ ctx._originalRestore = ctx.restore;
+ ctx._originalRotate = ctx.rotate;
+ ctx._originalScale = ctx.scale;
+ ctx._originalTranslate = ctx.translate;
+ ctx._originalTransform = ctx.transform;
+ ctx._originalSetTransform = ctx.setTransform;
+ ctx._originalResetTransform = ctx.resetTransform;
+ ctx._transformMatrix = ctx._transformMatrix || [1, 0, 0, 1, 0, 0];
+ ctx._transformStack = [];
+
+ try {
+ const desc = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(ctx), "lineWidth");
+ ctx._setLineWidth = desc.set;
+ ctx._getLineWidth = desc.get;
+ Object.defineProperty(ctx, "lineWidth", {
+ set: function setLineWidth(width) {
+ this._setLineWidth(width * LINEWIDTH_SCALE_FACTOR);
+ },
+ get: function getLineWidth() {
+ return this._getLineWidth();
+ }
+ });
+ } catch (_) {}
+
+ Object.defineProperty(ctx, "mozCurrentTransform", {
+ get: function getCurrentTransform() {
+ return this._transformMatrix;
+ }
+ });
+ Object.defineProperty(ctx, "mozCurrentTransformInverse", {
+ get: function getCurrentTransformInverse() {
+ const [a, b, c, d, e, f] = this._transformMatrix;
+ const ad_bc = a * d - b * c;
+ const bc_ad = b * c - a * d;
+ return [d / ad_bc, b / bc_ad, c / bc_ad, a / ad_bc, (d * e - c * f) / bc_ad, (b * e - a * f) / ad_bc];
+ }
+ });
+
+ ctx.save = function ctxSave() {
+ const old = this._transformMatrix;
+
+ this._transformStack.push(old);
+
+ this._transformMatrix = old.slice(0, 6);
+
+ this._originalSave();
+ };
+
+ ctx.restore = function ctxRestore() {
+ if (this._transformStack.length === 0) {
+ (0, _util.warn)("Tried to restore a ctx when the stack was already empty.");
+ }
+
+ const prev = this._transformStack.pop();
+
+ if (prev) {
+ this._transformMatrix = prev;
+
+ this._originalRestore();
+ }
+ };
+
+ ctx.translate = function ctxTranslate(x, y) {
+ const m = this._transformMatrix;
+ m[4] = m[0] * x + m[2] * y + m[4];
+ m[5] = m[1] * x + m[3] * y + m[5];
+
+ this._originalTranslate(x, y);
+ };
+
+ ctx.scale = function ctxScale(x, y) {
+ const m = this._transformMatrix;
+ m[0] *= x;
+ m[1] *= x;
+ m[2] *= y;
+ m[3] *= y;
+
+ this._originalScale(x, y);
+ };
+
+ ctx.transform = function ctxTransform(a, b, c, d, e, f) {
+ const m = this._transformMatrix;
+ this._transformMatrix = [m[0] * a + m[2] * b, m[1] * a + m[3] * b, m[0] * c + m[2] * d, m[1] * c + m[3] * d, m[0] * e + m[2] * f + m[4], m[1] * e + m[3] * f + m[5]];
+
+ ctx._originalTransform(a, b, c, d, e, f);
+ };
+
+ ctx.setTransform = function ctxSetTransform(a, b, c, d, e, f) {
+ this._transformMatrix = [a, b, c, d, e, f];
+
+ ctx._originalSetTransform(a, b, c, d, e, f);
+ };
+
+ ctx.resetTransform = function ctxResetTransform() {
+ this._transformMatrix = [1, 0, 0, 1, 0, 0];
+
+ ctx._originalResetTransform();
+ };
+
+ ctx.rotate = function ctxRotate(angle) {
+ const cosValue = Math.cos(angle);
+ const sinValue = Math.sin(angle);
+ const m = this._transformMatrix;
+ this._transformMatrix = [m[0] * cosValue + m[2] * sinValue, m[1] * cosValue + m[3] * sinValue, m[0] * -sinValue + m[2] * cosValue, m[1] * -sinValue + m[3] * cosValue, m[4], m[5]];
+
+ this._originalRotate(angle);
+ };
+}
+
+class CachedCanvases {
+ constructor(canvasFactory) {
+ this.canvasFactory = canvasFactory;
+ this.cache = Object.create(null);
+ }
+
+ getCanvas(id, width, height, trackTransform) {
+ let canvasEntry;
+
+ if (this.cache[id] !== undefined) {
+ canvasEntry = this.cache[id];
+ this.canvasFactory.reset(canvasEntry, width, height);
+ canvasEntry.context.setTransform(1, 0, 0, 1, 0, 0);
+ } else {
+ canvasEntry = this.canvasFactory.create(width, height);
+ this.cache[id] = canvasEntry;
+ }
+
+ if (trackTransform) {
+ addContextCurrentTransform(canvasEntry.context);
+ }
+
+ return canvasEntry;
+ }
+
+ clear() {
+ for (const id in this.cache) {
+ const canvasEntry = this.cache[id];
+ this.canvasFactory.destroy(canvasEntry);
+ delete this.cache[id];
+ }
+ }
+
+}
+
+function compileType3Glyph(imgData) {
+ const POINT_TO_PROCESS_LIMIT = 1000;
+ const POINT_TYPES = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]);
+ const width = imgData.width,
+ height = imgData.height,
+ width1 = width + 1;
+ let i, ii, j, j0;
+ const points = new Uint8Array(width1 * (height + 1));
+ const lineSize = width + 7 & ~7,
+ data0 = imgData.data;
+ const data = new Uint8Array(lineSize * height);
+ let pos = 0;
+
+ for (i = 0, ii = data0.length; i < ii; i++) {
+ const elem = data0[i];
+ let mask = 128;
+
+ while (mask > 0) {
+ data[pos++] = elem & mask ? 0 : 255;
+ mask >>= 1;
+ }
+ }
+
+ let count = 0;
+ pos = 0;
+
+ if (data[pos] !== 0) {
+ points[0] = 1;
+ ++count;
+ }
+
+ for (j = 1; j < width; j++) {
+ if (data[pos] !== data[pos + 1]) {
+ points[j] = data[pos] ? 2 : 1;
+ ++count;
+ }
+
+ pos++;
+ }
+
+ if (data[pos] !== 0) {
+ points[j] = 2;
+ ++count;
+ }
+
+ for (i = 1; i < height; i++) {
+ pos = i * lineSize;
+ j0 = i * width1;
+
+ if (data[pos - lineSize] !== data[pos]) {
+ points[j0] = data[pos] ? 1 : 8;
+ ++count;
+ }
+
+ let sum = (data[pos] ? 4 : 0) + (data[pos - lineSize] ? 8 : 0);
+
+ for (j = 1; j < width; j++) {
+ sum = (sum >> 2) + (data[pos + 1] ? 4 : 0) + (data[pos - lineSize + 1] ? 8 : 0);
+
+ if (POINT_TYPES[sum]) {
+ points[j0 + j] = POINT_TYPES[sum];
+ ++count;
+ }
+
+ pos++;
+ }
+
+ if (data[pos - lineSize] !== data[pos]) {
+ points[j0 + j] = data[pos] ? 2 : 4;
+ ++count;
+ }
+
+ if (count > POINT_TO_PROCESS_LIMIT) {
+ return null;
+ }
+ }
+
+ pos = lineSize * (height - 1);
+ j0 = i * width1;
+
+ if (data[pos] !== 0) {
+ points[j0] = 8;
+ ++count;
+ }
+
+ for (j = 1; j < width; j++) {
+ if (data[pos] !== data[pos + 1]) {
+ points[j0 + j] = data[pos] ? 4 : 8;
+ ++count;
+ }
+
+ pos++;
+ }
+
+ if (data[pos] !== 0) {
+ points[j0 + j] = 4;
+ ++count;
+ }
+
+ if (count > POINT_TO_PROCESS_LIMIT) {
+ return null;
+ }
+
+ const steps = new Int32Array([0, width1, -1, 0, -width1, 0, 0, 0, 1]);
+ const outlines = [];
+
+ for (i = 0; count && i <= height; i++) {
+ let p = i * width1;
+ const end = p + width;
+
+ while (p < end && !points[p]) {
+ p++;
+ }
+
+ if (p === end) {
+ continue;
+ }
+
+ const coords = [p % width1, i];
+ const p0 = p;
+ let type = points[p];
+
+ do {
+ const step = steps[type];
+
+ do {
+ p += step;
+ } while (!points[p]);
+
+ const pp = points[p];
+
+ if (pp !== 5 && pp !== 10) {
+ type = pp;
+ points[p] = 0;
+ } else {
+ type = pp & 0x33 * type >> 4;
+ points[p] &= type >> 2 | type << 2;
+ }
+
+ coords.push(p % width1, p / width1 | 0);
+
+ if (!points[p]) {
+ --count;
+ }
+ } while (p0 !== p);
+
+ outlines.push(coords);
+ --i;
+ }
+
+ const drawOutline = function (c) {
+ c.save();
+ c.scale(1 / width, -1 / height);
+ c.translate(0, -height);
+ c.beginPath();
+
+ for (let k = 0, kk = outlines.length; k < kk; k++) {
+ const o = outlines[k];
+ c.moveTo(o[0], o[1]);
+
+ for (let l = 2, ll = o.length; l < ll; l += 2) {
+ c.lineTo(o[l], o[l + 1]);
+ }
+ }
+
+ c.fill();
+ c.beginPath();
+ c.restore();
+ };
+
+ return drawOutline;
+}
+
+class CanvasExtraState {
+ constructor(width, height) {
+ this.alphaIsShape = false;
+ this.fontSize = 0;
+ this.fontSizeScale = 1;
+ this.textMatrix = _util.IDENTITY_MATRIX;
+ this.textMatrixScale = 1;
+ this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
+ this.leading = 0;
+ this.x = 0;
+ this.y = 0;
+ this.lineX = 0;
+ this.lineY = 0;
+ this.charSpacing = 0;
+ this.wordSpacing = 0;
+ this.textHScale = 1;
+ this.textRenderingMode = _util.TextRenderingMode.FILL;
+ this.textRise = 0;
+ this.fillColor = "#000000";
+ this.strokeColor = "#000000";
+ this.patternFill = false;
+ this.fillAlpha = 1;
+ this.strokeAlpha = 1;
+ this.lineWidth = 1;
+ this.activeSMask = null;
+ this.transferMaps = null;
+ this.startNewPathAndClipBox([0, 0, width, height]);
+ }
+
+ clone() {
+ const clone = Object.create(this);
+ clone.clipBox = this.clipBox.slice();
+ return clone;
+ }
+
+ setCurrentPoint(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ updatePathMinMax(transform, x, y) {
+ [x, y] = _util.Util.applyTransform([x, y], transform);
+ this.minX = Math.min(this.minX, x);
+ this.minY = Math.min(this.minY, y);
+ this.maxX = Math.max(this.maxX, x);
+ this.maxY = Math.max(this.maxY, y);
+ }
+
+ updateCurvePathMinMax(transform, x0, y0, x1, y1, x2, y2, x3, y3) {
+ const box = _util.Util.bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3);
+
+ this.updatePathMinMax(transform, box[0], box[1]);
+ this.updatePathMinMax(transform, box[2], box[3]);
+ }
+
+ getPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) {
+ const box = [this.minX, this.minY, this.maxX, this.maxY];
+
+ if (pathType === _pattern_helper.PathType.STROKE) {
+ if (!transform) {
+ (0, _util.unreachable)("Stroke bounding box must include transform.");
+ }
+
+ const scale = _util.Util.singularValueDecompose2dScale(transform);
+
+ const xStrokePad = scale[0] * this.lineWidth / 2;
+ const yStrokePad = scale[1] * this.lineWidth / 2;
+ box[0] -= xStrokePad;
+ box[1] -= yStrokePad;
+ box[2] += xStrokePad;
+ box[3] += yStrokePad;
+ }
+
+ return box;
+ }
+
+ updateClipFromPath() {
+ const intersect = _util.Util.intersect(this.clipBox, this.getPathBoundingBox());
+
+ this.startNewPathAndClipBox(intersect || [0, 0, 0, 0]);
+ }
+
+ startNewPathAndClipBox(box) {
+ this.clipBox = box;
+ this.minX = Infinity;
+ this.minY = Infinity;
+ this.maxX = 0;
+ this.maxY = 0;
+ }
+
+ getClippedPathBoundingBox(pathType = _pattern_helper.PathType.FILL, transform = null) {
+ return _util.Util.intersect(this.clipBox, this.getPathBoundingBox(pathType, transform));
+ }
+
+}
+
+function putBinaryImageData(ctx, imgData, transferMaps = null) {
+ if (typeof ImageData !== "undefined" && imgData instanceof ImageData) {
+ ctx.putImageData(imgData, 0, 0);
+ return;
+ }
+
+ const height = imgData.height,
+ width = imgData.width;
+ const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+ const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+ const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+ const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+ let srcPos = 0,
+ destPos;
+ const src = imgData.data;
+ const dest = chunkImgData.data;
+ let i, j, thisChunkHeight, elemsInThisChunk;
+ let transferMapRed, transferMapGreen, transferMapBlue, transferMapGray;
+
+ if (transferMaps) {
+ switch (transferMaps.length) {
+ case 1:
+ transferMapRed = transferMaps[0];
+ transferMapGreen = transferMaps[0];
+ transferMapBlue = transferMaps[0];
+ transferMapGray = transferMaps[0];
+ break;
+
+ case 4:
+ transferMapRed = transferMaps[0];
+ transferMapGreen = transferMaps[1];
+ transferMapBlue = transferMaps[2];
+ transferMapGray = transferMaps[3];
+ break;
+ }
+ }
+
+ if (imgData.kind === _util.ImageKind.GRAYSCALE_1BPP) {
+ const srcLength = src.byteLength;
+ const dest32 = new Uint32Array(dest.buffer, 0, dest.byteLength >> 2);
+ const dest32DataLength = dest32.length;
+ const fullSrcDiff = width + 7 >> 3;
+ let white = 0xffffffff;
+ let black = _util.IsLittleEndianCached.value ? 0xff000000 : 0x000000ff;
+
+ if (transferMapGray) {
+ if (transferMapGray[0] === 0xff && transferMapGray[0xff] === 0) {
+ [white, black] = [black, white];
+ }
+ }
+
+ for (i = 0; i < totalChunks; i++) {
+ thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+ destPos = 0;
+
+ for (j = 0; j < thisChunkHeight; j++) {
+ const srcDiff = srcLength - srcPos;
+ let k = 0;
+ const kEnd = srcDiff > fullSrcDiff ? width : srcDiff * 8 - 7;
+ const kEndUnrolled = kEnd & ~7;
+ let mask = 0;
+ let srcByte = 0;
+
+ for (; k < kEndUnrolled; k += 8) {
+ srcByte = src[srcPos++];
+ dest32[destPos++] = srcByte & 128 ? white : black;
+ dest32[destPos++] = srcByte & 64 ? white : black;
+ dest32[destPos++] = srcByte & 32 ? white : black;
+ dest32[destPos++] = srcByte & 16 ? white : black;
+ dest32[destPos++] = srcByte & 8 ? white : black;
+ dest32[destPos++] = srcByte & 4 ? white : black;
+ dest32[destPos++] = srcByte & 2 ? white : black;
+ dest32[destPos++] = srcByte & 1 ? white : black;
+ }
+
+ for (; k < kEnd; k++) {
+ if (mask === 0) {
+ srcByte = src[srcPos++];
+ mask = 128;
+ }
+
+ dest32[destPos++] = srcByte & mask ? white : black;
+ mask >>= 1;
+ }
+ }
+
+ while (destPos < dest32DataLength) {
+ dest32[destPos++] = 0;
+ }
+
+ ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+ }
+ } else if (imgData.kind === _util.ImageKind.RGBA_32BPP) {
+ const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);
+ j = 0;
+ elemsInThisChunk = width * FULL_CHUNK_HEIGHT * 4;
+
+ for (i = 0; i < fullChunks; i++) {
+ dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
+ srcPos += elemsInThisChunk;
+
+ if (hasTransferMaps) {
+ for (let k = 0; k < elemsInThisChunk; k += 4) {
+ if (transferMapRed) {
+ dest[k + 0] = transferMapRed[dest[k + 0]];
+ }
+
+ if (transferMapGreen) {
+ dest[k + 1] = transferMapGreen[dest[k + 1]];
+ }
+
+ if (transferMapBlue) {
+ dest[k + 2] = transferMapBlue[dest[k + 2]];
+ }
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, j);
+ j += FULL_CHUNK_HEIGHT;
+ }
+
+ if (i < totalChunks) {
+ elemsInThisChunk = width * partialChunkHeight * 4;
+ dest.set(src.subarray(srcPos, srcPos + elemsInThisChunk));
+
+ if (hasTransferMaps) {
+ for (let k = 0; k < elemsInThisChunk; k += 4) {
+ if (transferMapRed) {
+ dest[k + 0] = transferMapRed[dest[k + 0]];
+ }
+
+ if (transferMapGreen) {
+ dest[k + 1] = transferMapGreen[dest[k + 1]];
+ }
+
+ if (transferMapBlue) {
+ dest[k + 2] = transferMapBlue[dest[k + 2]];
+ }
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, j);
+ }
+ } else if (imgData.kind === _util.ImageKind.RGB_24BPP) {
+ const hasTransferMaps = !!(transferMapRed || transferMapGreen || transferMapBlue);
+ thisChunkHeight = FULL_CHUNK_HEIGHT;
+ elemsInThisChunk = width * thisChunkHeight;
+
+ for (i = 0; i < totalChunks; i++) {
+ if (i >= fullChunks) {
+ thisChunkHeight = partialChunkHeight;
+ elemsInThisChunk = width * thisChunkHeight;
+ }
+
+ destPos = 0;
+
+ for (j = elemsInThisChunk; j--;) {
+ dest[destPos++] = src[srcPos++];
+ dest[destPos++] = src[srcPos++];
+ dest[destPos++] = src[srcPos++];
+ dest[destPos++] = 255;
+ }
+
+ if (hasTransferMaps) {
+ for (let k = 0; k < destPos; k += 4) {
+ if (transferMapRed) {
+ dest[k + 0] = transferMapRed[dest[k + 0]];
+ }
+
+ if (transferMapGreen) {
+ dest[k + 1] = transferMapGreen[dest[k + 1]];
+ }
+
+ if (transferMapBlue) {
+ dest[k + 2] = transferMapBlue[dest[k + 2]];
+ }
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+ }
+ } else {
+ throw new Error(`bad image kind: ${imgData.kind}`);
+ }
+}
+
+function putBinaryImageMask(ctx, imgData) {
+ const height = imgData.height,
+ width = imgData.width;
+ const partialChunkHeight = height % FULL_CHUNK_HEIGHT;
+ const fullChunks = (height - partialChunkHeight) / FULL_CHUNK_HEIGHT;
+ const totalChunks = partialChunkHeight === 0 ? fullChunks : fullChunks + 1;
+ const chunkImgData = ctx.createImageData(width, FULL_CHUNK_HEIGHT);
+ let srcPos = 0;
+ const src = imgData.data;
+ const dest = chunkImgData.data;
+
+ for (let i = 0; i < totalChunks; i++) {
+ const thisChunkHeight = i < fullChunks ? FULL_CHUNK_HEIGHT : partialChunkHeight;
+ let destPos = 3;
+
+ for (let j = 0; j < thisChunkHeight; j++) {
+ let elem,
+ mask = 0;
+
+ for (let k = 0; k < width; k++) {
+ if (!mask) {
+ elem = src[srcPos++];
+ mask = 128;
+ }
+
+ dest[destPos] = elem & mask ? 0 : 255;
+ destPos += 4;
+ mask >>= 1;
+ }
+ }
+
+ ctx.putImageData(chunkImgData, 0, i * FULL_CHUNK_HEIGHT);
+ }
+}
+
+function copyCtxState(sourceCtx, destCtx) {
+ const properties = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font"];
+
+ for (let i = 0, ii = properties.length; i < ii; i++) {
+ const property = properties[i];
+
+ if (sourceCtx[property] !== undefined) {
+ destCtx[property] = sourceCtx[property];
+ }
+ }
+
+ if (sourceCtx.setLineDash !== undefined) {
+ destCtx.setLineDash(sourceCtx.getLineDash());
+ destCtx.lineDashOffset = sourceCtx.lineDashOffset;
+ }
+}
+
+function resetCtxToDefault(ctx) {
+ ctx.strokeStyle = "#000000";
+ ctx.fillStyle = "#000000";
+ ctx.fillRule = "nonzero";
+ ctx.globalAlpha = 1;
+ ctx.lineWidth = 1;
+ ctx.lineCap = "butt";
+ ctx.lineJoin = "miter";
+ ctx.miterLimit = 10;
+ ctx.globalCompositeOperation = "source-over";
+ ctx.font = "10px sans-serif";
+
+ if (ctx.setLineDash !== undefined) {
+ ctx.setLineDash([]);
+ ctx.lineDashOffset = 0;
+ }
+}
+
+function composeSMaskBackdrop(bytes, r0, g0, b0) {
+ const length = bytes.length;
+
+ for (let i = 3; i < length; i += 4) {
+ const alpha = bytes[i];
+
+ if (alpha === 0) {
+ bytes[i - 3] = r0;
+ bytes[i - 2] = g0;
+ bytes[i - 1] = b0;
+ } else if (alpha < 255) {
+ const alpha_ = 255 - alpha;
+ bytes[i - 3] = bytes[i - 3] * alpha + r0 * alpha_ >> 8;
+ bytes[i - 2] = bytes[i - 2] * alpha + g0 * alpha_ >> 8;
+ bytes[i - 1] = bytes[i - 1] * alpha + b0 * alpha_ >> 8;
+ }
+ }
+}
+
+function composeSMaskAlpha(maskData, layerData, transferMap) {
+ const length = maskData.length;
+ const scale = 1 / 255;
+
+ for (let i = 3; i < length; i += 4) {
+ const alpha = transferMap ? transferMap[maskData[i]] : maskData[i];
+ layerData[i] = layerData[i] * alpha * scale | 0;
+ }
+}
+
+function composeSMaskLuminosity(maskData, layerData, transferMap) {
+ const length = maskData.length;
+
+ for (let i = 3; i < length; i += 4) {
+ const y = maskData[i - 3] * 77 + maskData[i - 2] * 152 + maskData[i - 1] * 28;
+ layerData[i] = transferMap ? layerData[i] * transferMap[y >> 8] >> 8 : layerData[i] * y >> 16;
+ }
+}
+
+function genericComposeSMask(maskCtx, layerCtx, width, height, subtype, backdrop, transferMap, layerOffsetX, layerOffsetY, maskOffsetX, maskOffsetY) {
+ const hasBackdrop = !!backdrop;
+ const r0 = hasBackdrop ? backdrop[0] : 0;
+ const g0 = hasBackdrop ? backdrop[1] : 0;
+ const b0 = hasBackdrop ? backdrop[2] : 0;
+ let composeFn;
+
+ if (subtype === "Luminosity") {
+ composeFn = composeSMaskLuminosity;
+ } else {
+ composeFn = composeSMaskAlpha;
+ }
+
+ const PIXELS_TO_PROCESS = 1048576;
+ const chunkSize = Math.min(height, Math.ceil(PIXELS_TO_PROCESS / width));
+
+ for (let row = 0; row < height; row += chunkSize) {
+ const chunkHeight = Math.min(chunkSize, height - row);
+ const maskData = maskCtx.getImageData(layerOffsetX - maskOffsetX, row + (layerOffsetY - maskOffsetY), width, chunkHeight);
+ const layerData = layerCtx.getImageData(layerOffsetX, row + layerOffsetY, width, chunkHeight);
+
+ if (hasBackdrop) {
+ composeSMaskBackdrop(maskData.data, r0, g0, b0);
+ }
+
+ composeFn(maskData.data, layerData.data, transferMap);
+ layerCtx.putImageData(layerData, layerOffsetX, row + layerOffsetY);
+ }
+}
+
+function composeSMask(ctx, smask, layerCtx, layerBox) {
+ const layerOffsetX = layerBox[0];
+ const layerOffsetY = layerBox[1];
+ const layerWidth = layerBox[2] - layerOffsetX;
+ const layerHeight = layerBox[3] - layerOffsetY;
+
+ if (layerWidth === 0 || layerHeight === 0) {
+ return;
+ }
+
+ genericComposeSMask(smask.context, layerCtx, layerWidth, layerHeight, smask.subtype, smask.backdrop, smask.transferMap, layerOffsetX, layerOffsetY, smask.offsetX, smask.offsetY);
+ ctx.save();
+ ctx.globalAlpha = 1;
+ ctx.globalCompositeOperation = "source-over";
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ ctx.drawImage(layerCtx.canvas, 0, 0);
+ ctx.restore();
+}
+
+function getImageSmoothingEnabled(transform, interpolate) {
+ const scale = _util.Util.singularValueDecompose2dScale(transform);
+
+ scale[0] = Math.fround(scale[0]);
+ scale[1] = Math.fround(scale[1]);
+ const actualScale = Math.fround((globalThis.devicePixelRatio || 1) * _display_utils.PixelsPerInch.PDF_TO_CSS_UNITS);
+
+ if (interpolate !== undefined) {
+ return interpolate;
+ } else if (scale[0] <= actualScale || scale[1] <= actualScale) {
+ return true;
+ }
+
+ return false;
+}
+
+const LINE_CAP_STYLES = ["butt", "round", "square"];
+const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
+const NORMAL_CLIP = {};
+const EO_CLIP = {};
+
+class CanvasGraphics {
+ constructor(canvasCtx, commonObjs, objs, canvasFactory, imageLayer, optionalContentConfig, annotationCanvasMap) {
+ this.ctx = canvasCtx;
+ this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
+ this.stateStack = [];
+ this.pendingClip = null;
+ this.pendingEOFill = false;
+ this.res = null;
+ this.xobjs = null;
+ this.commonObjs = commonObjs;
+ this.objs = objs;
+ this.canvasFactory = canvasFactory;
+ this.imageLayer = imageLayer;
+ this.groupStack = [];
+ this.processingType3 = null;
+ this.baseTransform = null;
+ this.baseTransformStack = [];
+ this.groupLevel = 0;
+ this.smaskStack = [];
+ this.smaskCounter = 0;
+ this.tempSMask = null;
+ this.suspendedCtx = null;
+ this.contentVisible = true;
+ this.markedContentStack = [];
+ this.optionalContentConfig = optionalContentConfig;
+ this.cachedCanvases = new CachedCanvases(this.canvasFactory);
+ this.cachedPatterns = new Map();
+ this.annotationCanvasMap = annotationCanvasMap;
+ this.viewportScale = 1;
+ this.outputScaleX = 1;
+ this.outputScaleY = 1;
+
+ if (canvasCtx) {
+ addContextCurrentTransform(canvasCtx);
+ }
+
+ this._cachedGetSinglePixelWidth = null;
+ }
+
+ beginDrawing({
+ transform,
+ viewport,
+ transparency = false,
+ background = null
+ }) {
+ const width = this.ctx.canvas.width;
+ const height = this.ctx.canvas.height;
+ this.ctx.save();
+ this.ctx.fillStyle = background || "rgb(255, 255, 255)";
+ this.ctx.fillRect(0, 0, width, height);
+ this.ctx.restore();
+
+ if (transparency) {
+ const transparentCanvas = this.cachedCanvases.getCanvas("transparent", width, height, true);
+ this.compositeCtx = this.ctx;
+ this.transparentCanvas = transparentCanvas.canvas;
+ this.ctx = transparentCanvas.context;
+ this.ctx.save();
+ this.ctx.transform.apply(this.ctx, this.compositeCtx.mozCurrentTransform);
+ }
+
+ this.ctx.save();
+ resetCtxToDefault(this.ctx);
+
+ if (transform) {
+ this.ctx.transform.apply(this.ctx, transform);
+ this.outputScaleX = transform[0];
+ this.outputScaleY = transform[0];
+ }
+
+ this.ctx.transform.apply(this.ctx, viewport.transform);
+ this.viewportScale = viewport.scale;
+ this.baseTransform = this.ctx.mozCurrentTransform.slice();
+ this._combinedScaleFactor = Math.hypot(this.baseTransform[0], this.baseTransform[2]);
+
+ if (this.imageLayer) {
+ this.imageLayer.beginLayout();
+ }
+ }
+
+ executeOperatorList(operatorList, executionStartIdx, continueCallback, stepper) {
+ const argsArray = operatorList.argsArray;
+ const fnArray = operatorList.fnArray;
+ let i = executionStartIdx || 0;
+ const argsArrayLen = argsArray.length;
+
+ if (argsArrayLen === i) {
+ return i;
+ }
+
+ const chunkOperations = argsArrayLen - i > EXECUTION_STEPS && typeof continueCallback === "function";
+ const endTime = chunkOperations ? Date.now() + EXECUTION_TIME : 0;
+ let steps = 0;
+ const commonObjs = this.commonObjs;
+ const objs = this.objs;
+ let fnId;
+
+ while (true) {
+ if (stepper !== undefined && i === stepper.nextBreakPoint) {
+ stepper.breakIt(i, continueCallback);
+ return i;
+ }
+
+ fnId = fnArray[i];
+
+ if (fnId !== _util.OPS.dependency) {
+ this[fnId].apply(this, argsArray[i]);
+ } else {
+ for (const depObjId of argsArray[i]) {
+ const objsPool = depObjId.startsWith("g_") ? commonObjs : objs;
+
+ if (!objsPool.has(depObjId)) {
+ objsPool.get(depObjId, continueCallback);
+ return i;
+ }
+ }
+ }
+
+ i++;
+
+ if (i === argsArrayLen) {
+ return i;
+ }
+
+ if (chunkOperations && ++steps > EXECUTION_STEPS) {
+ if (Date.now() > endTime) {
+ continueCallback();
+ return i;
+ }
+
+ steps = 0;
+ }
+ }
+ }
+
+ endDrawing() {
+ while (this.stateStack.length || this.inSMaskMode) {
+ this.restore();
+ }
+
+ this.ctx.restore();
+
+ if (this.transparentCanvas) {
+ this.ctx = this.compositeCtx;
+ this.ctx.save();
+ this.ctx.setTransform(1, 0, 0, 1, 0, 0);
+ this.ctx.drawImage(this.transparentCanvas, 0, 0);
+ this.ctx.restore();
+ this.transparentCanvas = null;
+ }
+
+ this.cachedCanvases.clear();
+ this.cachedPatterns.clear();
+
+ if (this.imageLayer) {
+ this.imageLayer.endLayout();
+ }
+ }
+
+ _scaleImage(img, inverseTransform) {
+ const width = img.width;
+ const height = img.height;
+ let widthScale = Math.max(Math.hypot(inverseTransform[0], inverseTransform[1]), 1);
+ let heightScale = Math.max(Math.hypot(inverseTransform[2], inverseTransform[3]), 1);
+ let paintWidth = width,
+ paintHeight = height;
+ let tmpCanvasId = "prescale1";
+ let tmpCanvas, tmpCtx;
+
+ while (widthScale > 2 && paintWidth > 1 || heightScale > 2 && paintHeight > 1) {
+ let newWidth = paintWidth,
+ newHeight = paintHeight;
+
+ if (widthScale > 2 && paintWidth > 1) {
+ newWidth = Math.ceil(paintWidth / 2);
+ widthScale /= paintWidth / newWidth;
+ }
+
+ if (heightScale > 2 && paintHeight > 1) {
+ newHeight = Math.ceil(paintHeight / 2);
+ heightScale /= paintHeight / newHeight;
+ }
+
+ tmpCanvas = this.cachedCanvases.getCanvas(tmpCanvasId, newWidth, newHeight);
+ tmpCtx = tmpCanvas.context;
+ tmpCtx.clearRect(0, 0, newWidth, newHeight);
+ tmpCtx.drawImage(img, 0, 0, paintWidth, paintHeight, 0, 0, newWidth, newHeight);
+ img = tmpCanvas.canvas;
+ paintWidth = newWidth;
+ paintHeight = newHeight;
+ tmpCanvasId = tmpCanvasId === "prescale1" ? "prescale2" : "prescale1";
+ }
+
+ return {
+ img,
+ paintWidth,
+ paintHeight
+ };
+ }
+
+ _createMaskCanvas(img) {
+ const ctx = this.ctx;
+ const width = img.width,
+ height = img.height;
+ const fillColor = this.current.fillColor;
+ const isPatternFill = this.current.patternFill;
+ const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+ const maskCtx = maskCanvas.context;
+ putBinaryImageMask(maskCtx, img);
+ const objToCanvas = ctx.mozCurrentTransform;
+
+ let maskToCanvas = _util.Util.transform(objToCanvas, [1 / width, 0, 0, -1 / height, 0, 0]);
+
+ maskToCanvas = _util.Util.transform(maskToCanvas, [1, 0, 0, 1, 0, -height]);
+
+ const cord1 = _util.Util.applyTransform([0, 0], maskToCanvas);
+
+ const cord2 = _util.Util.applyTransform([width, height], maskToCanvas);
+
+ const rect = _util.Util.normalizeRect([cord1[0], cord1[1], cord2[0], cord2[1]]);
+
+ const drawnWidth = Math.ceil(rect[2] - rect[0]);
+ const drawnHeight = Math.ceil(rect[3] - rect[1]);
+ const fillCanvas = this.cachedCanvases.getCanvas("fillCanvas", drawnWidth, drawnHeight, true);
+ const fillCtx = fillCanvas.context;
+ const offsetX = Math.min(cord1[0], cord2[0]);
+ const offsetY = Math.min(cord1[1], cord2[1]);
+ fillCtx.translate(-offsetX, -offsetY);
+ fillCtx.transform.apply(fillCtx, maskToCanvas);
+
+ const scaled = this._scaleImage(maskCanvas.canvas, fillCtx.mozCurrentTransformInverse);
+
+ fillCtx.imageSmoothingEnabled = getImageSmoothingEnabled(fillCtx.mozCurrentTransform, img.interpolate);
+ fillCtx.drawImage(scaled.img, 0, 0, scaled.img.width, scaled.img.height, 0, 0, width, height);
+ fillCtx.globalCompositeOperation = "source-in";
+
+ const inverse = _util.Util.transform(fillCtx.mozCurrentTransformInverse, [1, 0, 0, 1, -offsetX, -offsetY]);
+
+ fillCtx.fillStyle = isPatternFill ? fillColor.getPattern(ctx, this, inverse, _pattern_helper.PathType.FILL) : fillColor;
+ fillCtx.fillRect(0, 0, width, height);
+ return {
+ canvas: fillCanvas.canvas,
+ offsetX: Math.round(offsetX),
+ offsetY: Math.round(offsetY)
+ };
+ }
+
+ setLineWidth(width) {
+ this.current.lineWidth = width;
+ this.ctx.lineWidth = width;
+ }
+
+ setLineCap(style) {
+ this.ctx.lineCap = LINE_CAP_STYLES[style];
+ }
+
+ setLineJoin(style) {
+ this.ctx.lineJoin = LINE_JOIN_STYLES[style];
+ }
+
+ setMiterLimit(limit) {
+ this.ctx.miterLimit = limit;
+ }
+
+ setDash(dashArray, dashPhase) {
+ const ctx = this.ctx;
+
+ if (ctx.setLineDash !== undefined) {
+ ctx.setLineDash(dashArray);
+ ctx.lineDashOffset = dashPhase;
+ }
+ }
+
+ setRenderingIntent(intent) {}
+
+ setFlatness(flatness) {}
+
+ setGState(states) {
+ for (let i = 0, ii = states.length; i < ii; i++) {
+ const state = states[i];
+ const key = state[0];
+ const value = state[1];
+
+ switch (key) {
+ case "LW":
+ this.setLineWidth(value);
+ break;
+
+ case "LC":
+ this.setLineCap(value);
+ break;
+
+ case "LJ":
+ this.setLineJoin(value);
+ break;
+
+ case "ML":
+ this.setMiterLimit(value);
+ break;
+
+ case "D":
+ this.setDash(value[0], value[1]);
+ break;
+
+ case "RI":
+ this.setRenderingIntent(value);
+ break;
+
+ case "FL":
+ this.setFlatness(value);
+ break;
+
+ case "Font":
+ this.setFont(value[0], value[1]);
+ break;
+
+ case "CA":
+ this.current.strokeAlpha = state[1];
+ break;
+
+ case "ca":
+ this.current.fillAlpha = state[1];
+ this.ctx.globalAlpha = state[1];
+ break;
+
+ case "BM":
+ this.ctx.globalCompositeOperation = value;
+ break;
+
+ case "SMask":
+ this.current.activeSMask = value ? this.tempSMask : null;
+ this.tempSMask = null;
+ this.checkSMaskState();
+ break;
+
+ case "TR":
+ this.current.transferMaps = value;
+ }
+ }
+ }
+
+ get inSMaskMode() {
+ return !!this.suspendedCtx;
+ }
+
+ checkSMaskState() {
+ const inSMaskMode = this.inSMaskMode;
+
+ if (this.current.activeSMask && !inSMaskMode) {
+ this.beginSMaskMode();
+ } else if (!this.current.activeSMask && inSMaskMode) {
+ this.endSMaskMode();
+ }
+ }
+
+ beginSMaskMode() {
+ if (this.inSMaskMode) {
+ throw new Error("beginSMaskMode called while already in smask mode");
+ }
+
+ const drawnWidth = this.ctx.canvas.width;
+ const drawnHeight = this.ctx.canvas.height;
+ const cacheId = "smaskGroupAt" + this.groupLevel;
+ const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
+ this.suspendedCtx = this.ctx;
+ this.ctx = scratchCanvas.context;
+ const ctx = this.ctx;
+ ctx.setTransform.apply(ctx, this.suspendedCtx.mozCurrentTransform);
+ copyCtxState(this.suspendedCtx, ctx);
+ mirrorContextOperations(ctx, this.suspendedCtx);
+ this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
+ }
+
+ endSMaskMode() {
+ if (!this.inSMaskMode) {
+ throw new Error("endSMaskMode called while not in smask mode");
+ }
+
+ this.ctx._removeMirroring();
+
+ copyCtxState(this.ctx, this.suspendedCtx);
+ this.ctx = this.suspendedCtx;
+ this.suspendedCtx = null;
+ }
+
+ compose(dirtyBox) {
+ if (!this.current.activeSMask) {
+ return;
+ }
+
+ if (!dirtyBox) {
+ dirtyBox = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];
+ } else {
+ dirtyBox[0] = Math.floor(dirtyBox[0]);
+ dirtyBox[1] = Math.floor(dirtyBox[1]);
+ dirtyBox[2] = Math.ceil(dirtyBox[2]);
+ dirtyBox[3] = Math.ceil(dirtyBox[3]);
+ }
+
+ const smask = this.current.activeSMask;
+ const suspendedCtx = this.suspendedCtx;
+ composeSMask(suspendedCtx, smask, this.ctx, dirtyBox);
+ this.ctx.save();
+ this.ctx.setTransform(1, 0, 0, 1, 0, 0);
+ this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height);
+ this.ctx.restore();
+ }
+
+ save() {
+ if (this.inSMaskMode) {
+ copyCtxState(this.ctx, this.suspendedCtx);
+ this.suspendedCtx.save();
+ } else {
+ this.ctx.save();
+ }
+
+ const old = this.current;
+ this.stateStack.push(old);
+ this.current = old.clone();
+ }
+
+ restore() {
+ if (this.stateStack.length === 0 && this.inSMaskMode) {
+ this.endSMaskMode();
+ }
+
+ if (this.stateStack.length !== 0) {
+ this.current = this.stateStack.pop();
+
+ if (this.inSMaskMode) {
+ this.suspendedCtx.restore();
+ copyCtxState(this.suspendedCtx, this.ctx);
+ } else {
+ this.ctx.restore();
+ }
+
+ this.checkSMaskState();
+ this.pendingClip = null;
+ this._cachedGetSinglePixelWidth = null;
+ }
+ }
+
+ transform(a, b, c, d, e, f) {
+ this.ctx.transform(a, b, c, d, e, f);
+ this._cachedGetSinglePixelWidth = null;
+ }
+
+ constructPath(ops, args) {
+ const ctx = this.ctx;
+ const current = this.current;
+ let x = current.x,
+ y = current.y;
+ let startX, startY;
+
+ for (let i = 0, j = 0, ii = ops.length; i < ii; i++) {
+ switch (ops[i] | 0) {
+ case _util.OPS.rectangle:
+ x = args[j++];
+ y = args[j++];
+ const width = args[j++];
+ const height = args[j++];
+ const xw = x + width;
+ const yh = y + height;
+ ctx.moveTo(x, y);
+
+ if (width === 0 || height === 0) {
+ ctx.lineTo(xw, yh);
+ } else {
+ ctx.lineTo(xw, y);
+ ctx.lineTo(xw, yh);
+ ctx.lineTo(x, yh);
+ }
+
+ current.updatePathMinMax(ctx.mozCurrentTransform, x, y);
+ current.updatePathMinMax(ctx.mozCurrentTransform, xw, yh);
+ ctx.closePath();
+ break;
+
+ case _util.OPS.moveTo:
+ x = args[j++];
+ y = args[j++];
+ ctx.moveTo(x, y);
+ current.updatePathMinMax(ctx.mozCurrentTransform, x, y);
+ break;
+
+ case _util.OPS.lineTo:
+ x = args[j++];
+ y = args[j++];
+ ctx.lineTo(x, y);
+ current.updatePathMinMax(ctx.mozCurrentTransform, x, y);
+ break;
+
+ case _util.OPS.curveTo:
+ startX = x;
+ startY = y;
+ x = args[j + 4];
+ y = args[j + 5];
+ ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
+ current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], args[j + 2], args[j + 3], x, y);
+ j += 6;
+ break;
+
+ case _util.OPS.curveTo2:
+ startX = x;
+ startY = y;
+ ctx.bezierCurveTo(x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
+ current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, x, y, args[j], args[j + 1], args[j + 2], args[j + 3]);
+ x = args[j + 2];
+ y = args[j + 3];
+ j += 4;
+ break;
+
+ case _util.OPS.curveTo3:
+ startX = x;
+ startY = y;
+ x = args[j + 2];
+ y = args[j + 3];
+ ctx.bezierCurveTo(args[j], args[j + 1], x, y, x, y);
+ current.updateCurvePathMinMax(ctx.mozCurrentTransform, startX, startY, args[j], args[j + 1], x, y, x, y);
+ j += 4;
+ break;
+
+ case _util.OPS.closePath:
+ ctx.closePath();
+ break;
+ }
+ }
+
+ current.setCurrentPoint(x, y);
+ }
+
+ closePath() {
+ this.ctx.closePath();
+ }
+
+ stroke(consumePath) {
+ consumePath = typeof consumePath !== "undefined" ? consumePath : true;
+ const ctx = this.ctx;
+ const strokeColor = this.current.strokeColor;
+ ctx.globalAlpha = this.current.strokeAlpha;
+
+ if (this.contentVisible) {
+ if (typeof strokeColor === "object" && strokeColor?.getPattern) {
+ const lineWidth = this.getSinglePixelWidth();
+ ctx.save();
+ ctx.strokeStyle = strokeColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.STROKE);
+ ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth);
+ ctx.stroke();
+ ctx.restore();
+ } else {
+ const lineWidth = this.getSinglePixelWidth();
+
+ if (lineWidth < 0 && -lineWidth >= this.current.lineWidth) {
+ ctx.save();
+ ctx.resetTransform();
+ ctx.lineWidth = Math.floor(this._combinedScaleFactor);
+ ctx.stroke();
+ ctx.restore();
+ } else {
+ ctx.lineWidth = Math.max(lineWidth, this.current.lineWidth);
+ ctx.stroke();
+ }
+ }
+ }
+
+ if (consumePath) {
+ this.consumePath(this.current.getClippedPathBoundingBox());
+ }
+
+ ctx.globalAlpha = this.current.fillAlpha;
+ }
+
+ closeStroke() {
+ this.closePath();
+ this.stroke();
+ }
+
+ fill(consumePath) {
+ consumePath = typeof consumePath !== "undefined" ? consumePath : true;
+ const ctx = this.ctx;
+ const fillColor = this.current.fillColor;
+ const isPatternFill = this.current.patternFill;
+ let needRestore = false;
+
+ if (isPatternFill) {
+ ctx.save();
+ ctx.fillStyle = fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL);
+ needRestore = true;
+ }
+
+ const intersect = this.current.getClippedPathBoundingBox();
+
+ if (this.contentVisible && intersect !== null) {
+ if (this.pendingEOFill) {
+ ctx.fill("evenodd");
+ this.pendingEOFill = false;
+ } else {
+ ctx.fill();
+ }
+ }
+
+ if (needRestore) {
+ ctx.restore();
+ }
+
+ if (consumePath) {
+ this.consumePath(intersect);
+ }
+ }
+
+ eoFill() {
+ this.pendingEOFill = true;
+ this.fill();
+ }
+
+ fillStroke() {
+ this.fill(false);
+ this.stroke(false);
+ this.consumePath();
+ }
+
+ eoFillStroke() {
+ this.pendingEOFill = true;
+ this.fillStroke();
+ }
+
+ closeFillStroke() {
+ this.closePath();
+ this.fillStroke();
+ }
+
+ closeEOFillStroke() {
+ this.pendingEOFill = true;
+ this.closePath();
+ this.fillStroke();
+ }
+
+ endPath() {
+ this.consumePath();
+ }
+
+ clip() {
+ this.pendingClip = NORMAL_CLIP;
+ }
+
+ eoClip() {
+ this.pendingClip = EO_CLIP;
+ }
+
+ beginText() {
+ this.current.textMatrix = _util.IDENTITY_MATRIX;
+ this.current.textMatrixScale = 1;
+ this.current.x = this.current.lineX = 0;
+ this.current.y = this.current.lineY = 0;
+ }
+
+ endText() {
+ const paths = this.pendingTextPaths;
+ const ctx = this.ctx;
+
+ if (paths === undefined) {
+ ctx.beginPath();
+ return;
+ }
+
+ ctx.save();
+ ctx.beginPath();
+
+ for (let i = 0; i < paths.length; i++) {
+ const path = paths[i];
+ ctx.setTransform.apply(ctx, path.transform);
+ ctx.translate(path.x, path.y);
+ path.addToPath(ctx, path.fontSize);
+ }
+
+ ctx.restore();
+ ctx.clip();
+ ctx.beginPath();
+ delete this.pendingTextPaths;
+ }
+
+ setCharSpacing(spacing) {
+ this.current.charSpacing = spacing;
+ }
+
+ setWordSpacing(spacing) {
+ this.current.wordSpacing = spacing;
+ }
+
+ setHScale(scale) {
+ this.current.textHScale = scale / 100;
+ }
+
+ setLeading(leading) {
+ this.current.leading = -leading;
+ }
+
+ setFont(fontRefName, size) {
+ const fontObj = this.commonObjs.get(fontRefName);
+ const current = this.current;
+
+ if (!fontObj) {
+ throw new Error(`Can't find font for ${fontRefName}`);
+ }
+
+ current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+
+ if (current.fontMatrix[0] === 0 || current.fontMatrix[3] === 0) {
+ (0, _util.warn)("Invalid font matrix for font " + fontRefName);
+ }
+
+ if (size < 0) {
+ size = -size;
+ current.fontDirection = -1;
+ } else {
+ current.fontDirection = 1;
+ }
+
+ this.current.font = fontObj;
+ this.current.fontSize = size;
+
+ if (fontObj.isType3Font) {
+ return;
+ }
+
+ const name = fontObj.loadedName || "sans-serif";
+ let bold = "normal";
+
+ if (fontObj.black) {
+ bold = "900";
+ } else if (fontObj.bold) {
+ bold = "bold";
+ }
+
+ const italic = fontObj.italic ? "italic" : "normal";
+ const typeface = `"${name}", ${fontObj.fallbackName}`;
+ let browserFontSize = size;
+
+ if (size < MIN_FONT_SIZE) {
+ browserFontSize = MIN_FONT_SIZE;
+ } else if (size > MAX_FONT_SIZE) {
+ browserFontSize = MAX_FONT_SIZE;
+ }
+
+ this.current.fontSizeScale = size / browserFontSize;
+ this.ctx.font = `${italic} ${bold} ${browserFontSize}px ${typeface}`;
+ }
+
+ setTextRenderingMode(mode) {
+ this.current.textRenderingMode = mode;
+ }
+
+ setTextRise(rise) {
+ this.current.textRise = rise;
+ }
+
+ moveText(x, y) {
+ this.current.x = this.current.lineX += x;
+ this.current.y = this.current.lineY += y;
+ }
+
+ setLeadingMoveText(x, y) {
+ this.setLeading(-y);
+ this.moveText(x, y);
+ }
+
+ setTextMatrix(a, b, c, d, e, f) {
+ this.current.textMatrix = [a, b, c, d, e, f];
+ this.current.textMatrixScale = Math.hypot(a, b);
+ this.current.x = this.current.lineX = 0;
+ this.current.y = this.current.lineY = 0;
+ }
+
+ nextLine() {
+ this.moveText(0, this.current.leading);
+ }
+
+ paintChar(character, x, y, patternTransform, resetLineWidthToOne) {
+ const ctx = this.ctx;
+ const current = this.current;
+ const font = current.font;
+ const textRenderingMode = current.textRenderingMode;
+ const fontSize = current.fontSize / current.fontSizeScale;
+ const fillStrokeMode = textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+ const isAddToPathSet = !!(textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG);
+ const patternFill = current.patternFill && !font.missingFile;
+ let addToPath;
+
+ if (font.disableFontFace || isAddToPathSet || patternFill) {
+ addToPath = font.getPathGenerator(this.commonObjs, character);
+ }
+
+ if (font.disableFontFace || patternFill) {
+ ctx.save();
+ ctx.translate(x, y);
+ ctx.beginPath();
+ addToPath(ctx, fontSize);
+
+ if (patternTransform) {
+ ctx.setTransform.apply(ctx, patternTransform);
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ ctx.fill();
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ if (resetLineWidthToOne) {
+ ctx.resetTransform();
+ ctx.lineWidth = Math.floor(this._combinedScaleFactor);
+ }
+
+ ctx.stroke();
+ }
+
+ ctx.restore();
+ } else {
+ if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ ctx.fillText(character, x, y);
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ if (resetLineWidthToOne) {
+ ctx.save();
+ ctx.moveTo(x, y);
+ ctx.resetTransform();
+ ctx.lineWidth = Math.floor(this._combinedScaleFactor);
+ ctx.strokeText(character, 0, 0);
+ ctx.restore();
+ } else {
+ ctx.strokeText(character, x, y);
+ }
+ }
+ }
+
+ if (isAddToPathSet) {
+ const paths = this.pendingTextPaths || (this.pendingTextPaths = []);
+ paths.push({
+ transform: ctx.mozCurrentTransform,
+ x,
+ y,
+ fontSize,
+ addToPath
+ });
+ }
+ }
+
+ get isFontSubpixelAAEnabled() {
+ const {
+ context: ctx
+ } = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10);
+ ctx.scale(1.5, 1);
+ ctx.fillText("I", 0, 10);
+ const data = ctx.getImageData(0, 0, 10, 10).data;
+ let enabled = false;
+
+ for (let i = 3; i < data.length; i += 4) {
+ if (data[i] > 0 && data[i] < 255) {
+ enabled = true;
+ break;
+ }
+ }
+
+ return (0, _util.shadow)(this, "isFontSubpixelAAEnabled", enabled);
+ }
+
+ showText(glyphs) {
+ const current = this.current;
+ const font = current.font;
+
+ if (font.isType3Font) {
+ return this.showType3Text(glyphs);
+ }
+
+ const fontSize = current.fontSize;
+
+ if (fontSize === 0) {
+ return undefined;
+ }
+
+ const ctx = this.ctx;
+ const fontSizeScale = current.fontSizeScale;
+ const charSpacing = current.charSpacing;
+ const wordSpacing = current.wordSpacing;
+ const fontDirection = current.fontDirection;
+ const textHScale = current.textHScale * fontDirection;
+ const glyphsLength = glyphs.length;
+ const vertical = font.vertical;
+ const spacingDir = vertical ? 1 : -1;
+ const defaultVMetrics = font.defaultVMetrics;
+ const widthAdvanceScale = fontSize * current.fontMatrix[0];
+ const simpleFillText = current.textRenderingMode === _util.TextRenderingMode.FILL && !font.disableFontFace && !current.patternFill;
+ ctx.save();
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.translate(current.x, current.y + current.textRise);
+
+ if (fontDirection > 0) {
+ ctx.scale(textHScale, -1);
+ } else {
+ ctx.scale(textHScale, 1);
+ }
+
+ let patternTransform;
+
+ if (current.patternFill) {
+ ctx.save();
+ const pattern = current.fillColor.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL);
+ patternTransform = ctx.mozCurrentTransform;
+ ctx.restore();
+ ctx.fillStyle = pattern;
+ }
+
+ let lineWidth = current.lineWidth;
+ let resetLineWidthToOne = false;
+ const scale = current.textMatrixScale;
+
+ if (scale === 0 || lineWidth === 0) {
+ const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ this._cachedGetSinglePixelWidth = null;
+ lineWidth = this.getSinglePixelWidth();
+ resetLineWidthToOne = lineWidth < 0;
+ }
+ } else {
+ lineWidth /= scale;
+ }
+
+ if (fontSizeScale !== 1.0) {
+ ctx.scale(fontSizeScale, fontSizeScale);
+ lineWidth /= fontSizeScale;
+ }
+
+ ctx.lineWidth = lineWidth;
+ let x = 0,
+ i;
+
+ for (i = 0; i < glyphsLength; ++i) {
+ const glyph = glyphs[i];
+
+ if (typeof glyph === "number") {
+ x += spacingDir * glyph * fontSize / 1000;
+ continue;
+ }
+
+ let restoreNeeded = false;
+ const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ const character = glyph.fontChar;
+ const accent = glyph.accent;
+ let scaledX, scaledY;
+ let width = glyph.width;
+
+ if (vertical) {
+ const vmetric = glyph.vmetric || defaultVMetrics;
+ const vx = -(glyph.vmetric ? vmetric[1] : width * 0.5) * widthAdvanceScale;
+ const vy = vmetric[2] * widthAdvanceScale;
+ width = vmetric ? -vmetric[0] : width;
+ scaledX = vx / fontSizeScale;
+ scaledY = (x + vy) / fontSizeScale;
+ } else {
+ scaledX = x / fontSizeScale;
+ scaledY = 0;
+ }
+
+ if (font.remeasure && width > 0) {
+ const measuredWidth = ctx.measureText(character).width * 1000 / fontSize * fontSizeScale;
+
+ if (width < measuredWidth && this.isFontSubpixelAAEnabled) {
+ const characterScaleX = width / measuredWidth;
+ restoreNeeded = true;
+ ctx.save();
+ ctx.scale(characterScaleX, 1);
+ scaledX /= characterScaleX;
+ } else if (width !== measuredWidth) {
+ scaledX += (width - measuredWidth) / 2000 * fontSize / fontSizeScale;
+ }
+ }
+
+ if (this.contentVisible && (glyph.isInFont || font.missingFile)) {
+ if (simpleFillText && !accent) {
+ ctx.fillText(character, scaledX, scaledY);
+ } else {
+ this.paintChar(character, scaledX, scaledY, patternTransform, resetLineWidthToOne);
+
+ if (accent) {
+ const scaledAccentX = scaledX + fontSize * accent.offset.x / fontSizeScale;
+ const scaledAccentY = scaledY - fontSize * accent.offset.y / fontSizeScale;
+ this.paintChar(accent.fontChar, scaledAccentX, scaledAccentY, patternTransform, resetLineWidthToOne);
+ }
+ }
+ }
+
+ let charWidth;
+
+ if (vertical) {
+ charWidth = width * widthAdvanceScale - spacing * fontDirection;
+ } else {
+ charWidth = width * widthAdvanceScale + spacing * fontDirection;
+ }
+
+ x += charWidth;
+
+ if (restoreNeeded) {
+ ctx.restore();
+ }
+ }
+
+ if (vertical) {
+ current.y -= x;
+ } else {
+ current.x += x * textHScale;
+ }
+
+ ctx.restore();
+ this.compose();
+ return undefined;
+ }
+
+ showType3Text(glyphs) {
+ const ctx = this.ctx;
+ const current = this.current;
+ const font = current.font;
+ const fontSize = current.fontSize;
+ const fontDirection = current.fontDirection;
+ const spacingDir = font.vertical ? 1 : -1;
+ const charSpacing = current.charSpacing;
+ const wordSpacing = current.wordSpacing;
+ const textHScale = current.textHScale * fontDirection;
+ const fontMatrix = current.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+ const glyphsLength = glyphs.length;
+ const isTextInvisible = current.textRenderingMode === _util.TextRenderingMode.INVISIBLE;
+ let i, glyph, width, spacingLength;
+
+ if (isTextInvisible || fontSize === 0) {
+ return;
+ }
+
+ this._cachedGetSinglePixelWidth = null;
+ ctx.save();
+ ctx.transform.apply(ctx, current.textMatrix);
+ ctx.translate(current.x, current.y);
+ ctx.scale(textHScale, fontDirection);
+
+ for (i = 0; i < glyphsLength; ++i) {
+ glyph = glyphs[i];
+
+ if (typeof glyph === "number") {
+ spacingLength = spacingDir * glyph * fontSize / 1000;
+ this.ctx.translate(spacingLength, 0);
+ current.x += spacingLength * textHScale;
+ continue;
+ }
+
+ const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ const operatorList = font.charProcOperatorList[glyph.operatorListId];
+
+ if (!operatorList) {
+ (0, _util.warn)(`Type3 character "${glyph.operatorListId}" is not available.`);
+ continue;
+ }
+
+ if (this.contentVisible) {
+ this.processingType3 = glyph;
+ this.save();
+ ctx.scale(fontSize, fontSize);
+ ctx.transform.apply(ctx, fontMatrix);
+ this.executeOperatorList(operatorList);
+ this.restore();
+ }
+
+ const transformed = _util.Util.applyTransform([glyph.width, 0], fontMatrix);
+
+ width = transformed[0] * fontSize + spacing;
+ ctx.translate(width, 0);
+ current.x += width * textHScale;
+ }
+
+ ctx.restore();
+ this.processingType3 = null;
+ }
+
+ setCharWidth(xWidth, yWidth) {}
+
+ setCharWidthAndBounds(xWidth, yWidth, llx, lly, urx, ury) {
+ this.ctx.rect(llx, lly, urx - llx, ury - lly);
+ this.clip();
+ this.endPath();
+ }
+
+ getColorN_Pattern(IR) {
+ let pattern;
+
+ if (IR[0] === "TilingPattern") {
+ const color = IR[1];
+ const baseTransform = this.baseTransform || this.ctx.mozCurrentTransform.slice();
+ const canvasGraphicsFactory = {
+ createCanvasGraphics: ctx => {
+ return new CanvasGraphics(ctx, this.commonObjs, this.objs, this.canvasFactory);
+ }
+ };
+ pattern = new _pattern_helper.TilingPattern(IR, color, this.ctx, canvasGraphicsFactory, baseTransform);
+ } else {
+ pattern = this._getPattern(IR[1], IR[2]);
+ }
+
+ return pattern;
+ }
+
+ setStrokeColorN() {
+ this.current.strokeColor = this.getColorN_Pattern(arguments);
+ }
+
+ setFillColorN() {
+ this.current.fillColor = this.getColorN_Pattern(arguments);
+ this.current.patternFill = true;
+ }
+
+ setStrokeRGBColor(r, g, b) {
+ const color = _util.Util.makeHexColor(r, g, b);
+
+ this.ctx.strokeStyle = color;
+ this.current.strokeColor = color;
+ }
+
+ setFillRGBColor(r, g, b) {
+ const color = _util.Util.makeHexColor(r, g, b);
+
+ this.ctx.fillStyle = color;
+ this.current.fillColor = color;
+ this.current.patternFill = false;
+ }
+
+ _getPattern(objId, matrix = null) {
+ let pattern;
+
+ if (this.cachedPatterns.has(objId)) {
+ pattern = this.cachedPatterns.get(objId);
+ } else {
+ pattern = (0, _pattern_helper.getShadingPattern)(this.objs.get(objId));
+ this.cachedPatterns.set(objId, pattern);
+ }
+
+ if (matrix) {
+ pattern.matrix = matrix;
+ }
+
+ return pattern;
+ }
+
+ shadingFill(objId) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ const ctx = this.ctx;
+ this.save();
+
+ const pattern = this._getPattern(objId);
+
+ ctx.fillStyle = pattern.getPattern(ctx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.SHADING);
+ const inv = ctx.mozCurrentTransformInverse;
+
+ if (inv) {
+ const canvas = ctx.canvas;
+ const width = canvas.width;
+ const height = canvas.height;
+
+ const bl = _util.Util.applyTransform([0, 0], inv);
+
+ const br = _util.Util.applyTransform([0, height], inv);
+
+ const ul = _util.Util.applyTransform([width, 0], inv);
+
+ const ur = _util.Util.applyTransform([width, height], inv);
+
+ const x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+ const y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+ const x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+ const y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+ this.ctx.fillRect(x0, y0, x1 - x0, y1 - y0);
+ } else {
+ this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
+ }
+
+ this.compose(this.current.getClippedPathBoundingBox());
+ this.restore();
+ }
+
+ beginInlineImage() {
+ (0, _util.unreachable)("Should not call beginInlineImage");
+ }
+
+ beginImageData() {
+ (0, _util.unreachable)("Should not call beginImageData");
+ }
+
+ paintFormXObjectBegin(matrix, bbox) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.save();
+ this.baseTransformStack.push(this.baseTransform);
+
+ if (Array.isArray(matrix) && matrix.length === 6) {
+ this.transform.apply(this, matrix);
+ }
+
+ this.baseTransform = this.ctx.mozCurrentTransform;
+
+ if (bbox) {
+ const width = bbox[2] - bbox[0];
+ const height = bbox[3] - bbox[1];
+ this.ctx.rect(bbox[0], bbox[1], width, height);
+ this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[0], bbox[1]);
+ this.current.updatePathMinMax(this.ctx.mozCurrentTransform, bbox[2], bbox[3]);
+ this.clip();
+ this.endPath();
+ }
+ }
+
+ paintFormXObjectEnd() {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.restore();
+ this.baseTransform = this.baseTransformStack.pop();
+ }
+
+ beginGroup(group) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.save();
+
+ if (this.inSMaskMode) {
+ this.endSMaskMode();
+ this.current.activeSMask = null;
+ }
+
+ const currentCtx = this.ctx;
+
+ if (!group.isolated) {
+ (0, _util.info)("TODO: Support non-isolated groups.");
+ }
+
+ if (group.knockout) {
+ (0, _util.warn)("Knockout groups not supported.");
+ }
+
+ const currentTransform = currentCtx.mozCurrentTransform;
+
+ if (group.matrix) {
+ currentCtx.transform.apply(currentCtx, group.matrix);
+ }
+
+ if (!group.bbox) {
+ throw new Error("Bounding box is required.");
+ }
+
+ let bounds = _util.Util.getAxialAlignedBoundingBox(group.bbox, currentCtx.mozCurrentTransform);
+
+ const canvasBounds = [0, 0, currentCtx.canvas.width, currentCtx.canvas.height];
+ bounds = _util.Util.intersect(bounds, canvasBounds) || [0, 0, 0, 0];
+ const offsetX = Math.floor(bounds[0]);
+ const offsetY = Math.floor(bounds[1]);
+ let drawnWidth = Math.max(Math.ceil(bounds[2]) - offsetX, 1);
+ let drawnHeight = Math.max(Math.ceil(bounds[3]) - offsetY, 1);
+ let scaleX = 1,
+ scaleY = 1;
+
+ if (drawnWidth > MAX_GROUP_SIZE) {
+ scaleX = drawnWidth / MAX_GROUP_SIZE;
+ drawnWidth = MAX_GROUP_SIZE;
+ }
+
+ if (drawnHeight > MAX_GROUP_SIZE) {
+ scaleY = drawnHeight / MAX_GROUP_SIZE;
+ drawnHeight = MAX_GROUP_SIZE;
+ }
+
+ this.current.startNewPathAndClipBox([0, 0, drawnWidth, drawnHeight]);
+ let cacheId = "groupAt" + this.groupLevel;
+
+ if (group.smask) {
+ cacheId += "_smask_" + this.smaskCounter++ % 2;
+ }
+
+ const scratchCanvas = this.cachedCanvases.getCanvas(cacheId, drawnWidth, drawnHeight, true);
+ const groupCtx = scratchCanvas.context;
+ groupCtx.scale(1 / scaleX, 1 / scaleY);
+ groupCtx.translate(-offsetX, -offsetY);
+ groupCtx.transform.apply(groupCtx, currentTransform);
+
+ if (group.smask) {
+ this.smaskStack.push({
+ canvas: scratchCanvas.canvas,
+ context: groupCtx,
+ offsetX,
+ offsetY,
+ scaleX,
+ scaleY,
+ subtype: group.smask.subtype,
+ backdrop: group.smask.backdrop,
+ transferMap: group.smask.transferMap || null,
+ startTransformInverse: null
+ });
+ } else {
+ currentCtx.setTransform(1, 0, 0, 1, 0, 0);
+ currentCtx.translate(offsetX, offsetY);
+ currentCtx.scale(scaleX, scaleY);
+ currentCtx.save();
+ }
+
+ copyCtxState(currentCtx, groupCtx);
+ this.ctx = groupCtx;
+ this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
+ this.groupStack.push(currentCtx);
+ this.groupLevel++;
+ }
+
+ endGroup(group) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.groupLevel--;
+ const groupCtx = this.ctx;
+ const ctx = this.groupStack.pop();
+ this.ctx = ctx;
+ this.ctx.imageSmoothingEnabled = false;
+
+ if (group.smask) {
+ this.tempSMask = this.smaskStack.pop();
+ this.restore();
+ } else {
+ this.ctx.restore();
+ const currentMtx = this.ctx.mozCurrentTransform;
+ this.restore();
+ this.ctx.save();
+ this.ctx.setTransform.apply(this.ctx, currentMtx);
+
+ const dirtyBox = _util.Util.getAxialAlignedBoundingBox([0, 0, groupCtx.canvas.width, groupCtx.canvas.height], currentMtx);
+
+ this.ctx.drawImage(groupCtx.canvas, 0, 0);
+ this.ctx.restore();
+ this.compose(dirtyBox);
+ }
+ }
+
+ beginAnnotations() {
+ this.save();
+
+ if (this.baseTransform) {
+ this.ctx.setTransform.apply(this.ctx, this.baseTransform);
+ }
+ }
+
+ endAnnotations() {
+ this.restore();
+ }
+
+ beginAnnotation(id, rect, transform, matrix, hasOwnCanvas) {
+ this.save();
+
+ if (Array.isArray(rect) && rect.length === 4) {
+ const width = rect[2] - rect[0];
+ const height = rect[3] - rect[1];
+
+ if (hasOwnCanvas && this.annotationCanvasMap) {
+ transform = transform.slice();
+ transform[4] -= rect[0];
+ transform[5] -= rect[1];
+ rect = rect.slice();
+ rect[0] = rect[1] = 0;
+ rect[2] = width;
+ rect[3] = height;
+
+ const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(this.ctx.mozCurrentTransform);
+
+ const {
+ viewportScale
+ } = this;
+ const canvasWidth = Math.ceil(width * this.outputScaleX * viewportScale);
+ const canvasHeight = Math.ceil(height * this.outputScaleY * viewportScale);
+ this.annotationCanvas = this.canvasFactory.create(canvasWidth, canvasHeight);
+ const {
+ canvas,
+ context
+ } = this.annotationCanvas;
+ canvas.style.width = `calc(${width}px * var(--viewport-scale-factor))`;
+ canvas.style.height = `calc(${height}px * var(--viewport-scale-factor))`;
+ this.annotationCanvasMap.set(id, canvas);
+ this.annotationCanvas.savedCtx = this.ctx;
+ this.ctx = context;
+ this.ctx.setTransform(scaleX, 0, 0, -scaleY, 0, height * scaleY);
+ addContextCurrentTransform(this.ctx);
+ resetCtxToDefault(this.ctx);
+ } else {
+ resetCtxToDefault(this.ctx);
+ this.ctx.rect(rect[0], rect[1], width, height);
+ this.clip();
+ this.endPath();
+ }
+ }
+
+ this.current = new CanvasExtraState(this.ctx.canvas.width, this.ctx.canvas.height);
+ this.transform.apply(this, transform);
+ this.transform.apply(this, matrix);
+ }
+
+ endAnnotation() {
+ if (this.annotationCanvas) {
+ this.ctx = this.annotationCanvas.savedCtx;
+ delete this.annotationCanvas.savedCtx;
+ delete this.annotationCanvas;
+ }
+
+ this.restore();
+ }
+
+ paintImageMaskXObject(img) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ const ctx = this.ctx;
+ const width = img.width,
+ height = img.height;
+ const glyph = this.processingType3;
+
+ if (COMPILE_TYPE3_GLYPHS && glyph && glyph.compiled === undefined) {
+ if (width <= MAX_SIZE_TO_COMPILE && height <= MAX_SIZE_TO_COMPILE) {
+ glyph.compiled = compileType3Glyph({
+ data: img.data,
+ width,
+ height
+ });
+ } else {
+ glyph.compiled = null;
+ }
+ }
+
+ if (glyph?.compiled) {
+ glyph.compiled(ctx);
+ return;
+ }
+
+ const mask = this._createMaskCanvas(img);
+
+ const maskCanvas = mask.canvas;
+ ctx.save();
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+ ctx.drawImage(maskCanvas, mask.offsetX, mask.offsetY);
+ ctx.restore();
+ this.compose();
+ }
+
+ paintImageMaskXObjectRepeat(imgData, scaleX, skewX = 0, skewY = 0, scaleY, positions) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ const ctx = this.ctx;
+ ctx.save();
+ const currentTransform = ctx.mozCurrentTransform;
+ ctx.transform(scaleX, skewX, skewY, scaleY, 0, 0);
+
+ const mask = this._createMaskCanvas(imgData);
+
+ ctx.setTransform(1, 0, 0, 1, 0, 0);
+
+ for (let i = 0, ii = positions.length; i < ii; i += 2) {
+ const trans = _util.Util.transform(currentTransform, [scaleX, skewX, skewY, scaleY, positions[i], positions[i + 1]]);
+
+ const [x, y] = _util.Util.applyTransform([0, 0], trans);
+
+ ctx.drawImage(mask.canvas, x, y);
+ }
+
+ ctx.restore();
+ this.compose();
+ }
+
+ paintImageMaskXObjectGroup(images) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ const ctx = this.ctx;
+ const fillColor = this.current.fillColor;
+ const isPatternFill = this.current.patternFill;
+
+ for (let i = 0, ii = images.length; i < ii; i++) {
+ const image = images[i];
+ const width = image.width,
+ height = image.height;
+ const maskCanvas = this.cachedCanvases.getCanvas("maskCanvas", width, height);
+ const maskCtx = maskCanvas.context;
+ maskCtx.save();
+ putBinaryImageMask(maskCtx, image);
+ maskCtx.globalCompositeOperation = "source-in";
+ maskCtx.fillStyle = isPatternFill ? fillColor.getPattern(maskCtx, this, ctx.mozCurrentTransformInverse, _pattern_helper.PathType.FILL) : fillColor;
+ maskCtx.fillRect(0, 0, width, height);
+ maskCtx.restore();
+ ctx.save();
+ ctx.transform.apply(ctx, image.transform);
+ ctx.scale(1, -1);
+ ctx.drawImage(maskCanvas.canvas, 0, 0, width, height, 0, -1, 1, 1);
+ ctx.restore();
+ }
+
+ this.compose();
+ }
+
+ paintImageXObject(objId) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)("Dependent image isn't ready yet");
+ return;
+ }
+
+ this.paintInlineImageXObject(imgData);
+ }
+
+ paintImageXObjectRepeat(objId, scaleX, scaleY, positions) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)("Dependent image isn't ready yet");
+ return;
+ }
+
+ const width = imgData.width;
+ const height = imgData.height;
+ const map = [];
+
+ for (let i = 0, ii = positions.length; i < ii; i += 2) {
+ map.push({
+ transform: [scaleX, 0, 0, scaleY, positions[i], positions[i + 1]],
+ x: 0,
+ y: 0,
+ w: width,
+ h: height
+ });
+ }
+
+ this.paintInlineImageXObjectGroup(imgData, map);
+ }
+
+ paintInlineImageXObject(imgData) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ const width = imgData.width;
+ const height = imgData.height;
+ const ctx = this.ctx;
+ this.save();
+ ctx.scale(1 / width, -1 / height);
+ let imgToPaint;
+
+ if (typeof HTMLElement === "function" && imgData instanceof HTMLElement || !imgData.data) {
+ imgToPaint = imgData;
+ } else {
+ const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", width, height);
+ const tmpCtx = tmpCanvas.context;
+ putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);
+ imgToPaint = tmpCanvas.canvas;
+ }
+
+ const scaled = this._scaleImage(imgToPaint, ctx.mozCurrentTransformInverse);
+
+ ctx.imageSmoothingEnabled = getImageSmoothingEnabled(ctx.mozCurrentTransform, imgData.interpolate);
+ ctx.drawImage(scaled.img, 0, 0, scaled.paintWidth, scaled.paintHeight, 0, -height, width, height);
+
+ if (this.imageLayer) {
+ const position = this.getCanvasPosition(0, -height);
+ this.imageLayer.appendImage({
+ imgData,
+ left: position[0],
+ top: position[1],
+ width: width / ctx.mozCurrentTransformInverse[0],
+ height: height / ctx.mozCurrentTransformInverse[3]
+ });
+ }
+
+ this.compose();
+ this.restore();
+ }
+
+ paintInlineImageXObjectGroup(imgData, map) {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ const ctx = this.ctx;
+ const w = imgData.width;
+ const h = imgData.height;
+ const tmpCanvas = this.cachedCanvases.getCanvas("inlineImage", w, h);
+ const tmpCtx = tmpCanvas.context;
+ putBinaryImageData(tmpCtx, imgData, this.current.transferMaps);
+
+ for (let i = 0, ii = map.length; i < ii; i++) {
+ const entry = map[i];
+ ctx.save();
+ ctx.transform.apply(ctx, entry.transform);
+ ctx.scale(1, -1);
+ ctx.drawImage(tmpCanvas.canvas, entry.x, entry.y, entry.w, entry.h, 0, -1, 1, 1);
+
+ if (this.imageLayer) {
+ const position = this.getCanvasPosition(entry.x, entry.y);
+ this.imageLayer.appendImage({
+ imgData,
+ left: position[0],
+ top: position[1],
+ width: w,
+ height: h
+ });
+ }
+
+ ctx.restore();
+ }
+
+ this.compose();
+ }
+
+ paintSolidColorImageMask() {
+ if (!this.contentVisible) {
+ return;
+ }
+
+ this.ctx.fillRect(0, 0, 1, 1);
+ this.compose();
+ }
+
+ markPoint(tag) {}
+
+ markPointProps(tag, properties) {}
+
+ beginMarkedContent(tag) {
+ this.markedContentStack.push({
+ visible: true
+ });
+ }
+
+ beginMarkedContentProps(tag, properties) {
+ if (tag === "OC") {
+ this.markedContentStack.push({
+ visible: this.optionalContentConfig.isVisible(properties)
+ });
+ } else {
+ this.markedContentStack.push({
+ visible: true
+ });
+ }
+
+ this.contentVisible = this.isContentVisible();
+ }
+
+ endMarkedContent() {
+ this.markedContentStack.pop();
+ this.contentVisible = this.isContentVisible();
+ }
+
+ beginCompat() {}
+
+ endCompat() {}
+
+ consumePath(clipBox) {
+ if (this.pendingClip) {
+ this.current.updateClipFromPath();
+ }
+
+ if (!this.pendingClip) {
+ this.compose(clipBox);
+ }
+
+ const ctx = this.ctx;
+
+ if (this.pendingClip) {
+ if (this.pendingClip === EO_CLIP) {
+ ctx.clip("evenodd");
+ } else {
+ ctx.clip();
+ }
+
+ this.pendingClip = null;
+ }
+
+ this.current.startNewPathAndClipBox(this.current.clipBox);
+ ctx.beginPath();
+ }
+
+ getSinglePixelWidth() {
+ if (this._cachedGetSinglePixelWidth === null) {
+ const m = this.ctx.mozCurrentTransform;
+ const absDet = Math.abs(m[0] * m[3] - m[2] * m[1]);
+ const sqNorm1 = m[0] ** 2 + m[2] ** 2;
+ const sqNorm2 = m[1] ** 2 + m[3] ** 2;
+ const pixelHeight = Math.sqrt(Math.max(sqNorm1, sqNorm2)) / absDet;
+
+ if (sqNorm1 !== sqNorm2 && this._combinedScaleFactor * pixelHeight > 1) {
+ this._cachedGetSinglePixelWidth = -(this._combinedScaleFactor * pixelHeight);
+ } else if (absDet > Number.EPSILON) {
+ this._cachedGetSinglePixelWidth = pixelHeight;
+ } else {
+ this._cachedGetSinglePixelWidth = 1;
+ }
+ }
+
+ return this._cachedGetSinglePixelWidth;
+ }
+
+ getCanvasPosition(x, y) {
+ const transform = this.ctx.mozCurrentTransform;
+ return [transform[0] * x + transform[2] * y + transform[4], transform[1] * x + transform[3] * y + transform[5]];
+ }
+
+ isContentVisible() {
+ for (let i = this.markedContentStack.length - 1; i >= 0; i--) {
+ if (!this.markedContentStack[i].visible) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+}
+
+exports.CanvasGraphics = CanvasGraphics;
+
+for (const op in _util.OPS) {
+ if (CanvasGraphics.prototype[op] !== undefined) {
+ CanvasGraphics.prototype[_util.OPS[op]] = CanvasGraphics.prototype[op];
+ }
+}
+
+/***/ }),
+/* 11 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.TilingPattern = exports.PathType = void 0;
+exports.getShadingPattern = getShadingPattern;
+
+var _util = __w_pdfjs_require__(1);
+
+const PathType = {
+ FILL: "Fill",
+ STROKE: "Stroke",
+ SHADING: "Shading"
+};
+exports.PathType = PathType;
+
+function applyBoundingBox(ctx, bbox) {
+ if (!bbox || typeof Path2D === "undefined") {
+ return;
+ }
+
+ const width = bbox[2] - bbox[0];
+ const height = bbox[3] - bbox[1];
+ const region = new Path2D();
+ region.rect(bbox[0], bbox[1], width, height);
+ ctx.clip(region);
+}
+
+class BaseShadingPattern {
+ constructor() {
+ if (this.constructor === BaseShadingPattern) {
+ (0, _util.unreachable)("Cannot initialize BaseShadingPattern.");
+ }
+ }
+
+ getPattern() {
+ (0, _util.unreachable)("Abstract method `getPattern` called.");
+ }
+
+}
+
+class RadialAxialShadingPattern extends BaseShadingPattern {
+ constructor(IR) {
+ super();
+ this._type = IR[1];
+ this._bbox = IR[2];
+ this._colorStops = IR[3];
+ this._p0 = IR[4];
+ this._p1 = IR[5];
+ this._r0 = IR[6];
+ this._r1 = IR[7];
+ this.matrix = null;
+ }
+
+ _createGradient(ctx) {
+ let grad;
+
+ if (this._type === "axial") {
+ grad = ctx.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]);
+ } else if (this._type === "radial") {
+ grad = ctx.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1);
+ }
+
+ for (const colorStop of this._colorStops) {
+ grad.addColorStop(colorStop[0], colorStop[1]);
+ }
+
+ return grad;
+ }
+
+ getPattern(ctx, owner, inverse, pathType) {
+ let pattern;
+
+ if (pathType === PathType.STROKE || pathType === PathType.FILL) {
+ const ownerBBox = owner.current.getClippedPathBoundingBox(pathType, ctx.mozCurrentTransform) || [0, 0, 0, 0];
+ const width = Math.ceil(ownerBBox[2] - ownerBBox[0]) || 1;
+ const height = Math.ceil(ownerBBox[3] - ownerBBox[1]) || 1;
+ const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", width, height, true);
+ const tmpCtx = tmpCanvas.context;
+ tmpCtx.clearRect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
+ tmpCtx.beginPath();
+ tmpCtx.rect(0, 0, tmpCtx.canvas.width, tmpCtx.canvas.height);
+ tmpCtx.translate(-ownerBBox[0], -ownerBBox[1]);
+ inverse = _util.Util.transform(inverse, [1, 0, 0, 1, ownerBBox[0], ownerBBox[1]]);
+ tmpCtx.transform.apply(tmpCtx, owner.baseTransform);
+
+ if (this.matrix) {
+ tmpCtx.transform.apply(tmpCtx, this.matrix);
+ }
+
+ applyBoundingBox(tmpCtx, this._bbox);
+ tmpCtx.fillStyle = this._createGradient(tmpCtx);
+ tmpCtx.fill();
+ pattern = ctx.createPattern(tmpCanvas.canvas, "no-repeat");
+ const domMatrix = new DOMMatrix(inverse);
+
+ try {
+ pattern.setTransform(domMatrix);
+ } catch (ex) {
+ (0, _util.warn)(`RadialAxialShadingPattern.getPattern: "${ex?.message}".`);
+ }
+ } else {
+ applyBoundingBox(ctx, this._bbox);
+ pattern = this._createGradient(ctx);
+ }
+
+ return pattern;
+ }
+
+}
+
+function drawTriangle(data, context, p1, p2, p3, c1, c2, c3) {
+ const coords = context.coords,
+ colors = context.colors;
+ const bytes = data.data,
+ rowSize = data.width * 4;
+ let tmp;
+
+ if (coords[p1 + 1] > coords[p2 + 1]) {
+ tmp = p1;
+ p1 = p2;
+ p2 = tmp;
+ tmp = c1;
+ c1 = c2;
+ c2 = tmp;
+ }
+
+ if (coords[p2 + 1] > coords[p3 + 1]) {
+ tmp = p2;
+ p2 = p3;
+ p3 = tmp;
+ tmp = c2;
+ c2 = c3;
+ c3 = tmp;
+ }
+
+ if (coords[p1 + 1] > coords[p2 + 1]) {
+ tmp = p1;
+ p1 = p2;
+ p2 = tmp;
+ tmp = c1;
+ c1 = c2;
+ c2 = tmp;
+ }
+
+ const x1 = (coords[p1] + context.offsetX) * context.scaleX;
+ const y1 = (coords[p1 + 1] + context.offsetY) * context.scaleY;
+ const x2 = (coords[p2] + context.offsetX) * context.scaleX;
+ const y2 = (coords[p2 + 1] + context.offsetY) * context.scaleY;
+ const x3 = (coords[p3] + context.offsetX) * context.scaleX;
+ const y3 = (coords[p3 + 1] + context.offsetY) * context.scaleY;
+
+ if (y1 >= y3) {
+ return;
+ }
+
+ const c1r = colors[c1],
+ c1g = colors[c1 + 1],
+ c1b = colors[c1 + 2];
+ const c2r = colors[c2],
+ c2g = colors[c2 + 1],
+ c2b = colors[c2 + 2];
+ const c3r = colors[c3],
+ c3g = colors[c3 + 1],
+ c3b = colors[c3 + 2];
+ const minY = Math.round(y1),
+ maxY = Math.round(y3);
+ let xa, car, cag, cab;
+ let xb, cbr, cbg, cbb;
+
+ for (let y = minY; y <= maxY; y++) {
+ if (y < y2) {
+ let k;
+
+ if (y < y1) {
+ k = 0;
+ } else {
+ k = (y1 - y) / (y1 - y2);
+ }
+
+ xa = x1 - (x1 - x2) * k;
+ car = c1r - (c1r - c2r) * k;
+ cag = c1g - (c1g - c2g) * k;
+ cab = c1b - (c1b - c2b) * k;
+ } else {
+ let k;
+
+ if (y > y3) {
+ k = 1;
+ } else if (y2 === y3) {
+ k = 0;
+ } else {
+ k = (y2 - y) / (y2 - y3);
+ }
+
+ xa = x2 - (x2 - x3) * k;
+ car = c2r - (c2r - c3r) * k;
+ cag = c2g - (c2g - c3g) * k;
+ cab = c2b - (c2b - c3b) * k;
+ }
+
+ let k;
+
+ if (y < y1) {
+ k = 0;
+ } else if (y > y3) {
+ k = 1;
+ } else {
+ k = (y1 - y) / (y1 - y3);
+ }
+
+ xb = x1 - (x1 - x3) * k;
+ cbr = c1r - (c1r - c3r) * k;
+ cbg = c1g - (c1g - c3g) * k;
+ cbb = c1b - (c1b - c3b) * k;
+ const x1_ = Math.round(Math.min(xa, xb));
+ const x2_ = Math.round(Math.max(xa, xb));
+ let j = rowSize * y + x1_ * 4;
+
+ for (let x = x1_; x <= x2_; x++) {
+ k = (xa - x) / (xa - xb);
+
+ if (k < 0) {
+ k = 0;
+ } else if (k > 1) {
+ k = 1;
+ }
+
+ bytes[j++] = car - (car - cbr) * k | 0;
+ bytes[j++] = cag - (cag - cbg) * k | 0;
+ bytes[j++] = cab - (cab - cbb) * k | 0;
+ bytes[j++] = 255;
+ }
+ }
+}
+
+function drawFigure(data, figure, context) {
+ const ps = figure.coords;
+ const cs = figure.colors;
+ let i, ii;
+
+ switch (figure.type) {
+ case "lattice":
+ const verticesPerRow = figure.verticesPerRow;
+ const rows = Math.floor(ps.length / verticesPerRow) - 1;
+ const cols = verticesPerRow - 1;
+
+ for (i = 0; i < rows; i++) {
+ let q = i * verticesPerRow;
+
+ for (let j = 0; j < cols; j++, q++) {
+ drawTriangle(data, context, ps[q], ps[q + 1], ps[q + verticesPerRow], cs[q], cs[q + 1], cs[q + verticesPerRow]);
+ drawTriangle(data, context, ps[q + verticesPerRow + 1], ps[q + 1], ps[q + verticesPerRow], cs[q + verticesPerRow + 1], cs[q + 1], cs[q + verticesPerRow]);
+ }
+ }
+
+ break;
+
+ case "triangles":
+ for (i = 0, ii = ps.length; i < ii; i += 3) {
+ drawTriangle(data, context, ps[i], ps[i + 1], ps[i + 2], cs[i], cs[i + 1], cs[i + 2]);
+ }
+
+ break;
+
+ default:
+ throw new Error("illegal figure");
+ }
+}
+
+class MeshShadingPattern extends BaseShadingPattern {
+ constructor(IR) {
+ super();
+ this._coords = IR[2];
+ this._colors = IR[3];
+ this._figures = IR[4];
+ this._bounds = IR[5];
+ this._bbox = IR[7];
+ this._background = IR[8];
+ this.matrix = null;
+ }
+
+ _createMeshCanvas(combinedScale, backgroundColor, cachedCanvases) {
+ const EXPECTED_SCALE = 1.1;
+ const MAX_PATTERN_SIZE = 3000;
+ const BORDER_SIZE = 2;
+ const offsetX = Math.floor(this._bounds[0]);
+ const offsetY = Math.floor(this._bounds[1]);
+ const boundsWidth = Math.ceil(this._bounds[2]) - offsetX;
+ const boundsHeight = Math.ceil(this._bounds[3]) - offsetY;
+ const width = Math.min(Math.ceil(Math.abs(boundsWidth * combinedScale[0] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+ const height = Math.min(Math.ceil(Math.abs(boundsHeight * combinedScale[1] * EXPECTED_SCALE)), MAX_PATTERN_SIZE);
+ const scaleX = boundsWidth / width;
+ const scaleY = boundsHeight / height;
+ const context = {
+ coords: this._coords,
+ colors: this._colors,
+ offsetX: -offsetX,
+ offsetY: -offsetY,
+ scaleX: 1 / scaleX,
+ scaleY: 1 / scaleY
+ };
+ const paddedWidth = width + BORDER_SIZE * 2;
+ const paddedHeight = height + BORDER_SIZE * 2;
+ const tmpCanvas = cachedCanvases.getCanvas("mesh", paddedWidth, paddedHeight, false);
+ const tmpCtx = tmpCanvas.context;
+ const data = tmpCtx.createImageData(width, height);
+
+ if (backgroundColor) {
+ const bytes = data.data;
+
+ for (let i = 0, ii = bytes.length; i < ii; i += 4) {
+ bytes[i] = backgroundColor[0];
+ bytes[i + 1] = backgroundColor[1];
+ bytes[i + 2] = backgroundColor[2];
+ bytes[i + 3] = 255;
+ }
+ }
+
+ for (const figure of this._figures) {
+ drawFigure(data, figure, context);
+ }
+
+ tmpCtx.putImageData(data, BORDER_SIZE, BORDER_SIZE);
+ const canvas = tmpCanvas.canvas;
+ return {
+ canvas,
+ offsetX: offsetX - BORDER_SIZE * scaleX,
+ offsetY: offsetY - BORDER_SIZE * scaleY,
+ scaleX,
+ scaleY
+ };
+ }
+
+ getPattern(ctx, owner, inverse, pathType) {
+ applyBoundingBox(ctx, this._bbox);
+ let scale;
+
+ if (pathType === PathType.SHADING) {
+ scale = _util.Util.singularValueDecompose2dScale(ctx.mozCurrentTransform);
+ } else {
+ scale = _util.Util.singularValueDecompose2dScale(owner.baseTransform);
+
+ if (this.matrix) {
+ const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
+
+ scale = [scale[0] * matrixScale[0], scale[1] * matrixScale[1]];
+ }
+ }
+
+ const temporaryPatternCanvas = this._createMeshCanvas(scale, pathType === PathType.SHADING ? null : this._background, owner.cachedCanvases);
+
+ if (pathType !== PathType.SHADING) {
+ ctx.setTransform.apply(ctx, owner.baseTransform);
+
+ if (this.matrix) {
+ ctx.transform.apply(ctx, this.matrix);
+ }
+ }
+
+ ctx.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
+ ctx.scale(temporaryPatternCanvas.scaleX, temporaryPatternCanvas.scaleY);
+ return ctx.createPattern(temporaryPatternCanvas.canvas, "no-repeat");
+ }
+
+}
+
+class DummyShadingPattern extends BaseShadingPattern {
+ getPattern() {
+ return "hotpink";
+ }
+
+}
+
+function getShadingPattern(IR) {
+ switch (IR[0]) {
+ case "RadialAxial":
+ return new RadialAxialShadingPattern(IR);
+
+ case "Mesh":
+ return new MeshShadingPattern(IR);
+
+ case "Dummy":
+ return new DummyShadingPattern();
+ }
+
+ throw new Error(`Unknown IR type: ${IR[0]}`);
+}
+
+const PaintType = {
+ COLORED: 1,
+ UNCOLORED: 2
+};
+
+class TilingPattern {
+ static get MAX_PATTERN_SIZE() {
+ return (0, _util.shadow)(this, "MAX_PATTERN_SIZE", 3000);
+ }
+
+ constructor(IR, color, ctx, canvasGraphicsFactory, baseTransform) {
+ this.operatorList = IR[2];
+ this.matrix = IR[3] || [1, 0, 0, 1, 0, 0];
+ this.bbox = IR[4];
+ this.xstep = IR[5];
+ this.ystep = IR[6];
+ this.paintType = IR[7];
+ this.tilingType = IR[8];
+ this.color = color;
+ this.ctx = ctx;
+ this.canvasGraphicsFactory = canvasGraphicsFactory;
+ this.baseTransform = baseTransform;
+ }
+
+ createPatternCanvas(owner) {
+ const operatorList = this.operatorList;
+ const bbox = this.bbox;
+ const xstep = this.xstep;
+ const ystep = this.ystep;
+ const paintType = this.paintType;
+ const tilingType = this.tilingType;
+ const color = this.color;
+ const canvasGraphicsFactory = this.canvasGraphicsFactory;
+ (0, _util.info)("TilingType: " + tilingType);
+ const x0 = bbox[0],
+ y0 = bbox[1],
+ x1 = bbox[2],
+ y1 = bbox[3];
+
+ const matrixScale = _util.Util.singularValueDecompose2dScale(this.matrix);
+
+ const curMatrixScale = _util.Util.singularValueDecompose2dScale(this.baseTransform);
+
+ const combinedScale = [matrixScale[0] * curMatrixScale[0], matrixScale[1] * curMatrixScale[1]];
+ const dimx = this.getSizeAndScale(xstep, this.ctx.canvas.width, combinedScale[0]);
+ const dimy = this.getSizeAndScale(ystep, this.ctx.canvas.height, combinedScale[1]);
+ const tmpCanvas = owner.cachedCanvases.getCanvas("pattern", dimx.size, dimy.size, true);
+ const tmpCtx = tmpCanvas.context;
+ const graphics = canvasGraphicsFactory.createCanvasGraphics(tmpCtx);
+ graphics.groupLevel = owner.groupLevel;
+ this.setFillAndStrokeStyleToContext(graphics, paintType, color);
+ let adjustedX0 = x0;
+ let adjustedY0 = y0;
+ let adjustedX1 = x1;
+ let adjustedY1 = y1;
+
+ if (x0 < 0) {
+ adjustedX0 = 0;
+ adjustedX1 += Math.abs(x0);
+ }
+
+ if (y0 < 0) {
+ adjustedY0 = 0;
+ adjustedY1 += Math.abs(y0);
+ }
+
+ tmpCtx.translate(-(dimx.scale * adjustedX0), -(dimy.scale * adjustedY0));
+ graphics.transform(dimx.scale, 0, 0, dimy.scale, 0, 0);
+ tmpCtx.save();
+ this.clipBbox(graphics, adjustedX0, adjustedY0, adjustedX1, adjustedY1);
+ graphics.baseTransform = graphics.ctx.mozCurrentTransform.slice();
+ graphics.executeOperatorList(operatorList);
+ graphics.endDrawing();
+ return {
+ canvas: tmpCanvas.canvas,
+ scaleX: dimx.scale,
+ scaleY: dimy.scale,
+ offsetX: adjustedX0,
+ offsetY: adjustedY0
+ };
+ }
+
+ getSizeAndScale(step, realOutputSize, scale) {
+ step = Math.abs(step);
+ const maxSize = Math.max(TilingPattern.MAX_PATTERN_SIZE, realOutputSize);
+ let size = Math.ceil(step * scale);
+
+ if (size >= maxSize) {
+ size = maxSize;
+ } else {
+ scale = size / step;
+ }
+
+ return {
+ scale,
+ size
+ };
+ }
+
+ clipBbox(graphics, x0, y0, x1, y1) {
+ const bboxWidth = x1 - x0;
+ const bboxHeight = y1 - y0;
+ graphics.ctx.rect(x0, y0, bboxWidth, bboxHeight);
+ graphics.clip();
+ graphics.endPath();
+ }
+
+ setFillAndStrokeStyleToContext(graphics, paintType, color) {
+ const context = graphics.ctx,
+ current = graphics.current;
+
+ switch (paintType) {
+ case PaintType.COLORED:
+ const ctx = this.ctx;
+ context.fillStyle = ctx.fillStyle;
+ context.strokeStyle = ctx.strokeStyle;
+ current.fillColor = ctx.fillStyle;
+ current.strokeColor = ctx.strokeStyle;
+ break;
+
+ case PaintType.UNCOLORED:
+ const cssColor = _util.Util.makeHexColor(color[0], color[1], color[2]);
+
+ context.fillStyle = cssColor;
+ context.strokeStyle = cssColor;
+ current.fillColor = cssColor;
+ current.strokeColor = cssColor;
+ break;
+
+ default:
+ throw new _util.FormatError(`Unsupported paint type: ${paintType}`);
+ }
+ }
+
+ getPattern(ctx, owner, inverse, pathType) {
+ let matrix = inverse;
+
+ if (pathType !== PathType.SHADING) {
+ matrix = _util.Util.transform(matrix, owner.baseTransform);
+
+ if (this.matrix) {
+ matrix = _util.Util.transform(matrix, this.matrix);
+ }
+ }
+
+ const temporaryPatternCanvas = this.createPatternCanvas(owner);
+ let domMatrix = new DOMMatrix(matrix);
+ domMatrix = domMatrix.translate(temporaryPatternCanvas.offsetX, temporaryPatternCanvas.offsetY);
+ domMatrix = domMatrix.scale(1 / temporaryPatternCanvas.scaleX, 1 / temporaryPatternCanvas.scaleY);
+ const pattern = ctx.createPattern(temporaryPatternCanvas.canvas, "repeat");
+
+ try {
+ pattern.setTransform(domMatrix);
+ } catch (ex) {
+ (0, _util.warn)(`TilingPattern.getPattern: "${ex?.message}".`);
+ }
+
+ return pattern;
+ }
+
+}
+
+exports.TilingPattern = TilingPattern;
+
+/***/ }),
+/* 12 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.GlobalWorkerOptions = void 0;
+const GlobalWorkerOptions = Object.create(null);
+exports.GlobalWorkerOptions = GlobalWorkerOptions;
+GlobalWorkerOptions.workerPort = GlobalWorkerOptions.workerPort === undefined ? null : GlobalWorkerOptions.workerPort;
+GlobalWorkerOptions.workerSrc = GlobalWorkerOptions.workerSrc === undefined ? "" : GlobalWorkerOptions.workerSrc;
+
+/***/ }),
+/* 13 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.MessageHandler = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+const CallbackKind = {
+ UNKNOWN: 0,
+ DATA: 1,
+ ERROR: 2
+};
+const StreamKind = {
+ UNKNOWN: 0,
+ CANCEL: 1,
+ CANCEL_COMPLETE: 2,
+ CLOSE: 3,
+ ENQUEUE: 4,
+ ERROR: 5,
+ PULL: 6,
+ PULL_COMPLETE: 7,
+ START_COMPLETE: 8
+};
+
+function wrapReason(reason) {
+ if (!(reason instanceof Error || typeof reason === "object" && reason !== null)) {
+ (0, _util.unreachable)('wrapReason: Expected "reason" to be a (possibly cloned) Error.');
+ }
+
+ switch (reason.name) {
+ case "AbortException":
+ return new _util.AbortException(reason.message);
+
+ case "MissingPDFException":
+ return new _util.MissingPDFException(reason.message);
+
+ case "PasswordException":
+ return new _util.PasswordException(reason.message, reason.code);
+
+ case "UnexpectedResponseException":
+ return new _util.UnexpectedResponseException(reason.message, reason.status);
+
+ case "UnknownErrorException":
+ return new _util.UnknownErrorException(reason.message, reason.details);
+
+ default:
+ return new _util.UnknownErrorException(reason.message, reason.toString());
+ }
+}
+
+class MessageHandler {
+ constructor(sourceName, targetName, comObj) {
+ this.sourceName = sourceName;
+ this.targetName = targetName;
+ this.comObj = comObj;
+ this.callbackId = 1;
+ this.streamId = 1;
+ this.streamSinks = Object.create(null);
+ this.streamControllers = Object.create(null);
+ this.callbackCapabilities = Object.create(null);
+ this.actionHandler = Object.create(null);
+
+ this._onComObjOnMessage = event => {
+ const data = event.data;
+
+ if (data.targetName !== this.sourceName) {
+ return;
+ }
+
+ if (data.stream) {
+ this._processStreamMessage(data);
+
+ return;
+ }
+
+ if (data.callback) {
+ const callbackId = data.callbackId;
+ const capability = this.callbackCapabilities[callbackId];
+
+ if (!capability) {
+ throw new Error(`Cannot resolve callback ${callbackId}`);
+ }
+
+ delete this.callbackCapabilities[callbackId];
+
+ if (data.callback === CallbackKind.DATA) {
+ capability.resolve(data.data);
+ } else if (data.callback === CallbackKind.ERROR) {
+ capability.reject(wrapReason(data.reason));
+ } else {
+ throw new Error("Unexpected callback case");
+ }
+
+ return;
+ }
+
+ const action = this.actionHandler[data.action];
+
+ if (!action) {
+ throw new Error(`Unknown action from worker: ${data.action}`);
+ }
+
+ if (data.callbackId) {
+ const cbSourceName = this.sourceName;
+ const cbTargetName = data.sourceName;
+ new Promise(function (resolve) {
+ resolve(action(data.data));
+ }).then(function (result) {
+ comObj.postMessage({
+ sourceName: cbSourceName,
+ targetName: cbTargetName,
+ callback: CallbackKind.DATA,
+ callbackId: data.callbackId,
+ data: result
+ });
+ }, function (reason) {
+ comObj.postMessage({
+ sourceName: cbSourceName,
+ targetName: cbTargetName,
+ callback: CallbackKind.ERROR,
+ callbackId: data.callbackId,
+ reason: wrapReason(reason)
+ });
+ });
+ return;
+ }
+
+ if (data.streamId) {
+ this._createStreamSink(data);
+
+ return;
+ }
+
+ action(data.data);
+ };
+
+ comObj.addEventListener("message", this._onComObjOnMessage);
+ }
+
+ on(actionName, handler) {
+ const ah = this.actionHandler;
+
+ if (ah[actionName]) {
+ throw new Error(`There is already an actionName called "${actionName}"`);
+ }
+
+ ah[actionName] = handler;
+ }
+
+ send(actionName, data, transfers) {
+ this.comObj.postMessage({
+ sourceName: this.sourceName,
+ targetName: this.targetName,
+ action: actionName,
+ data
+ }, transfers);
+ }
+
+ sendWithPromise(actionName, data, transfers) {
+ const callbackId = this.callbackId++;
+ const capability = (0, _util.createPromiseCapability)();
+ this.callbackCapabilities[callbackId] = capability;
+
+ try {
+ this.comObj.postMessage({
+ sourceName: this.sourceName,
+ targetName: this.targetName,
+ action: actionName,
+ callbackId,
+ data
+ }, transfers);
+ } catch (ex) {
+ capability.reject(ex);
+ }
+
+ return capability.promise;
+ }
+
+ sendWithStream(actionName, data, queueingStrategy, transfers) {
+ const streamId = this.streamId++,
+ sourceName = this.sourceName,
+ targetName = this.targetName,
+ comObj = this.comObj;
+ return new ReadableStream({
+ start: controller => {
+ const startCapability = (0, _util.createPromiseCapability)();
+ this.streamControllers[streamId] = {
+ controller,
+ startCall: startCapability,
+ pullCall: null,
+ cancelCall: null,
+ isClosed: false
+ };
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ action: actionName,
+ streamId,
+ data,
+ desiredSize: controller.desiredSize
+ }, transfers);
+ return startCapability.promise;
+ },
+ pull: controller => {
+ const pullCapability = (0, _util.createPromiseCapability)();
+ this.streamControllers[streamId].pullCall = pullCapability;
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL,
+ streamId,
+ desiredSize: controller.desiredSize
+ });
+ return pullCapability.promise;
+ },
+ cancel: reason => {
+ (0, _util.assert)(reason instanceof Error, "cancel must have a valid reason");
+ const cancelCapability = (0, _util.createPromiseCapability)();
+ this.streamControllers[streamId].cancelCall = cancelCapability;
+ this.streamControllers[streamId].isClosed = true;
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.CANCEL,
+ streamId,
+ reason: wrapReason(reason)
+ });
+ return cancelCapability.promise;
+ }
+ }, queueingStrategy);
+ }
+
+ _createStreamSink(data) {
+ const streamId = data.streamId,
+ sourceName = this.sourceName,
+ targetName = data.sourceName,
+ comObj = this.comObj;
+ const self = this,
+ action = this.actionHandler[data.action];
+ const streamSink = {
+ enqueue(chunk, size = 1, transfers) {
+ if (this.isCancelled) {
+ return;
+ }
+
+ const lastDesiredSize = this.desiredSize;
+ this.desiredSize -= size;
+
+ if (lastDesiredSize > 0 && this.desiredSize <= 0) {
+ this.sinkCapability = (0, _util.createPromiseCapability)();
+ this.ready = this.sinkCapability.promise;
+ }
+
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.ENQUEUE,
+ streamId,
+ chunk
+ }, transfers);
+ },
+
+ close() {
+ if (this.isCancelled) {
+ return;
+ }
+
+ this.isCancelled = true;
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.CLOSE,
+ streamId
+ });
+ delete self.streamSinks[streamId];
+ },
+
+ error(reason) {
+ (0, _util.assert)(reason instanceof Error, "error must have a valid reason");
+
+ if (this.isCancelled) {
+ return;
+ }
+
+ this.isCancelled = true;
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.ERROR,
+ streamId,
+ reason: wrapReason(reason)
+ });
+ },
+
+ sinkCapability: (0, _util.createPromiseCapability)(),
+ onPull: null,
+ onCancel: null,
+ isCancelled: false,
+ desiredSize: data.desiredSize,
+ ready: null
+ };
+ streamSink.sinkCapability.resolve();
+ streamSink.ready = streamSink.sinkCapability.promise;
+ this.streamSinks[streamId] = streamSink;
+ new Promise(function (resolve) {
+ resolve(action(data.data, streamSink));
+ }).then(function () {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.START_COMPLETE,
+ streamId,
+ success: true
+ });
+ }, function (reason) {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.START_COMPLETE,
+ streamId,
+ reason: wrapReason(reason)
+ });
+ });
+ }
+
+ _processStreamMessage(data) {
+ const streamId = data.streamId,
+ sourceName = this.sourceName,
+ targetName = data.sourceName,
+ comObj = this.comObj;
+ const streamController = this.streamControllers[streamId],
+ streamSink = this.streamSinks[streamId];
+
+ switch (data.stream) {
+ case StreamKind.START_COMPLETE:
+ if (data.success) {
+ streamController.startCall.resolve();
+ } else {
+ streamController.startCall.reject(wrapReason(data.reason));
+ }
+
+ break;
+
+ case StreamKind.PULL_COMPLETE:
+ if (data.success) {
+ streamController.pullCall.resolve();
+ } else {
+ streamController.pullCall.reject(wrapReason(data.reason));
+ }
+
+ break;
+
+ case StreamKind.PULL:
+ if (!streamSink) {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL_COMPLETE,
+ streamId,
+ success: true
+ });
+ break;
+ }
+
+ if (streamSink.desiredSize <= 0 && data.desiredSize > 0) {
+ streamSink.sinkCapability.resolve();
+ }
+
+ streamSink.desiredSize = data.desiredSize;
+ new Promise(function (resolve) {
+ resolve(streamSink.onPull && streamSink.onPull());
+ }).then(function () {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL_COMPLETE,
+ streamId,
+ success: true
+ });
+ }, function (reason) {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.PULL_COMPLETE,
+ streamId,
+ reason: wrapReason(reason)
+ });
+ });
+ break;
+
+ case StreamKind.ENQUEUE:
+ (0, _util.assert)(streamController, "enqueue should have stream controller");
+
+ if (streamController.isClosed) {
+ break;
+ }
+
+ streamController.controller.enqueue(data.chunk);
+ break;
+
+ case StreamKind.CLOSE:
+ (0, _util.assert)(streamController, "close should have stream controller");
+
+ if (streamController.isClosed) {
+ break;
+ }
+
+ streamController.isClosed = true;
+ streamController.controller.close();
+
+ this._deleteStreamController(streamController, streamId);
+
+ break;
+
+ case StreamKind.ERROR:
+ (0, _util.assert)(streamController, "error should have stream controller");
+ streamController.controller.error(wrapReason(data.reason));
+
+ this._deleteStreamController(streamController, streamId);
+
+ break;
+
+ case StreamKind.CANCEL_COMPLETE:
+ if (data.success) {
+ streamController.cancelCall.resolve();
+ } else {
+ streamController.cancelCall.reject(wrapReason(data.reason));
+ }
+
+ this._deleteStreamController(streamController, streamId);
+
+ break;
+
+ case StreamKind.CANCEL:
+ if (!streamSink) {
+ break;
+ }
+
+ new Promise(function (resolve) {
+ resolve(streamSink.onCancel && streamSink.onCancel(wrapReason(data.reason)));
+ }).then(function () {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.CANCEL_COMPLETE,
+ streamId,
+ success: true
+ });
+ }, function (reason) {
+ comObj.postMessage({
+ sourceName,
+ targetName,
+ stream: StreamKind.CANCEL_COMPLETE,
+ streamId,
+ reason: wrapReason(reason)
+ });
+ });
+ streamSink.sinkCapability.reject(wrapReason(data.reason));
+ streamSink.isCancelled = true;
+ delete this.streamSinks[streamId];
+ break;
+
+ default:
+ throw new Error("Unexpected stream case");
+ }
+ }
+
+ async _deleteStreamController(streamController, streamId) {
+ await Promise.allSettled([streamController.startCall && streamController.startCall.promise, streamController.pullCall && streamController.pullCall.promise, streamController.cancelCall && streamController.cancelCall.promise]);
+ delete this.streamControllers[streamId];
+ }
+
+ destroy() {
+ this.comObj.removeEventListener("message", this._onComObjOnMessage);
+ }
+
+}
+
+exports.MessageHandler = MessageHandler;
+
+/***/ }),
+/* 14 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.Metadata = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+class Metadata {
+ #metadataMap;
+ #data;
+
+ constructor({
+ parsedData,
+ rawData
+ }) {
+ this.#metadataMap = parsedData;
+ this.#data = rawData;
+ }
+
+ getRaw() {
+ return this.#data;
+ }
+
+ get(name) {
+ return this.#metadataMap.get(name) ?? null;
+ }
+
+ getAll() {
+ return (0, _util.objectFromMap)(this.#metadataMap);
+ }
+
+ has(name) {
+ return this.#metadataMap.has(name);
+ }
+
+}
+
+exports.Metadata = Metadata;
+
+/***/ }),
+/* 15 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.OptionalContentConfig = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+class OptionalContentGroup {
+ constructor(name, intent) {
+ this.visible = true;
+ this.name = name;
+ this.intent = intent;
+ }
+
+}
+
+class OptionalContentConfig {
+ constructor(data) {
+ this.name = null;
+ this.creator = null;
+ this._order = null;
+ this._groups = new Map();
+
+ if (data === null) {
+ return;
+ }
+
+ this.name = data.name;
+ this.creator = data.creator;
+ this._order = data.order;
+
+ for (const group of data.groups) {
+ this._groups.set(group.id, new OptionalContentGroup(group.name, group.intent));
+ }
+
+ if (data.baseState === "OFF") {
+ for (const group of this._groups) {
+ group.visible = false;
+ }
+ }
+
+ for (const on of data.on) {
+ this._groups.get(on).visible = true;
+ }
+
+ for (const off of data.off) {
+ this._groups.get(off).visible = false;
+ }
+ }
+
+ _evaluateVisibilityExpression(array) {
+ const length = array.length;
+
+ if (length < 2) {
+ return true;
+ }
+
+ const operator = array[0];
+
+ for (let i = 1; i < length; i++) {
+ const element = array[i];
+ let state;
+
+ if (Array.isArray(element)) {
+ state = this._evaluateVisibilityExpression(element);
+ } else if (this._groups.has(element)) {
+ state = this._groups.get(element).visible;
+ } else {
+ (0, _util.warn)(`Optional content group not found: ${element}`);
+ return true;
+ }
+
+ switch (operator) {
+ case "And":
+ if (!state) {
+ return false;
+ }
+
+ break;
+
+ case "Or":
+ if (state) {
+ return true;
+ }
+
+ break;
+
+ case "Not":
+ return !state;
+
+ default:
+ return true;
+ }
+ }
+
+ return operator === "And";
+ }
+
+ isVisible(group) {
+ if (this._groups.size === 0) {
+ return true;
+ }
+
+ if (!group) {
+ (0, _util.warn)("Optional content group not defined.");
+ return true;
+ }
+
+ if (group.type === "OCG") {
+ if (!this._groups.has(group.id)) {
+ (0, _util.warn)(`Optional content group not found: ${group.id}`);
+ return true;
+ }
+
+ return this._groups.get(group.id).visible;
+ } else if (group.type === "OCMD") {
+ if (group.expression) {
+ return this._evaluateVisibilityExpression(group.expression);
+ }
+
+ if (!group.policy || group.policy === "AnyOn") {
+ for (const id of group.ids) {
+ if (!this._groups.has(id)) {
+ (0, _util.warn)(`Optional content group not found: ${id}`);
+ return true;
+ }
+
+ if (this._groups.get(id).visible) {
+ return true;
+ }
+ }
+
+ return false;
+ } else if (group.policy === "AllOn") {
+ for (const id of group.ids) {
+ if (!this._groups.has(id)) {
+ (0, _util.warn)(`Optional content group not found: ${id}`);
+ return true;
+ }
+
+ if (!this._groups.get(id).visible) {
+ return false;
+ }
+ }
+
+ return true;
+ } else if (group.policy === "AnyOff") {
+ for (const id of group.ids) {
+ if (!this._groups.has(id)) {
+ (0, _util.warn)(`Optional content group not found: ${id}`);
+ return true;
+ }
+
+ if (!this._groups.get(id).visible) {
+ return true;
+ }
+ }
+
+ return false;
+ } else if (group.policy === "AllOff") {
+ for (const id of group.ids) {
+ if (!this._groups.has(id)) {
+ (0, _util.warn)(`Optional content group not found: ${id}`);
+ return true;
+ }
+
+ if (this._groups.get(id).visible) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ (0, _util.warn)(`Unknown optional content policy ${group.policy}.`);
+ return true;
+ }
+
+ (0, _util.warn)(`Unknown group type ${group.type}.`);
+ return true;
+ }
+
+ setVisibility(id, visible = true) {
+ if (!this._groups.has(id)) {
+ (0, _util.warn)(`Optional content group not found: ${id}`);
+ return;
+ }
+
+ this._groups.get(id).visible = !!visible;
+ }
+
+ getOrder() {
+ if (!this._groups.size) {
+ return null;
+ }
+
+ if (this._order) {
+ return this._order.slice();
+ }
+
+ return Array.from(this._groups.keys());
+ }
+
+ getGroups() {
+ return this._groups.size > 0 ? (0, _util.objectFromMap)(this._groups) : null;
+ }
+
+ getGroup(id) {
+ return this._groups.get(id) || null;
+ }
+
+}
+
+exports.OptionalContentConfig = OptionalContentConfig;
+
+/***/ }),
+/* 16 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFDataTransportStream = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _display_utils = __w_pdfjs_require__(5);
+
+class PDFDataTransportStream {
+ constructor(params, pdfDataRangeTransport) {
+ (0, _util.assert)(pdfDataRangeTransport, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
+ this._queuedChunks = [];
+ this._progressiveDone = params.progressiveDone || false;
+ this._contentDispositionFilename = params.contentDispositionFilename || null;
+ const initialData = params.initialData;
+
+ if (initialData?.length > 0) {
+ const buffer = new Uint8Array(initialData).buffer;
+
+ this._queuedChunks.push(buffer);
+ }
+
+ this._pdfDataRangeTransport = pdfDataRangeTransport;
+ this._isStreamingSupported = !params.disableStream;
+ this._isRangeSupported = !params.disableRange;
+ this._contentLength = params.length;
+ this._fullRequestReader = null;
+ this._rangeReaders = [];
+
+ this._pdfDataRangeTransport.addRangeListener((begin, chunk) => {
+ this._onReceiveData({
+ begin,
+ chunk
+ });
+ });
+
+ this._pdfDataRangeTransport.addProgressListener((loaded, total) => {
+ this._onProgress({
+ loaded,
+ total
+ });
+ });
+
+ this._pdfDataRangeTransport.addProgressiveReadListener(chunk => {
+ this._onReceiveData({
+ chunk
+ });
+ });
+
+ this._pdfDataRangeTransport.addProgressiveDoneListener(() => {
+ this._onProgressiveDone();
+ });
+
+ this._pdfDataRangeTransport.transportReady();
+ }
+
+ _onReceiveData(args) {
+ const buffer = new Uint8Array(args.chunk).buffer;
+
+ if (args.begin === undefined) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader._enqueue(buffer);
+ } else {
+ this._queuedChunks.push(buffer);
+ }
+ } else {
+ const found = this._rangeReaders.some(function (rangeReader) {
+ if (rangeReader._begin !== args.begin) {
+ return false;
+ }
+
+ rangeReader._enqueue(buffer);
+
+ return true;
+ });
+
+ (0, _util.assert)(found, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
+ }
+ }
+
+ get _progressiveDataLength() {
+ return this._fullRequestReader?._loaded ?? 0;
+ }
+
+ _onProgress(evt) {
+ if (evt.total === undefined) {
+ const firstReader = this._rangeReaders[0];
+
+ if (firstReader?.onProgress) {
+ firstReader.onProgress({
+ loaded: evt.loaded
+ });
+ }
+ } else {
+ const fullReader = this._fullRequestReader;
+
+ if (fullReader?.onProgress) {
+ fullReader.onProgress({
+ loaded: evt.loaded,
+ total: evt.total
+ });
+ }
+ }
+ }
+
+ _onProgressiveDone() {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.progressiveDone();
+ }
+
+ this._progressiveDone = true;
+ }
+
+ _removeRangeReader(reader) {
+ const i = this._rangeReaders.indexOf(reader);
+
+ if (i >= 0) {
+ this._rangeReaders.splice(i, 1);
+ }
+ }
+
+ getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
+ const queuedChunks = this._queuedChunks;
+ this._queuedChunks = null;
+ return new PDFDataTransportStreamReader(this, queuedChunks, this._progressiveDone, this._contentDispositionFilename);
+ }
+
+ getRangeReader(begin, end) {
+ if (end <= this._progressiveDataLength) {
+ return null;
+ }
+
+ const reader = new PDFDataTransportStreamRangeReader(this, begin, end);
+
+ this._pdfDataRangeTransport.requestDataRange(begin, end);
+
+ this._rangeReaders.push(reader);
+
+ return reader;
+ }
+
+ cancelAllRequests(reason) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ for (const reader of this._rangeReaders.slice(0)) {
+ reader.cancel(reason);
+ }
+
+ this._pdfDataRangeTransport.abort();
+ }
+
+}
+
+exports.PDFDataTransportStream = PDFDataTransportStream;
+
+class PDFDataTransportStreamReader {
+ constructor(stream, queuedChunks, progressiveDone = false, contentDispositionFilename = null) {
+ this._stream = stream;
+ this._done = progressiveDone || false;
+ this._filename = (0, _display_utils.isPdfFile)(contentDispositionFilename) ? contentDispositionFilename : null;
+ this._queuedChunks = queuedChunks || [];
+ this._loaded = 0;
+
+ for (const chunk of this._queuedChunks) {
+ this._loaded += chunk.byteLength;
+ }
+
+ this._requests = [];
+ this._headersReady = Promise.resolve();
+ stream._fullRequestReader = this;
+ this.onProgress = null;
+ }
+
+ _enqueue(chunk) {
+ if (this._done) {
+ return;
+ }
+
+ if (this._requests.length > 0) {
+ const requestCapability = this._requests.shift();
+
+ requestCapability.resolve({
+ value: chunk,
+ done: false
+ });
+ } else {
+ this._queuedChunks.push(chunk);
+ }
+
+ this._loaded += chunk.byteLength;
+ }
+
+ get headersReady() {
+ return this._headersReady;
+ }
+
+ get filename() {
+ return this._filename;
+ }
+
+ get isRangeSupported() {
+ return this._stream._isRangeSupported;
+ }
+
+ get isStreamingSupported() {
+ return this._stream._isStreamingSupported;
+ }
+
+ get contentLength() {
+ return this._stream._contentLength;
+ }
+
+ async read() {
+ if (this._queuedChunks.length > 0) {
+ const chunk = this._queuedChunks.shift();
+
+ return {
+ value: chunk,
+ done: false
+ };
+ }
+
+ if (this._done) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ const requestCapability = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return requestCapability.promise;
+ }
+
+ cancel(reason) {
+ this._done = true;
+
+ for (const requestCapability of this._requests) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+
+ this._requests.length = 0;
+ }
+
+ progressiveDone() {
+ if (this._done) {
+ return;
+ }
+
+ this._done = true;
+ }
+
+}
+
+class PDFDataTransportStreamRangeReader {
+ constructor(stream, begin, end) {
+ this._stream = stream;
+ this._begin = begin;
+ this._end = end;
+ this._queuedChunk = null;
+ this._requests = [];
+ this._done = false;
+ this.onProgress = null;
+ }
+
+ _enqueue(chunk) {
+ if (this._done) {
+ return;
+ }
+
+ if (this._requests.length === 0) {
+ this._queuedChunk = chunk;
+ } else {
+ const requestsCapability = this._requests.shift();
+
+ requestsCapability.resolve({
+ value: chunk,
+ done: false
+ });
+
+ for (const requestCapability of this._requests) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+
+ this._requests.length = 0;
+ }
+
+ this._done = true;
+
+ this._stream._removeRangeReader(this);
+ }
+
+ get isStreamingSupported() {
+ return false;
+ }
+
+ async read() {
+ if (this._queuedChunk) {
+ const chunk = this._queuedChunk;
+ this._queuedChunk = null;
+ return {
+ value: chunk,
+ done: false
+ };
+ }
+
+ if (this._done) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ const requestCapability = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return requestCapability.promise;
+ }
+
+ cancel(reason) {
+ this._done = true;
+
+ for (const requestCapability of this._requests) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+
+ this._requests.length = 0;
+
+ this._stream._removeRangeReader(this);
+ }
+
+}
+
+/***/ }),
+/* 17 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XfaText = void 0;
+
+class XfaText {
+ static textContent(xfa) {
+ const items = [];
+ const output = {
+ items,
+ styles: Object.create(null)
+ };
+
+ function walk(node) {
+ if (!node) {
+ return;
+ }
+
+ let str = null;
+ const name = node.name;
+
+ if (name === "#text") {
+ str = node.value;
+ } else if (!XfaText.shouldBuildText(name)) {
+ return;
+ } else if (node?.attributes?.textContent) {
+ str = node.attributes.textContent;
+ } else if (node.value) {
+ str = node.value;
+ }
+
+ if (str !== null) {
+ items.push({
+ str
+ });
+ }
+
+ if (!node.children) {
+ return;
+ }
+
+ for (const child of node.children) {
+ walk(child);
+ }
+ }
+
+ walk(xfa);
+ return output;
+ }
+
+ static shouldBuildText(name) {
+ return !(name === "textarea" || name === "input" || name === "option" || name === "select");
+ }
+
+}
+
+exports.XfaText = XfaText;
+
+/***/ }),
+/* 18 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.AnnotationLayer = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _display_utils = __w_pdfjs_require__(5);
+
+var _annotation_storage = __w_pdfjs_require__(9);
+
+var _scripting_utils = __w_pdfjs_require__(19);
+
+var _xfa_layer = __w_pdfjs_require__(20);
+
+const DEFAULT_TAB_INDEX = 1000;
+const GetElementsByNameSet = new WeakSet();
+
+function getRectDims(rect) {
+ return {
+ width: rect[2] - rect[0],
+ height: rect[3] - rect[1]
+ };
+}
+
+class AnnotationElementFactory {
+ static create(parameters) {
+ const subtype = parameters.data.annotationType;
+
+ switch (subtype) {
+ case _util.AnnotationType.LINK:
+ return new LinkAnnotationElement(parameters);
+
+ case _util.AnnotationType.TEXT:
+ return new TextAnnotationElement(parameters);
+
+ case _util.AnnotationType.WIDGET:
+ const fieldType = parameters.data.fieldType;
+
+ switch (fieldType) {
+ case "Tx":
+ return new TextWidgetAnnotationElement(parameters);
+
+ case "Btn":
+ if (parameters.data.radioButton) {
+ return new RadioButtonWidgetAnnotationElement(parameters);
+ } else if (parameters.data.checkBox) {
+ return new CheckboxWidgetAnnotationElement(parameters);
+ }
+
+ return new PushButtonWidgetAnnotationElement(parameters);
+
+ case "Ch":
+ return new ChoiceWidgetAnnotationElement(parameters);
+ }
+
+ return new WidgetAnnotationElement(parameters);
+
+ case _util.AnnotationType.POPUP:
+ return new PopupAnnotationElement(parameters);
+
+ case _util.AnnotationType.FREETEXT:
+ return new FreeTextAnnotationElement(parameters);
+
+ case _util.AnnotationType.LINE:
+ return new LineAnnotationElement(parameters);
+
+ case _util.AnnotationType.SQUARE:
+ return new SquareAnnotationElement(parameters);
+
+ case _util.AnnotationType.CIRCLE:
+ return new CircleAnnotationElement(parameters);
+
+ case _util.AnnotationType.POLYLINE:
+ return new PolylineAnnotationElement(parameters);
+
+ case _util.AnnotationType.CARET:
+ return new CaretAnnotationElement(parameters);
+
+ case _util.AnnotationType.INK:
+ return new InkAnnotationElement(parameters);
+
+ case _util.AnnotationType.POLYGON:
+ return new PolygonAnnotationElement(parameters);
+
+ case _util.AnnotationType.HIGHLIGHT:
+ return new HighlightAnnotationElement(parameters);
+
+ case _util.AnnotationType.UNDERLINE:
+ return new UnderlineAnnotationElement(parameters);
+
+ case _util.AnnotationType.SQUIGGLY:
+ return new SquigglyAnnotationElement(parameters);
+
+ case _util.AnnotationType.STRIKEOUT:
+ return new StrikeOutAnnotationElement(parameters);
+
+ case _util.AnnotationType.STAMP:
+ return new StampAnnotationElement(parameters);
+
+ case _util.AnnotationType.FILEATTACHMENT:
+ return new FileAttachmentAnnotationElement(parameters);
+
+ default:
+ return new AnnotationElement(parameters);
+ }
+ }
+
+}
+
+class AnnotationElement {
+ constructor(parameters, {
+ isRenderable = false,
+ ignoreBorder = false,
+ createQuadrilaterals = false
+ } = {}) {
+ this.isRenderable = isRenderable;
+ this.data = parameters.data;
+ this.layer = parameters.layer;
+ this.page = parameters.page;
+ this.viewport = parameters.viewport;
+ this.linkService = parameters.linkService;
+ this.downloadManager = parameters.downloadManager;
+ this.imageResourcesPath = parameters.imageResourcesPath;
+ this.renderForms = parameters.renderForms;
+ this.svgFactory = parameters.svgFactory;
+ this.annotationStorage = parameters.annotationStorage;
+ this.enableScripting = parameters.enableScripting;
+ this.hasJSActions = parameters.hasJSActions;
+ this._fieldObjects = parameters.fieldObjects;
+ this._mouseState = parameters.mouseState;
+
+ if (isRenderable) {
+ this.container = this._createContainer(ignoreBorder);
+ }
+
+ if (createQuadrilaterals) {
+ this.quadrilaterals = this._createQuadrilaterals(ignoreBorder);
+ }
+ }
+
+ _createContainer(ignoreBorder = false) {
+ const data = this.data,
+ page = this.page,
+ viewport = this.viewport;
+ const container = document.createElement("section");
+ let {
+ width,
+ height
+ } = getRectDims(data.rect);
+ container.setAttribute("data-annotation-id", data.id);
+
+ const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
+
+ if (data.hasOwnCanvas) {
+ const transform = viewport.transform.slice();
+
+ const [scaleX, scaleY] = _util.Util.singularValueDecompose2dScale(transform);
+
+ width = Math.ceil(width * scaleX);
+ height = Math.ceil(height * scaleY);
+ rect[0] *= scaleX;
+ rect[1] *= scaleY;
+
+ for (let i = 0; i < 4; i++) {
+ transform[i] = Math.sign(transform[i]);
+ }
+
+ container.style.transform = `matrix(${transform.join(",")})`;
+ } else {
+ container.style.transform = `matrix(${viewport.transform.join(",")})`;
+ }
+
+ container.style.transformOrigin = `${-rect[0]}px ${-rect[1]}px`;
+
+ if (!ignoreBorder && data.borderStyle.width > 0) {
+ container.style.borderWidth = `${data.borderStyle.width}px`;
+
+ if (data.borderStyle.style !== _util.AnnotationBorderStyleType.UNDERLINE) {
+ width -= 2 * data.borderStyle.width;
+ height -= 2 * data.borderStyle.width;
+ }
+
+ const horizontalRadius = data.borderStyle.horizontalCornerRadius;
+ const verticalRadius = data.borderStyle.verticalCornerRadius;
+
+ if (horizontalRadius > 0 || verticalRadius > 0) {
+ const radius = `${horizontalRadius}px / ${verticalRadius}px`;
+ container.style.borderRadius = radius;
+ }
+
+ switch (data.borderStyle.style) {
+ case _util.AnnotationBorderStyleType.SOLID:
+ container.style.borderStyle = "solid";
+ break;
+
+ case _util.AnnotationBorderStyleType.DASHED:
+ container.style.borderStyle = "dashed";
+ break;
+
+ case _util.AnnotationBorderStyleType.BEVELED:
+ (0, _util.warn)("Unimplemented border style: beveled");
+ break;
+
+ case _util.AnnotationBorderStyleType.INSET:
+ (0, _util.warn)("Unimplemented border style: inset");
+ break;
+
+ case _util.AnnotationBorderStyleType.UNDERLINE:
+ container.style.borderBottomStyle = "solid";
+ break;
+
+ default:
+ break;
+ }
+
+ const borderColor = data.borderColor || data.color || null;
+
+ if (borderColor) {
+ container.style.borderColor = _util.Util.makeHexColor(data.color[0] | 0, data.color[1] | 0, data.color[2] | 0);
+ } else {
+ container.style.borderWidth = 0;
+ }
+ }
+
+ container.style.left = `${rect[0]}px`;
+ container.style.top = `${rect[1]}px`;
+
+ if (data.hasOwnCanvas) {
+ container.style.width = container.style.height = "auto";
+ } else {
+ container.style.width = `${width}px`;
+ container.style.height = `${height}px`;
+ }
+
+ return container;
+ }
+
+ _createQuadrilaterals(ignoreBorder = false) {
+ if (!this.data.quadPoints) {
+ return null;
+ }
+
+ const quadrilaterals = [];
+ const savedRect = this.data.rect;
+
+ for (const quadPoint of this.data.quadPoints) {
+ this.data.rect = [quadPoint[2].x, quadPoint[2].y, quadPoint[1].x, quadPoint[1].y];
+ quadrilaterals.push(this._createContainer(ignoreBorder));
+ }
+
+ this.data.rect = savedRect;
+ return quadrilaterals;
+ }
+
+ _createPopup(trigger, data) {
+ let container = this.container;
+
+ if (this.quadrilaterals) {
+ trigger = trigger || this.quadrilaterals;
+ container = this.quadrilaterals[0];
+ }
+
+ if (!trigger) {
+ trigger = document.createElement("div");
+ trigger.style.height = container.style.height;
+ trigger.style.width = container.style.width;
+ container.appendChild(trigger);
+ }
+
+ const popupElement = new PopupElement({
+ container,
+ trigger,
+ color: data.color,
+ titleObj: data.titleObj,
+ modificationDate: data.modificationDate,
+ contentsObj: data.contentsObj,
+ richText: data.richText,
+ hideWrapper: true
+ });
+ const popup = popupElement.render();
+ popup.style.left = container.style.width;
+ container.appendChild(popup);
+ }
+
+ _renderQuadrilaterals(className) {
+ for (const quadrilateral of this.quadrilaterals) {
+ quadrilateral.className = className;
+ }
+
+ return this.quadrilaterals;
+ }
+
+ render() {
+ (0, _util.unreachable)("Abstract method `AnnotationElement.render` called");
+ }
+
+ _getElementsByName(name, skipId = null) {
+ const fields = [];
+
+ if (this._fieldObjects) {
+ const fieldObj = this._fieldObjects[name];
+
+ if (fieldObj) {
+ for (const {
+ page,
+ id,
+ exportValues
+ } of fieldObj) {
+ if (page === -1) {
+ continue;
+ }
+
+ if (id === skipId) {
+ continue;
+ }
+
+ const exportValue = typeof exportValues === "string" ? exportValues : null;
+ const domElement = document.getElementById(id);
+
+ if (domElement && !GetElementsByNameSet.has(domElement)) {
+ (0, _util.warn)(`_getElementsByName - element not allowed: ${id}`);
+ continue;
+ }
+
+ fields.push({
+ id,
+ exportValue,
+ domElement
+ });
+ }
+ }
+
+ return fields;
+ }
+
+ for (const domElement of document.getElementsByName(name)) {
+ const {
+ id,
+ exportValue
+ } = domElement;
+
+ if (id === skipId) {
+ continue;
+ }
+
+ if (!GetElementsByNameSet.has(domElement)) {
+ continue;
+ }
+
+ fields.push({
+ id,
+ exportValue,
+ domElement
+ });
+ }
+
+ return fields;
+ }
+
+ static get platform() {
+ const platform = typeof navigator !== "undefined" ? navigator.platform : "";
+ return (0, _util.shadow)(this, "platform", {
+ isWin: platform.includes("Win"),
+ isMac: platform.includes("Mac")
+ });
+ }
+
+}
+
+class LinkAnnotationElement extends AnnotationElement {
+ constructor(parameters, options = null) {
+ const isRenderable = !!(parameters.data.url || parameters.data.dest || parameters.data.action || parameters.data.isTooltipOnly || parameters.data.resetForm || parameters.data.actions && (parameters.data.actions.Action || parameters.data.actions["Mouse Up"] || parameters.data.actions["Mouse Down"]));
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: !!options?.ignoreBorder,
+ createQuadrilaterals: true
+ });
+ }
+
+ render() {
+ const {
+ data,
+ linkService
+ } = this;
+ const link = document.createElement("a");
+
+ if (data.url) {
+ if (!linkService.addLinkAttributes) {
+ (0, _util.warn)("LinkAnnotationElement.render - missing `addLinkAttributes`-method on the `linkService`-instance.");
+ }
+
+ linkService.addLinkAttributes?.(link, data.url, data.newWindow);
+ } else if (data.action) {
+ this._bindNamedAction(link, data.action);
+ } else if (data.dest) {
+ this._bindLink(link, data.dest);
+ } else {
+ let hasClickAction = false;
+
+ if (data.actions && (data.actions.Action || data.actions["Mouse Up"] || data.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions) {
+ hasClickAction = true;
+
+ this._bindJSAction(link, data);
+ }
+
+ if (data.resetForm) {
+ this._bindResetFormAction(link, data.resetForm);
+ } else if (!hasClickAction) {
+ this._bindLink(link, "");
+ }
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("linkAnnotation").map((quadrilateral, index) => {
+ const linkElement = index === 0 ? link : link.cloneNode();
+ quadrilateral.appendChild(linkElement);
+ return quadrilateral;
+ });
+ }
+
+ this.container.className = "linkAnnotation";
+ this.container.appendChild(link);
+ return this.container;
+ }
+
+ _bindLink(link, destination) {
+ link.href = this.linkService.getDestinationHash(destination);
+
+ link.onclick = () => {
+ if (destination) {
+ this.linkService.goToDestination(destination);
+ }
+
+ return false;
+ };
+
+ if (destination || destination === "") {
+ link.className = "internalLink";
+ }
+ }
+
+ _bindNamedAction(link, action) {
+ link.href = this.linkService.getAnchorUrl("");
+
+ link.onclick = () => {
+ this.linkService.executeNamedAction(action);
+ return false;
+ };
+
+ link.className = "internalLink";
+ }
+
+ _bindJSAction(link, data) {
+ link.href = this.linkService.getAnchorUrl("");
+ const map = new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]);
+
+ for (const name of Object.keys(data.actions)) {
+ const jsName = map.get(name);
+
+ if (!jsName) {
+ continue;
+ }
+
+ link[jsName] = () => {
+ this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id: data.id,
+ name
+ }
+ });
+ return false;
+ };
+ }
+
+ if (!link.onclick) {
+ link.onclick = () => false;
+ }
+
+ link.className = "internalLink";
+ }
+
+ _bindResetFormAction(link, resetForm) {
+ const otherClickAction = link.onclick;
+
+ if (!otherClickAction) {
+ link.href = this.linkService.getAnchorUrl("");
+ }
+
+ link.className = "internalLink";
+
+ if (!this._fieldObjects) {
+ (0, _util.warn)(`_bindResetFormAction - "resetForm" action not supported, ` + "ensure that the `fieldObjects` parameter is provided.");
+
+ if (!otherClickAction) {
+ link.onclick = () => false;
+ }
+
+ return;
+ }
+
+ link.onclick = () => {
+ if (otherClickAction) {
+ otherClickAction();
+ }
+
+ const {
+ fields: resetFormFields,
+ refs: resetFormRefs,
+ include
+ } = resetForm;
+ const allFields = [];
+
+ if (resetFormFields.length !== 0 || resetFormRefs.length !== 0) {
+ const fieldIds = new Set(resetFormRefs);
+
+ for (const fieldName of resetFormFields) {
+ const fields = this._fieldObjects[fieldName] || [];
+
+ for (const {
+ id
+ } of fields) {
+ fieldIds.add(id);
+ }
+ }
+
+ for (const fields of Object.values(this._fieldObjects)) {
+ for (const field of fields) {
+ if (fieldIds.has(field.id) === include) {
+ allFields.push(field);
+ }
+ }
+ }
+ } else {
+ for (const fields of Object.values(this._fieldObjects)) {
+ allFields.push(...fields);
+ }
+ }
+
+ const storage = this.annotationStorage;
+ const allIds = [];
+
+ for (const field of allFields) {
+ const {
+ id
+ } = field;
+ allIds.push(id);
+
+ switch (field.type) {
+ case "text":
+ {
+ const value = field.defaultValue || "";
+ storage.setValue(id, {
+ value,
+ valueAsString: value
+ });
+ break;
+ }
+
+ case "checkbox":
+ case "radiobutton":
+ {
+ const value = field.defaultValue === field.exportValues;
+ storage.setValue(id, {
+ value
+ });
+ break;
+ }
+
+ case "combobox":
+ case "listbox":
+ {
+ const value = field.defaultValue || "";
+ storage.setValue(id, {
+ value
+ });
+ break;
+ }
+
+ default:
+ continue;
+ }
+
+ const domElement = document.getElementById(id);
+
+ if (!domElement || !GetElementsByNameSet.has(domElement)) {
+ continue;
+ }
+
+ domElement.dispatchEvent(new Event("resetform"));
+ }
+
+ if (this.enableScripting) {
+ this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id: "app",
+ ids: allIds,
+ name: "ResetForm"
+ }
+ });
+ }
+
+ return false;
+ };
+ }
+
+}
+
+class TextAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable
+ });
+ }
+
+ render() {
+ this.container.className = "textAnnotation";
+ const image = document.createElement("img");
+ image.style.height = this.container.style.height;
+ image.style.width = this.container.style.width;
+ image.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg";
+ image.alt = "[{{type}} Annotation]";
+ image.dataset.l10nId = "text_annotation_type";
+ image.dataset.l10nArgs = JSON.stringify({
+ type: this.data.name
+ });
+
+ if (!this.data.hasPopup) {
+ this._createPopup(image, this.data);
+ }
+
+ this.container.appendChild(image);
+ return this.container;
+ }
+
+}
+
+class WidgetAnnotationElement extends AnnotationElement {
+ render() {
+ if (this.data.alternativeText) {
+ this.container.title = this.data.alternativeText;
+ }
+
+ return this.container;
+ }
+
+ _getKeyModifier(event) {
+ const {
+ isWin,
+ isMac
+ } = AnnotationElement.platform;
+ return isWin && event.ctrlKey || isMac && event.metaKey;
+ }
+
+ _setEventListener(element, baseName, eventName, valueGetter) {
+ if (baseName.includes("mouse")) {
+ element.addEventListener(baseName, event => {
+ this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id: this.data.id,
+ name: eventName,
+ value: valueGetter(event),
+ shift: event.shiftKey,
+ modifier: this._getKeyModifier(event)
+ }
+ });
+ });
+ } else {
+ element.addEventListener(baseName, event => {
+ this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id: this.data.id,
+ name: eventName,
+ value: valueGetter(event)
+ }
+ });
+ });
+ }
+ }
+
+ _setEventListeners(element, names, getter) {
+ for (const [baseName, eventName] of names) {
+ if (eventName === "Action" || this.data.actions?.[eventName]) {
+ this._setEventListener(element, baseName, eventName, getter);
+ }
+ }
+ }
+
+ _setBackgroundColor(element) {
+ const color = this.data.backgroundColor || null;
+ element.style.backgroundColor = color === null ? "transparent" : _util.Util.makeHexColor(color[0], color[1], color[2]);
+ }
+
+ _dispatchEventFromSandbox(actions, jsEvent) {
+ const setColor = (jsName, styleName, event) => {
+ const color = event.detail[jsName];
+ event.target.style[styleName] = _scripting_utils.ColorConverters[`${color[0]}_HTML`](color.slice(1));
+ };
+
+ const commonActions = {
+ display: event => {
+ const hidden = event.detail.display % 2 === 1;
+ event.target.style.visibility = hidden ? "hidden" : "visible";
+ this.annotationStorage.setValue(this.data.id, {
+ hidden,
+ print: event.detail.display === 0 || event.detail.display === 3
+ });
+ },
+ print: event => {
+ this.annotationStorage.setValue(this.data.id, {
+ print: event.detail.print
+ });
+ },
+ hidden: event => {
+ event.target.style.visibility = event.detail.hidden ? "hidden" : "visible";
+ this.annotationStorage.setValue(this.data.id, {
+ hidden: event.detail.hidden
+ });
+ },
+ focus: event => {
+ setTimeout(() => event.target.focus({
+ preventScroll: false
+ }), 0);
+ },
+ userName: event => {
+ event.target.title = event.detail.userName;
+ },
+ readonly: event => {
+ if (event.detail.readonly) {
+ event.target.setAttribute("readonly", "");
+ } else {
+ event.target.removeAttribute("readonly");
+ }
+ },
+ required: event => {
+ if (event.detail.required) {
+ event.target.setAttribute("required", "");
+ } else {
+ event.target.removeAttribute("required");
+ }
+ },
+ bgColor: event => {
+ setColor("bgColor", "backgroundColor", event);
+ },
+ fillColor: event => {
+ setColor("fillColor", "backgroundColor", event);
+ },
+ fgColor: event => {
+ setColor("fgColor", "color", event);
+ },
+ textColor: event => {
+ setColor("textColor", "color", event);
+ },
+ borderColor: event => {
+ setColor("borderColor", "borderColor", event);
+ },
+ strokeColor: event => {
+ setColor("strokeColor", "borderColor", event);
+ }
+ };
+
+ for (const name of Object.keys(jsEvent.detail)) {
+ const action = actions[name] || commonActions[name];
+
+ if (action) {
+ action(jsEvent);
+ }
+ }
+ }
+
+}
+
+class TextWidgetAnnotationElement extends WidgetAnnotationElement {
+ constructor(parameters) {
+ const isRenderable = parameters.renderForms || !parameters.data.hasAppearance && !!parameters.data.fieldValue;
+ super(parameters, {
+ isRenderable
+ });
+ }
+
+ setPropertyOnSiblings(base, key, value, keyInStorage) {
+ const storage = this.annotationStorage;
+
+ for (const element of this._getElementsByName(base.name, base.id)) {
+ if (element.domElement) {
+ element.domElement[key] = value;
+ }
+
+ storage.setValue(element.id, {
+ [keyInStorage]: value
+ });
+ }
+ }
+
+ render() {
+ const storage = this.annotationStorage;
+ const id = this.data.id;
+ this.container.className = "textWidgetAnnotation";
+ let element = null;
+
+ if (this.renderForms) {
+ const storedData = storage.getValue(id, {
+ value: this.data.fieldValue,
+ valueAsString: this.data.fieldValue
+ });
+ const textContent = storedData.valueAsString || storedData.value || "";
+ const elementData = {
+ userValue: null,
+ formattedValue: null
+ };
+
+ if (this.data.multiLine) {
+ element = document.createElement("textarea");
+ element.textContent = textContent;
+ } else {
+ element = document.createElement("input");
+ element.type = "text";
+ element.setAttribute("value", textContent);
+ }
+
+ GetElementsByNameSet.add(element);
+ element.disabled = this.data.readOnly;
+ element.name = this.data.fieldName;
+ element.tabIndex = DEFAULT_TAB_INDEX;
+ elementData.userValue = textContent;
+ element.setAttribute("id", id);
+ element.addEventListener("input", event => {
+ storage.setValue(id, {
+ value: event.target.value
+ });
+ this.setPropertyOnSiblings(element, "value", event.target.value, "value");
+ });
+ element.addEventListener("resetform", event => {
+ const defaultValue = this.data.defaultFieldValue || "";
+ element.value = elementData.userValue = defaultValue;
+ delete elementData.formattedValue;
+ });
+
+ let blurListener = event => {
+ if (elementData.formattedValue) {
+ event.target.value = elementData.formattedValue;
+ }
+
+ event.target.scrollLeft = 0;
+ };
+
+ if (this.enableScripting && this.hasJSActions) {
+ element.addEventListener("focus", event => {
+ if (elementData.userValue) {
+ event.target.value = elementData.userValue;
+ }
+ });
+ element.addEventListener("updatefromsandbox", jsEvent => {
+ const actions = {
+ value(event) {
+ elementData.userValue = event.detail.value || "";
+ storage.setValue(id, {
+ value: elementData.userValue.toString()
+ });
+
+ if (!elementData.formattedValue) {
+ event.target.value = elementData.userValue;
+ }
+ },
+
+ valueAsString(event) {
+ elementData.formattedValue = event.detail.valueAsString || "";
+
+ if (event.target !== document.activeElement) {
+ event.target.value = elementData.formattedValue;
+ }
+
+ storage.setValue(id, {
+ formattedValue: elementData.formattedValue
+ });
+ },
+
+ selRange(event) {
+ const [selStart, selEnd] = event.detail.selRange;
+
+ if (selStart >= 0 && selEnd < event.target.value.length) {
+ event.target.setSelectionRange(selStart, selEnd);
+ }
+ }
+
+ };
+
+ this._dispatchEventFromSandbox(actions, jsEvent);
+ });
+ element.addEventListener("keydown", event => {
+ let commitKey = -1;
+
+ if (event.key === "Escape") {
+ commitKey = 0;
+ } else if (event.key === "Enter") {
+ commitKey = 2;
+ } else if (event.key === "Tab") {
+ commitKey = 3;
+ }
+
+ if (commitKey === -1) {
+ return;
+ }
+
+ elementData.userValue = event.target.value;
+ this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id,
+ name: "Keystroke",
+ value: event.target.value,
+ willCommit: true,
+ commitKey,
+ selStart: event.target.selectionStart,
+ selEnd: event.target.selectionEnd
+ }
+ });
+ });
+ const _blurListener = blurListener;
+ blurListener = null;
+ element.addEventListener("blur", event => {
+ elementData.userValue = event.target.value;
+
+ if (this._mouseState.isDown) {
+ this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id,
+ name: "Keystroke",
+ value: event.target.value,
+ willCommit: true,
+ commitKey: 1,
+ selStart: event.target.selectionStart,
+ selEnd: event.target.selectionEnd
+ }
+ });
+ }
+
+ _blurListener(event);
+ });
+
+ if (this.data.actions?.Keystroke) {
+ element.addEventListener("beforeinput", event => {
+ elementData.formattedValue = "";
+ const {
+ data,
+ target
+ } = event;
+ const {
+ value,
+ selectionStart,
+ selectionEnd
+ } = target;
+ this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id,
+ name: "Keystroke",
+ value,
+ change: data,
+ willCommit: false,
+ selStart: selectionStart,
+ selEnd: selectionEnd
+ }
+ });
+ });
+ }
+
+ this._setEventListeners(element, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.value);
+ }
+
+ if (blurListener) {
+ element.addEventListener("blur", blurListener);
+ }
+
+ if (this.data.maxLen !== null) {
+ element.maxLength = this.data.maxLen;
+ }
+
+ if (this.data.comb) {
+ const fieldWidth = this.data.rect[2] - this.data.rect[0];
+ const combWidth = fieldWidth / this.data.maxLen;
+ element.classList.add("comb");
+ element.style.letterSpacing = `calc(${combWidth}px - 1ch)`;
+ }
+ } else {
+ element = document.createElement("div");
+ element.textContent = this.data.fieldValue;
+ element.style.verticalAlign = "middle";
+ element.style.display = "table-cell";
+ }
+
+ this._setTextStyle(element);
+
+ this._setBackgroundColor(element);
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+
+ _setTextStyle(element) {
+ const TEXT_ALIGNMENT = ["left", "center", "right"];
+ const {
+ fontSize,
+ fontColor
+ } = this.data.defaultAppearanceData;
+ const style = element.style;
+
+ if (fontSize) {
+ style.fontSize = `${fontSize}px`;
+ }
+
+ style.color = _util.Util.makeHexColor(fontColor[0], fontColor[1], fontColor[2]);
+
+ if (this.data.textAlignment !== null) {
+ style.textAlign = TEXT_ALIGNMENT[this.data.textAlignment];
+ }
+ }
+
+}
+
+class CheckboxWidgetAnnotationElement extends WidgetAnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: parameters.renderForms
+ });
+ }
+
+ render() {
+ const storage = this.annotationStorage;
+ const data = this.data;
+ const id = data.id;
+ let value = storage.getValue(id, {
+ value: data.exportValue === data.fieldValue
+ }).value;
+
+ if (typeof value === "string") {
+ value = value !== "Off";
+ storage.setValue(id, {
+ value
+ });
+ }
+
+ this.container.className = "buttonWidgetAnnotation checkBox";
+ const element = document.createElement("input");
+ GetElementsByNameSet.add(element);
+ element.disabled = data.readOnly;
+ element.type = "checkbox";
+ element.name = data.fieldName;
+
+ if (value) {
+ element.setAttribute("checked", true);
+ }
+
+ element.setAttribute("id", id);
+ element.setAttribute("exportValue", data.exportValue);
+ element.tabIndex = DEFAULT_TAB_INDEX;
+ element.addEventListener("change", event => {
+ const {
+ name,
+ checked
+ } = event.target;
+
+ for (const checkbox of this._getElementsByName(name, id)) {
+ const curChecked = checked && checkbox.exportValue === data.exportValue;
+
+ if (checkbox.domElement) {
+ checkbox.domElement.checked = curChecked;
+ }
+
+ storage.setValue(checkbox.id, {
+ value: curChecked
+ });
+ }
+
+ storage.setValue(id, {
+ value: checked
+ });
+ });
+ element.addEventListener("resetform", event => {
+ const defaultValue = data.defaultFieldValue || "Off";
+ event.target.checked = defaultValue === data.exportValue;
+ });
+
+ if (this.enableScripting && this.hasJSActions) {
+ element.addEventListener("updatefromsandbox", jsEvent => {
+ const actions = {
+ value(event) {
+ event.target.checked = event.detail.value !== "Off";
+ storage.setValue(id, {
+ value: event.target.checked
+ });
+ }
+
+ };
+
+ this._dispatchEventFromSandbox(actions, jsEvent);
+ });
+
+ this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked);
+ }
+
+ this._setBackgroundColor(element);
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+
+}
+
+class RadioButtonWidgetAnnotationElement extends WidgetAnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: parameters.renderForms
+ });
+ }
+
+ render() {
+ this.container.className = "buttonWidgetAnnotation radioButton";
+ const storage = this.annotationStorage;
+ const data = this.data;
+ const id = data.id;
+ let value = storage.getValue(id, {
+ value: data.fieldValue === data.buttonValue
+ }).value;
+
+ if (typeof value === "string") {
+ value = value !== data.buttonValue;
+ storage.setValue(id, {
+ value
+ });
+ }
+
+ const element = document.createElement("input");
+ GetElementsByNameSet.add(element);
+ element.disabled = data.readOnly;
+ element.type = "radio";
+ element.name = data.fieldName;
+
+ if (value) {
+ element.setAttribute("checked", true);
+ }
+
+ element.setAttribute("id", id);
+ element.tabIndex = DEFAULT_TAB_INDEX;
+ element.addEventListener("change", event => {
+ const {
+ name,
+ checked
+ } = event.target;
+
+ for (const radio of this._getElementsByName(name, id)) {
+ storage.setValue(radio.id, {
+ value: false
+ });
+ }
+
+ storage.setValue(id, {
+ value: checked
+ });
+ });
+ element.addEventListener("resetform", event => {
+ const defaultValue = data.defaultFieldValue;
+ event.target.checked = defaultValue !== null && defaultValue !== undefined && defaultValue === data.buttonValue;
+ });
+
+ if (this.enableScripting && this.hasJSActions) {
+ const pdfButtonValue = data.buttonValue;
+ element.addEventListener("updatefromsandbox", jsEvent => {
+ const actions = {
+ value: event => {
+ const checked = pdfButtonValue === event.detail.value;
+
+ for (const radio of this._getElementsByName(event.target.name)) {
+ const curChecked = checked && radio.id === id;
+
+ if (radio.domElement) {
+ radio.domElement.checked = curChecked;
+ }
+
+ storage.setValue(radio.id, {
+ value: curChecked
+ });
+ }
+ }
+ };
+
+ this._dispatchEventFromSandbox(actions, jsEvent);
+ });
+
+ this._setEventListeners(element, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], event => event.target.checked);
+ }
+
+ this._setBackgroundColor(element);
+
+ this.container.appendChild(element);
+ return this.container;
+ }
+
+}
+
+class PushButtonWidgetAnnotationElement extends LinkAnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ ignoreBorder: parameters.data.hasAppearance
+ });
+ }
+
+ render() {
+ const container = super.render();
+ container.className = "buttonWidgetAnnotation pushButton";
+
+ if (this.data.alternativeText) {
+ container.title = this.data.alternativeText;
+ }
+
+ return container;
+ }
+
+}
+
+class ChoiceWidgetAnnotationElement extends WidgetAnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: parameters.renderForms
+ });
+ }
+
+ render() {
+ this.container.className = "choiceWidgetAnnotation";
+ const storage = this.annotationStorage;
+ const id = this.data.id;
+ storage.getValue(id, {
+ value: this.data.fieldValue.length > 0 ? this.data.fieldValue[0] : undefined
+ });
+ let {
+ fontSize
+ } = this.data.defaultAppearanceData;
+
+ if (!fontSize) {
+ fontSize = 9;
+ }
+
+ const fontSizeStyle = `calc(${fontSize}px * var(--zoom-factor))`;
+ const selectElement = document.createElement("select");
+ GetElementsByNameSet.add(selectElement);
+ selectElement.disabled = this.data.readOnly;
+ selectElement.name = this.data.fieldName;
+ selectElement.setAttribute("id", id);
+ selectElement.tabIndex = DEFAULT_TAB_INDEX;
+ selectElement.style.fontSize = `${fontSize}px`;
+
+ if (!this.data.combo) {
+ selectElement.size = this.data.options.length;
+
+ if (this.data.multiSelect) {
+ selectElement.multiple = true;
+ }
+ }
+
+ selectElement.addEventListener("resetform", event => {
+ const defaultValue = this.data.defaultFieldValue;
+
+ for (const option of selectElement.options) {
+ option.selected = option.value === defaultValue;
+ }
+ });
+
+ for (const option of this.data.options) {
+ const optionElement = document.createElement("option");
+ optionElement.textContent = option.displayValue;
+ optionElement.value = option.exportValue;
+
+ if (this.data.combo) {
+ optionElement.style.fontSize = fontSizeStyle;
+ }
+
+ if (this.data.fieldValue.includes(option.exportValue)) {
+ optionElement.setAttribute("selected", true);
+ }
+
+ selectElement.appendChild(optionElement);
+ }
+
+ const getValue = (event, isExport) => {
+ const name = isExport ? "value" : "textContent";
+ const options = event.target.options;
+
+ if (!event.target.multiple) {
+ return options.selectedIndex === -1 ? null : options[options.selectedIndex][name];
+ }
+
+ return Array.prototype.filter.call(options, option => option.selected).map(option => option[name]);
+ };
+
+ const getItems = event => {
+ const options = event.target.options;
+ return Array.prototype.map.call(options, option => {
+ return {
+ displayValue: option.textContent,
+ exportValue: option.value
+ };
+ });
+ };
+
+ if (this.enableScripting && this.hasJSActions) {
+ selectElement.addEventListener("updatefromsandbox", jsEvent => {
+ const actions = {
+ value(event) {
+ const value = event.detail.value;
+ const values = new Set(Array.isArray(value) ? value : [value]);
+
+ for (const option of selectElement.options) {
+ option.selected = values.has(option.value);
+ }
+
+ storage.setValue(id, {
+ value: getValue(event, true)
+ });
+ },
+
+ multipleSelection(event) {
+ selectElement.multiple = true;
+ },
+
+ remove(event) {
+ const options = selectElement.options;
+ const index = event.detail.remove;
+ options[index].selected = false;
+ selectElement.remove(index);
+
+ if (options.length > 0) {
+ const i = Array.prototype.findIndex.call(options, option => option.selected);
+
+ if (i === -1) {
+ options[0].selected = true;
+ }
+ }
+
+ storage.setValue(id, {
+ value: getValue(event, true),
+ items: getItems(event)
+ });
+ },
+
+ clear(event) {
+ while (selectElement.length !== 0) {
+ selectElement.remove(0);
+ }
+
+ storage.setValue(id, {
+ value: null,
+ items: []
+ });
+ },
+
+ insert(event) {
+ const {
+ index,
+ displayValue,
+ exportValue
+ } = event.detail.insert;
+ const optionElement = document.createElement("option");
+ optionElement.textContent = displayValue;
+ optionElement.value = exportValue;
+ selectElement.insertBefore(optionElement, selectElement.children[index]);
+ storage.setValue(id, {
+ value: getValue(event, true),
+ items: getItems(event)
+ });
+ },
+
+ items(event) {
+ const {
+ items
+ } = event.detail;
+
+ while (selectElement.length !== 0) {
+ selectElement.remove(0);
+ }
+
+ for (const item of items) {
+ const {
+ displayValue,
+ exportValue
+ } = item;
+ const optionElement = document.createElement("option");
+ optionElement.textContent = displayValue;
+ optionElement.value = exportValue;
+ selectElement.appendChild(optionElement);
+ }
+
+ if (selectElement.options.length > 0) {
+ selectElement.options[0].selected = true;
+ }
+
+ storage.setValue(id, {
+ value: getValue(event, true),
+ items: getItems(event)
+ });
+ },
+
+ indices(event) {
+ const indices = new Set(event.detail.indices);
+
+ for (const option of event.target.options) {
+ option.selected = indices.has(option.index);
+ }
+
+ storage.setValue(id, {
+ value: getValue(event, true)
+ });
+ },
+
+ editable(event) {
+ event.target.disabled = !event.detail.editable;
+ }
+
+ };
+
+ this._dispatchEventFromSandbox(actions, jsEvent);
+ });
+ selectElement.addEventListener("input", event => {
+ const exportValue = getValue(event, true);
+ const value = getValue(event, false);
+ storage.setValue(id, {
+ value: exportValue
+ });
+ this.linkService.eventBus?.dispatch("dispatcheventinsandbox", {
+ source: this,
+ detail: {
+ id,
+ name: "Keystroke",
+ value,
+ changeEx: exportValue,
+ willCommit: true,
+ commitKey: 1,
+ keyDown: false
+ }
+ });
+ });
+
+ this._setEventListeners(selectElement, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"]], event => event.target.checked);
+ } else {
+ selectElement.addEventListener("input", function (event) {
+ storage.setValue(id, {
+ value: getValue(event)
+ });
+ });
+ }
+
+ this._setBackgroundColor(selectElement);
+
+ this.container.appendChild(selectElement);
+ return this.container;
+ }
+
+}
+
+class PopupAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable
+ });
+ }
+
+ render() {
+ const IGNORE_TYPES = ["Line", "Square", "Circle", "PolyLine", "Polygon", "Ink"];
+ this.container.className = "popupAnnotation";
+
+ if (IGNORE_TYPES.includes(this.data.parentType)) {
+ return this.container;
+ }
+
+ const selector = `[data-annotation-id="${this.data.parentId}"]`;
+ const parentElements = this.layer.querySelectorAll(selector);
+
+ if (parentElements.length === 0) {
+ return this.container;
+ }
+
+ const popup = new PopupElement({
+ container: this.container,
+ trigger: Array.from(parentElements),
+ color: this.data.color,
+ titleObj: this.data.titleObj,
+ modificationDate: this.data.modificationDate,
+ contentsObj: this.data.contentsObj,
+ richText: this.data.richText
+ });
+ const page = this.page;
+
+ const rect = _util.Util.normalizeRect([this.data.parentRect[0], page.view[3] - this.data.parentRect[1] + page.view[1], this.data.parentRect[2], page.view[3] - this.data.parentRect[3] + page.view[1]]);
+
+ const popupLeft = rect[0] + this.data.parentRect[2] - this.data.parentRect[0];
+ const popupTop = rect[1];
+ this.container.style.transformOrigin = `${-popupLeft}px ${-popupTop}px`;
+ this.container.style.left = `${popupLeft}px`;
+ this.container.style.top = `${popupTop}px`;
+ this.container.appendChild(popup.render());
+ return this.container;
+ }
+
+}
+
+class PopupElement {
+ constructor(parameters) {
+ this.container = parameters.container;
+ this.trigger = parameters.trigger;
+ this.color = parameters.color;
+ this.titleObj = parameters.titleObj;
+ this.modificationDate = parameters.modificationDate;
+ this.contentsObj = parameters.contentsObj;
+ this.richText = parameters.richText;
+ this.hideWrapper = parameters.hideWrapper || false;
+ this.pinned = false;
+ }
+
+ render() {
+ const BACKGROUND_ENLIGHT = 0.7;
+ const wrapper = document.createElement("div");
+ wrapper.className = "popupWrapper";
+ this.hideElement = this.hideWrapper ? wrapper : this.container;
+ this.hideElement.hidden = true;
+ const popup = document.createElement("div");
+ popup.className = "popup";
+ const color = this.color;
+
+ if (color) {
+ const r = BACKGROUND_ENLIGHT * (255 - color[0]) + color[0];
+ const g = BACKGROUND_ENLIGHT * (255 - color[1]) + color[1];
+ const b = BACKGROUND_ENLIGHT * (255 - color[2]) + color[2];
+ popup.style.backgroundColor = _util.Util.makeHexColor(r | 0, g | 0, b | 0);
+ }
+
+ const title = document.createElement("h1");
+ title.dir = this.titleObj.dir;
+ title.textContent = this.titleObj.str;
+ popup.appendChild(title);
+
+ const dateObject = _display_utils.PDFDateString.toDateObject(this.modificationDate);
+
+ if (dateObject) {
+ const modificationDate = document.createElement("span");
+ modificationDate.className = "popupDate";
+ modificationDate.textContent = "{{date}}, {{time}}";
+ modificationDate.dataset.l10nId = "annotation_date_string";
+ modificationDate.dataset.l10nArgs = JSON.stringify({
+ date: dateObject.toLocaleDateString(),
+ time: dateObject.toLocaleTimeString()
+ });
+ popup.appendChild(modificationDate);
+ }
+
+ if (this.richText?.str && (!this.contentsObj?.str || this.contentsObj.str === this.richText.str)) {
+ _xfa_layer.XfaLayer.render({
+ xfaHtml: this.richText.html,
+ intent: "richText",
+ div: popup
+ });
+
+ popup.lastChild.className = "richText popupContent";
+ } else {
+ const contents = this._formatContents(this.contentsObj);
+
+ popup.appendChild(contents);
+ }
+
+ if (!Array.isArray(this.trigger)) {
+ this.trigger = [this.trigger];
+ }
+
+ for (const element of this.trigger) {
+ element.addEventListener("click", this._toggle.bind(this));
+ element.addEventListener("mouseover", this._show.bind(this, false));
+ element.addEventListener("mouseout", this._hide.bind(this, false));
+ }
+
+ popup.addEventListener("click", this._hide.bind(this, true));
+ wrapper.appendChild(popup);
+ return wrapper;
+ }
+
+ _formatContents({
+ str,
+ dir
+ }) {
+ const p = document.createElement("p");
+ p.className = "popupContent";
+ p.dir = dir;
+ const lines = str.split(/(?:\r\n?|\n)/);
+
+ for (let i = 0, ii = lines.length; i < ii; ++i) {
+ const line = lines[i];
+ p.appendChild(document.createTextNode(line));
+
+ if (i < ii - 1) {
+ p.appendChild(document.createElement("br"));
+ }
+ }
+
+ return p;
+ }
+
+ _toggle() {
+ if (this.pinned) {
+ this._hide(true);
+ } else {
+ this._show(true);
+ }
+ }
+
+ _show(pin = false) {
+ if (pin) {
+ this.pinned = true;
+ }
+
+ if (this.hideElement.hidden) {
+ this.hideElement.hidden = false;
+ this.container.style.zIndex += 1;
+ }
+ }
+
+ _hide(unpin = true) {
+ if (unpin) {
+ this.pinned = false;
+ }
+
+ if (!this.hideElement.hidden && !this.pinned) {
+ this.hideElement.hidden = true;
+ this.container.style.zIndex -= 1;
+ }
+ }
+
+}
+
+class FreeTextAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ render() {
+ this.container.className = "freeTextAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class LineAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ render() {
+ this.container.className = "lineAnnotation";
+ const data = this.data;
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ const svg = this.svgFactory.create(width, height);
+ const line = this.svgFactory.createElement("svg:line");
+ line.setAttribute("x1", data.rect[2] - data.lineCoordinates[0]);
+ line.setAttribute("y1", data.rect[3] - data.lineCoordinates[1]);
+ line.setAttribute("x2", data.rect[2] - data.lineCoordinates[2]);
+ line.setAttribute("y2", data.rect[3] - data.lineCoordinates[3]);
+ line.setAttribute("stroke-width", data.borderStyle.width || 1);
+ line.setAttribute("stroke", "transparent");
+ line.setAttribute("fill", "transparent");
+ svg.appendChild(line);
+ this.container.append(svg);
+
+ this._createPopup(line, data);
+
+ return this.container;
+ }
+
+}
+
+class SquareAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ render() {
+ this.container.className = "squareAnnotation";
+ const data = this.data;
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ const svg = this.svgFactory.create(width, height);
+ const borderWidth = data.borderStyle.width;
+ const square = this.svgFactory.createElement("svg:rect");
+ square.setAttribute("x", borderWidth / 2);
+ square.setAttribute("y", borderWidth / 2);
+ square.setAttribute("width", width - borderWidth);
+ square.setAttribute("height", height - borderWidth);
+ square.setAttribute("stroke-width", borderWidth || 1);
+ square.setAttribute("stroke", "transparent");
+ square.setAttribute("fill", "transparent");
+ svg.appendChild(square);
+ this.container.append(svg);
+
+ this._createPopup(square, data);
+
+ return this.container;
+ }
+
+}
+
+class CircleAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ render() {
+ this.container.className = "circleAnnotation";
+ const data = this.data;
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ const svg = this.svgFactory.create(width, height);
+ const borderWidth = data.borderStyle.width;
+ const circle = this.svgFactory.createElement("svg:ellipse");
+ circle.setAttribute("cx", width / 2);
+ circle.setAttribute("cy", height / 2);
+ circle.setAttribute("rx", width / 2 - borderWidth / 2);
+ circle.setAttribute("ry", height / 2 - borderWidth / 2);
+ circle.setAttribute("stroke-width", borderWidth || 1);
+ circle.setAttribute("stroke", "transparent");
+ circle.setAttribute("fill", "transparent");
+ svg.appendChild(circle);
+ this.container.append(svg);
+
+ this._createPopup(circle, data);
+
+ return this.container;
+ }
+
+}
+
+class PolylineAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true
+ });
+ this.containerClassName = "polylineAnnotation";
+ this.svgElementName = "svg:polyline";
+ }
+
+ render() {
+ this.container.className = this.containerClassName;
+ const data = this.data;
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ const svg = this.svgFactory.create(width, height);
+ let points = [];
+
+ for (const coordinate of data.vertices) {
+ const x = coordinate.x - data.rect[0];
+ const y = data.rect[3] - coordinate.y;
+ points.push(x + "," + y);
+ }
+
+ points = points.join(" ");
+ const polyline = this.svgFactory.createElement(this.svgElementName);
+ polyline.setAttribute("points", points);
+ polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
+ polyline.setAttribute("stroke", "transparent");
+ polyline.setAttribute("fill", "transparent");
+ svg.appendChild(polyline);
+ this.container.append(svg);
+
+ this._createPopup(polyline, data);
+
+ return this.container;
+ }
+
+}
+
+class PolygonAnnotationElement extends PolylineAnnotationElement {
+ constructor(parameters) {
+ super(parameters);
+ this.containerClassName = "polygonAnnotation";
+ this.svgElementName = "svg:polygon";
+ }
+
+}
+
+class CaretAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ render() {
+ this.container.className = "caretAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class InkAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true
+ });
+ this.containerClassName = "inkAnnotation";
+ this.svgElementName = "svg:polyline";
+ }
+
+ render() {
+ this.container.className = this.containerClassName;
+ const data = this.data;
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+ const svg = this.svgFactory.create(width, height);
+
+ for (const inkList of data.inkLists) {
+ let points = [];
+
+ for (const coordinate of inkList) {
+ const x = coordinate.x - data.rect[0];
+ const y = data.rect[3] - coordinate.y;
+ points.push(`${x},${y}`);
+ }
+
+ points = points.join(" ");
+ const polyline = this.svgFactory.createElement(this.svgElementName);
+ polyline.setAttribute("points", points);
+ polyline.setAttribute("stroke-width", data.borderStyle.width || 1);
+ polyline.setAttribute("stroke", "transparent");
+ polyline.setAttribute("fill", "transparent");
+
+ this._createPopup(polyline, data);
+
+ svg.appendChild(polyline);
+ }
+
+ this.container.append(svg);
+ return this.container;
+ }
+
+}
+
+class HighlightAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true,
+ createQuadrilaterals: true
+ });
+ }
+
+ render() {
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("highlightAnnotation");
+ }
+
+ this.container.className = "highlightAnnotation";
+ return this.container;
+ }
+
+}
+
+class UnderlineAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true,
+ createQuadrilaterals: true
+ });
+ }
+
+ render() {
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("underlineAnnotation");
+ }
+
+ this.container.className = "underlineAnnotation";
+ return this.container;
+ }
+
+}
+
+class SquigglyAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true,
+ createQuadrilaterals: true
+ });
+ }
+
+ render() {
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("squigglyAnnotation");
+ }
+
+ this.container.className = "squigglyAnnotation";
+ return this.container;
+ }
+
+}
+
+class StrikeOutAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true,
+ createQuadrilaterals: true
+ });
+ }
+
+ render() {
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ if (this.quadrilaterals) {
+ return this._renderQuadrilaterals("strikeoutAnnotation");
+ }
+
+ this.container.className = "strikeoutAnnotation";
+ return this.container;
+ }
+
+}
+
+class StampAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ const isRenderable = !!(parameters.data.hasPopup || parameters.data.titleObj?.str || parameters.data.contentsObj?.str || parameters.data.richText?.str);
+ super(parameters, {
+ isRenderable,
+ ignoreBorder: true
+ });
+ }
+
+ render() {
+ this.container.className = "stampAnnotation";
+
+ if (!this.data.hasPopup) {
+ this._createPopup(null, this.data);
+ }
+
+ return this.container;
+ }
+
+}
+
+class FileAttachmentAnnotationElement extends AnnotationElement {
+ constructor(parameters) {
+ super(parameters, {
+ isRenderable: true
+ });
+ const {
+ filename,
+ content
+ } = this.data.file;
+ this.filename = (0, _display_utils.getFilenameFromUrl)(filename);
+ this.content = content;
+ this.linkService.eventBus?.dispatch("fileattachmentannotation", {
+ source: this,
+ id: (0, _util.stringToPDFString)(filename),
+ filename,
+ content
+ });
+ }
+
+ render() {
+ this.container.className = "fileAttachmentAnnotation";
+ const trigger = document.createElement("div");
+ trigger.style.height = this.container.style.height;
+ trigger.style.width = this.container.style.width;
+ trigger.addEventListener("dblclick", this._download.bind(this));
+
+ if (!this.data.hasPopup && (this.data.titleObj?.str || this.data.contentsObj?.str || this.data.richText)) {
+ this._createPopup(trigger, this.data);
+ }
+
+ this.container.appendChild(trigger);
+ return this.container;
+ }
+
+ _download() {
+ this.downloadManager?.openOrDownloadData(this.container, this.content, this.filename);
+ }
+
+}
+
+class AnnotationLayer {
+ static render(parameters) {
+ const sortedAnnotations = [],
+ popupAnnotations = [];
+
+ for (const data of parameters.annotations) {
+ if (!data) {
+ continue;
+ }
+
+ const {
+ width,
+ height
+ } = getRectDims(data.rect);
+
+ if (width <= 0 || height <= 0) {
+ continue;
+ }
+
+ if (data.annotationType === _util.AnnotationType.POPUP) {
+ popupAnnotations.push(data);
+ continue;
+ }
+
+ sortedAnnotations.push(data);
+ }
+
+ if (popupAnnotations.length) {
+ sortedAnnotations.push(...popupAnnotations);
+ }
+
+ const div = parameters.div;
+
+ for (const data of sortedAnnotations) {
+ const element = AnnotationElementFactory.create({
+ data,
+ layer: div,
+ page: parameters.page,
+ viewport: parameters.viewport,
+ linkService: parameters.linkService,
+ downloadManager: parameters.downloadManager,
+ imageResourcesPath: parameters.imageResourcesPath || "",
+ renderForms: parameters.renderForms !== false,
+ svgFactory: new _display_utils.DOMSVGFactory(),
+ annotationStorage: parameters.annotationStorage || new _annotation_storage.AnnotationStorage(),
+ enableScripting: parameters.enableScripting,
+ hasJSActions: parameters.hasJSActions,
+ fieldObjects: parameters.fieldObjects,
+ mouseState: parameters.mouseState || {
+ isDown: false
+ }
+ });
+
+ if (element.isRenderable) {
+ const rendered = element.render();
+
+ if (data.hidden) {
+ rendered.style.visibility = "hidden";
+ }
+
+ if (Array.isArray(rendered)) {
+ for (const renderedElement of rendered) {
+ div.appendChild(renderedElement);
+ }
+ } else {
+ if (element instanceof PopupAnnotationElement) {
+ div.prepend(rendered);
+ } else {
+ div.appendChild(rendered);
+ }
+ }
+ }
+ }
+
+ this.#setAnnotationCanvasMap(div, parameters.annotationCanvasMap);
+ }
+
+ static update(parameters) {
+ const {
+ page,
+ viewport,
+ annotations,
+ annotationCanvasMap,
+ div
+ } = parameters;
+ const transform = viewport.transform;
+ const matrix = `matrix(${transform.join(",")})`;
+ let scale, ownMatrix;
+
+ for (const data of annotations) {
+ const elements = div.querySelectorAll(`[data-annotation-id="${data.id}"]`);
+
+ if (elements) {
+ for (const element of elements) {
+ if (data.hasOwnCanvas) {
+ const rect = _util.Util.normalizeRect([data.rect[0], page.view[3] - data.rect[1] + page.view[1], data.rect[2], page.view[3] - data.rect[3] + page.view[1]]);
+
+ if (!ownMatrix) {
+ scale = Math.abs(transform[0] || transform[1]);
+ const ownTransform = transform.slice();
+
+ for (let i = 0; i < 4; i++) {
+ ownTransform[i] = Math.sign(ownTransform[i]);
+ }
+
+ ownMatrix = `matrix(${ownTransform.join(",")})`;
+ }
+
+ const left = rect[0] * scale;
+ const top = rect[1] * scale;
+ element.style.left = `${left}px`;
+ element.style.top = `${top}px`;
+ element.style.transformOrigin = `${-left}px ${-top}px`;
+ element.style.transform = ownMatrix;
+ } else {
+ element.style.transform = matrix;
+ }
+ }
+ }
+ }
+
+ this.#setAnnotationCanvasMap(div, annotationCanvasMap);
+ div.hidden = false;
+ }
+
+ static #setAnnotationCanvasMap(div, annotationCanvasMap) {
+ if (!annotationCanvasMap) {
+ return;
+ }
+
+ for (const [id, canvas] of annotationCanvasMap) {
+ const element = div.querySelector(`[data-annotation-id="${id}"]`);
+
+ if (!element) {
+ continue;
+ }
+
+ const {
+ firstChild
+ } = element;
+
+ if (firstChild.nodeName === "CANVAS") {
+ element.replaceChild(canvas, firstChild);
+ } else {
+ element.insertBefore(canvas, firstChild);
+ }
+ }
+
+ annotationCanvasMap.clear();
+ }
+
+}
+
+exports.AnnotationLayer = AnnotationLayer;
+
+/***/ }),
+/* 19 */
+/***/ ((__unused_webpack_module, exports) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.ColorConverters = void 0;
+
+function makeColorComp(n) {
+ return Math.floor(Math.max(0, Math.min(1, n)) * 255).toString(16).padStart(2, "0");
+}
+
+class ColorConverters {
+ static CMYK_G([c, y, m, k]) {
+ return ["G", 1 - Math.min(1, 0.3 * c + 0.59 * m + 0.11 * y + k)];
+ }
+
+ static G_CMYK([g]) {
+ return ["CMYK", 0, 0, 0, 1 - g];
+ }
+
+ static G_RGB([g]) {
+ return ["RGB", g, g, g];
+ }
+
+ static G_HTML([g]) {
+ const G = makeColorComp(g);
+ return `#${G}${G}${G}`;
+ }
+
+ static RGB_G([r, g, b]) {
+ return ["G", 0.3 * r + 0.59 * g + 0.11 * b];
+ }
+
+ static RGB_HTML([r, g, b]) {
+ const R = makeColorComp(r);
+ const G = makeColorComp(g);
+ const B = makeColorComp(b);
+ return `#${R}${G}${B}`;
+ }
+
+ static T_HTML() {
+ return "#00000000";
+ }
+
+ static CMYK_RGB([c, y, m, k]) {
+ return ["RGB", 1 - Math.min(1, c + k), 1 - Math.min(1, m + k), 1 - Math.min(1, y + k)];
+ }
+
+ static CMYK_HTML(components) {
+ return this.RGB_HTML(this.CMYK_RGB(components));
+ }
+
+ static RGB_CMYK([r, g, b]) {
+ const c = 1 - r;
+ const m = 1 - g;
+ const y = 1 - b;
+ const k = Math.min(c, m, y);
+ return ["CMYK", c, m, y, k];
+ }
+
+}
+
+exports.ColorConverters = ColorConverters;
+
+/***/ }),
+/* 20 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.XfaLayer = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _xfa_text = __w_pdfjs_require__(17);
+
+class XfaLayer {
+ static setupStorage(html, id, element, storage, intent) {
+ const storedData = storage.getValue(id, {
+ value: null
+ });
+
+ switch (element.name) {
+ case "textarea":
+ if (storedData.value !== null) {
+ html.textContent = storedData.value;
+ }
+
+ if (intent === "print") {
+ break;
+ }
+
+ html.addEventListener("input", event => {
+ storage.setValue(id, {
+ value: event.target.value
+ });
+ });
+ break;
+
+ case "input":
+ if (element.attributes.type === "radio" || element.attributes.type === "checkbox") {
+ if (storedData.value === element.attributes.xfaOn) {
+ html.setAttribute("checked", true);
+ } else if (storedData.value === element.attributes.xfaOff) {
+ html.removeAttribute("checked");
+ }
+
+ if (intent === "print") {
+ break;
+ }
+
+ html.addEventListener("change", event => {
+ storage.setValue(id, {
+ value: event.target.checked ? event.target.getAttribute("xfaOn") : event.target.getAttribute("xfaOff")
+ });
+ });
+ } else {
+ if (storedData.value !== null) {
+ html.setAttribute("value", storedData.value);
+ }
+
+ if (intent === "print") {
+ break;
+ }
+
+ html.addEventListener("input", event => {
+ storage.setValue(id, {
+ value: event.target.value
+ });
+ });
+ }
+
+ break;
+
+ case "select":
+ if (storedData.value !== null) {
+ for (const option of element.children) {
+ if (option.attributes.value === storedData.value) {
+ option.attributes.selected = true;
+ }
+ }
+ }
+
+ html.addEventListener("input", event => {
+ const options = event.target.options;
+ const value = options.selectedIndex === -1 ? "" : options[options.selectedIndex].value;
+ storage.setValue(id, {
+ value
+ });
+ });
+ break;
+ }
+ }
+
+ static setAttributes({
+ html,
+ element,
+ storage = null,
+ intent,
+ linkService
+ }) {
+ const {
+ attributes
+ } = element;
+ const isHTMLAnchorElement = html instanceof HTMLAnchorElement;
+
+ if (attributes.type === "radio") {
+ attributes.name = `${attributes.name}-${intent}`;
+ }
+
+ for (const [key, value] of Object.entries(attributes)) {
+ if (value === null || value === undefined || key === "dataId") {
+ continue;
+ }
+
+ if (key !== "style") {
+ if (key === "textContent") {
+ html.textContent = value;
+ } else if (key === "class") {
+ if (value.length) {
+ html.setAttribute(key, value.join(" "));
+ }
+ } else {
+ if (isHTMLAnchorElement && (key === "href" || key === "newWindow")) {
+ continue;
+ }
+
+ html.setAttribute(key, value);
+ }
+ } else {
+ Object.assign(html.style, value);
+ }
+ }
+
+ if (isHTMLAnchorElement) {
+ if (!linkService.addLinkAttributes) {
+ (0, _util.warn)("XfaLayer.setAttribute - missing `addLinkAttributes`-method on the `linkService`-instance.");
+ }
+
+ linkService.addLinkAttributes?.(html, attributes.href, attributes.newWindow);
+ }
+
+ if (storage && attributes.dataId) {
+ this.setupStorage(html, attributes.dataId, element, storage);
+ }
+ }
+
+ static render(parameters) {
+ const storage = parameters.annotationStorage;
+ const linkService = parameters.linkService;
+ const root = parameters.xfaHtml;
+ const intent = parameters.intent || "display";
+ const rootHtml = document.createElement(root.name);
+
+ if (root.attributes) {
+ this.setAttributes({
+ html: rootHtml,
+ element: root,
+ intent,
+ linkService
+ });
+ }
+
+ const stack = [[root, -1, rootHtml]];
+ const rootDiv = parameters.div;
+ rootDiv.appendChild(rootHtml);
+
+ if (parameters.viewport) {
+ const transform = `matrix(${parameters.viewport.transform.join(",")})`;
+ rootDiv.style.transform = transform;
+ }
+
+ if (intent !== "richText") {
+ rootDiv.setAttribute("class", "xfaLayer xfaFont");
+ }
+
+ const textDivs = [];
+
+ while (stack.length > 0) {
+ const [parent, i, html] = stack[stack.length - 1];
+
+ if (i + 1 === parent.children.length) {
+ stack.pop();
+ continue;
+ }
+
+ const child = parent.children[++stack[stack.length - 1][1]];
+
+ if (child === null) {
+ continue;
+ }
+
+ const {
+ name
+ } = child;
+
+ if (name === "#text") {
+ const node = document.createTextNode(child.value);
+ textDivs.push(node);
+ html.appendChild(node);
+ continue;
+ }
+
+ let childHtml;
+
+ if (child?.attributes?.xmlns) {
+ childHtml = document.createElementNS(child.attributes.xmlns, name);
+ } else {
+ childHtml = document.createElement(name);
+ }
+
+ html.appendChild(childHtml);
+
+ if (child.attributes) {
+ this.setAttributes({
+ html: childHtml,
+ element: child,
+ storage,
+ intent,
+ linkService
+ });
+ }
+
+ if (child.children && child.children.length > 0) {
+ stack.push([child, -1, childHtml]);
+ } else if (child.value) {
+ const node = document.createTextNode(child.value);
+
+ if (_xfa_text.XfaText.shouldBuildText(name)) {
+ textDivs.push(node);
+ }
+
+ childHtml.appendChild(node);
+ }
+ }
+
+ for (const el of rootDiv.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea")) {
+ el.setAttribute("readOnly", true);
+ }
+
+ return {
+ textDivs
+ };
+ }
+
+ static update(parameters) {
+ const transform = `matrix(${parameters.viewport.transform.join(",")})`;
+ parameters.div.style.transform = transform;
+ parameters.div.hidden = false;
+ }
+
+}
+
+exports.XfaLayer = XfaLayer;
+
+/***/ }),
+/* 21 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.renderTextLayer = renderTextLayer;
+
+var _util = __w_pdfjs_require__(1);
+
+const MAX_TEXT_DIVS_TO_RENDER = 100000;
+const DEFAULT_FONT_SIZE = 30;
+const DEFAULT_FONT_ASCENT = 0.8;
+const ascentCache = new Map();
+const AllWhitespaceRegexp = /^\s+$/g;
+
+function getAscent(fontFamily, ctx) {
+ const cachedAscent = ascentCache.get(fontFamily);
+
+ if (cachedAscent) {
+ return cachedAscent;
+ }
+
+ ctx.save();
+ ctx.font = `${DEFAULT_FONT_SIZE}px ${fontFamily}`;
+ const metrics = ctx.measureText("");
+ let ascent = metrics.fontBoundingBoxAscent;
+ let descent = Math.abs(metrics.fontBoundingBoxDescent);
+
+ if (ascent) {
+ ctx.restore();
+ const ratio = ascent / (ascent + descent);
+ ascentCache.set(fontFamily, ratio);
+ return ratio;
+ }
+
+ ctx.strokeStyle = "red";
+ ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
+ ctx.strokeText("g", 0, 0);
+ let pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
+ descent = 0;
+
+ for (let i = pixels.length - 1 - 3; i >= 0; i -= 4) {
+ if (pixels[i] > 0) {
+ descent = Math.ceil(i / 4 / DEFAULT_FONT_SIZE);
+ break;
+ }
+ }
+
+ ctx.clearRect(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE);
+ ctx.strokeText("A", 0, DEFAULT_FONT_SIZE);
+ pixels = ctx.getImageData(0, 0, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE).data;
+ ascent = 0;
+
+ for (let i = 0, ii = pixels.length; i < ii; i += 4) {
+ if (pixels[i] > 0) {
+ ascent = DEFAULT_FONT_SIZE - Math.floor(i / 4 / DEFAULT_FONT_SIZE);
+ break;
+ }
+ }
+
+ ctx.restore();
+
+ if (ascent) {
+ const ratio = ascent / (ascent + descent);
+ ascentCache.set(fontFamily, ratio);
+ return ratio;
+ }
+
+ ascentCache.set(fontFamily, DEFAULT_FONT_ASCENT);
+ return DEFAULT_FONT_ASCENT;
+}
+
+function appendText(task, geom, styles, ctx) {
+ const textDiv = document.createElement("span");
+ const textDivProperties = task._enhanceTextSelection ? {
+ angle: 0,
+ canvasWidth: 0,
+ hasText: geom.str !== "",
+ hasEOL: geom.hasEOL,
+ originalTransform: null,
+ paddingBottom: 0,
+ paddingLeft: 0,
+ paddingRight: 0,
+ paddingTop: 0,
+ scale: 1
+ } : {
+ angle: 0,
+ canvasWidth: 0,
+ hasText: geom.str !== "",
+ hasEOL: geom.hasEOL
+ };
+
+ task._textDivs.push(textDiv);
+
+ const tx = _util.Util.transform(task._viewport.transform, geom.transform);
+
+ let angle = Math.atan2(tx[1], tx[0]);
+ const style = styles[geom.fontName];
+
+ if (style.vertical) {
+ angle += Math.PI / 2;
+ }
+
+ const fontHeight = Math.hypot(tx[2], tx[3]);
+ const fontAscent = fontHeight * getAscent(style.fontFamily, ctx);
+ let left, top;
+
+ if (angle === 0) {
+ left = tx[4];
+ top = tx[5] - fontAscent;
+ } else {
+ left = tx[4] + fontAscent * Math.sin(angle);
+ top = tx[5] - fontAscent * Math.cos(angle);
+ }
+
+ textDiv.style.left = `${left}px`;
+ textDiv.style.top = `${top}px`;
+ textDiv.style.fontSize = `${fontHeight}px`;
+ textDiv.style.fontFamily = style.fontFamily;
+ textDiv.setAttribute("role", "presentation");
+ textDiv.textContent = geom.str;
+ textDiv.dir = geom.dir;
+
+ if (task._fontInspectorEnabled) {
+ textDiv.dataset.fontName = geom.fontName;
+ }
+
+ if (angle !== 0) {
+ textDivProperties.angle = angle * (180 / Math.PI);
+ }
+
+ let shouldScaleText = false;
+
+ if (geom.str.length > 1 || task._enhanceTextSelection && AllWhitespaceRegexp.test(geom.str)) {
+ shouldScaleText = true;
+ } else if (geom.str !== " " && geom.transform[0] !== geom.transform[3]) {
+ const absScaleX = Math.abs(geom.transform[0]),
+ absScaleY = Math.abs(geom.transform[3]);
+
+ if (absScaleX !== absScaleY && Math.max(absScaleX, absScaleY) / Math.min(absScaleX, absScaleY) > 1.5) {
+ shouldScaleText = true;
+ }
+ }
+
+ if (shouldScaleText) {
+ if (style.vertical) {
+ textDivProperties.canvasWidth = geom.height * task._viewport.scale;
+ } else {
+ textDivProperties.canvasWidth = geom.width * task._viewport.scale;
+ }
+ }
+
+ task._textDivProperties.set(textDiv, textDivProperties);
+
+ if (task._textContentStream) {
+ task._layoutText(textDiv);
+ }
+
+ if (task._enhanceTextSelection && textDivProperties.hasText) {
+ let angleCos = 1,
+ angleSin = 0;
+
+ if (angle !== 0) {
+ angleCos = Math.cos(angle);
+ angleSin = Math.sin(angle);
+ }
+
+ const divWidth = (style.vertical ? geom.height : geom.width) * task._viewport.scale;
+ const divHeight = fontHeight;
+ let m, b;
+
+ if (angle !== 0) {
+ m = [angleCos, angleSin, -angleSin, angleCos, left, top];
+ b = _util.Util.getAxialAlignedBoundingBox([0, 0, divWidth, divHeight], m);
+ } else {
+ b = [left, top, left + divWidth, top + divHeight];
+ }
+
+ task._bounds.push({
+ left: b[0],
+ top: b[1],
+ right: b[2],
+ bottom: b[3],
+ div: textDiv,
+ size: [divWidth, divHeight],
+ m
+ });
+ }
+}
+
+function render(task) {
+ if (task._canceled) {
+ return;
+ }
+
+ const textDivs = task._textDivs;
+ const capability = task._capability;
+ const textDivsLength = textDivs.length;
+
+ if (textDivsLength > MAX_TEXT_DIVS_TO_RENDER) {
+ task._renderingDone = true;
+ capability.resolve();
+ return;
+ }
+
+ if (!task._textContentStream) {
+ for (let i = 0; i < textDivsLength; i++) {
+ task._layoutText(textDivs[i]);
+ }
+ }
+
+ task._renderingDone = true;
+ capability.resolve();
+}
+
+function findPositiveMin(ts, offset, count) {
+ let result = 0;
+
+ for (let i = 0; i < count; i++) {
+ const t = ts[offset++];
+
+ if (t > 0) {
+ result = result ? Math.min(t, result) : t;
+ }
+ }
+
+ return result;
+}
+
+function expand(task) {
+ const bounds = task._bounds;
+ const viewport = task._viewport;
+ const expanded = expandBounds(viewport.width, viewport.height, bounds);
+
+ for (let i = 0; i < expanded.length; i++) {
+ const div = bounds[i].div;
+
+ const divProperties = task._textDivProperties.get(div);
+
+ if (divProperties.angle === 0) {
+ divProperties.paddingLeft = bounds[i].left - expanded[i].left;
+ divProperties.paddingTop = bounds[i].top - expanded[i].top;
+ divProperties.paddingRight = expanded[i].right - bounds[i].right;
+ divProperties.paddingBottom = expanded[i].bottom - bounds[i].bottom;
+
+ task._textDivProperties.set(div, divProperties);
+
+ continue;
+ }
+
+ const e = expanded[i],
+ b = bounds[i];
+ const m = b.m,
+ c = m[0],
+ s = m[1];
+ const points = [[0, 0], [0, b.size[1]], [b.size[0], 0], b.size];
+ const ts = new Float64Array(64);
+
+ for (let j = 0, jj = points.length; j < jj; j++) {
+ const t = _util.Util.applyTransform(points[j], m);
+
+ ts[j + 0] = c && (e.left - t[0]) / c;
+ ts[j + 4] = s && (e.top - t[1]) / s;
+ ts[j + 8] = c && (e.right - t[0]) / c;
+ ts[j + 12] = s && (e.bottom - t[1]) / s;
+ ts[j + 16] = s && (e.left - t[0]) / -s;
+ ts[j + 20] = c && (e.top - t[1]) / c;
+ ts[j + 24] = s && (e.right - t[0]) / -s;
+ ts[j + 28] = c && (e.bottom - t[1]) / c;
+ ts[j + 32] = c && (e.left - t[0]) / -c;
+ ts[j + 36] = s && (e.top - t[1]) / -s;
+ ts[j + 40] = c && (e.right - t[0]) / -c;
+ ts[j + 44] = s && (e.bottom - t[1]) / -s;
+ ts[j + 48] = s && (e.left - t[0]) / s;
+ ts[j + 52] = c && (e.top - t[1]) / -c;
+ ts[j + 56] = s && (e.right - t[0]) / s;
+ ts[j + 60] = c && (e.bottom - t[1]) / -c;
+ }
+
+ const boxScale = 1 + Math.min(Math.abs(c), Math.abs(s));
+ divProperties.paddingLeft = findPositiveMin(ts, 32, 16) / boxScale;
+ divProperties.paddingTop = findPositiveMin(ts, 48, 16) / boxScale;
+ divProperties.paddingRight = findPositiveMin(ts, 0, 16) / boxScale;
+ divProperties.paddingBottom = findPositiveMin(ts, 16, 16) / boxScale;
+
+ task._textDivProperties.set(div, divProperties);
+ }
+}
+
+function expandBounds(width, height, boxes) {
+ const bounds = boxes.map(function (box, i) {
+ return {
+ x1: box.left,
+ y1: box.top,
+ x2: box.right,
+ y2: box.bottom,
+ index: i,
+ x1New: undefined,
+ x2New: undefined
+ };
+ });
+ expandBoundsLTR(width, bounds);
+ const expanded = new Array(boxes.length);
+
+ for (const b of bounds) {
+ const i = b.index;
+ expanded[i] = {
+ left: b.x1New,
+ top: 0,
+ right: b.x2New,
+ bottom: 0
+ };
+ }
+
+ boxes.map(function (box, i) {
+ const e = expanded[i],
+ b = bounds[i];
+ b.x1 = box.top;
+ b.y1 = width - e.right;
+ b.x2 = box.bottom;
+ b.y2 = width - e.left;
+ b.index = i;
+ b.x1New = undefined;
+ b.x2New = undefined;
+ });
+ expandBoundsLTR(height, bounds);
+
+ for (const b of bounds) {
+ const i = b.index;
+ expanded[i].top = b.x1New;
+ expanded[i].bottom = b.x2New;
+ }
+
+ return expanded;
+}
+
+function expandBoundsLTR(width, bounds) {
+ bounds.sort(function (a, b) {
+ return a.x1 - b.x1 || a.index - b.index;
+ });
+ const fakeBoundary = {
+ x1: -Infinity,
+ y1: -Infinity,
+ x2: 0,
+ y2: Infinity,
+ index: -1,
+ x1New: 0,
+ x2New: 0
+ };
+ const horizon = [{
+ start: -Infinity,
+ end: Infinity,
+ boundary: fakeBoundary
+ }];
+
+ for (const boundary of bounds) {
+ let i = 0;
+
+ while (i < horizon.length && horizon[i].end <= boundary.y1) {
+ i++;
+ }
+
+ let j = horizon.length - 1;
+
+ while (j >= 0 && horizon[j].start >= boundary.y2) {
+ j--;
+ }
+
+ let horizonPart, affectedBoundary;
+ let q,
+ k,
+ maxXNew = -Infinity;
+
+ for (q = i; q <= j; q++) {
+ horizonPart = horizon[q];
+ affectedBoundary = horizonPart.boundary;
+ let xNew;
+
+ if (affectedBoundary.x2 > boundary.x1) {
+ xNew = affectedBoundary.index > boundary.index ? affectedBoundary.x1New : boundary.x1;
+ } else if (affectedBoundary.x2New === undefined) {
+ xNew = (affectedBoundary.x2 + boundary.x1) / 2;
+ } else {
+ xNew = affectedBoundary.x2New;
+ }
+
+ if (xNew > maxXNew) {
+ maxXNew = xNew;
+ }
+ }
+
+ boundary.x1New = maxXNew;
+
+ for (q = i; q <= j; q++) {
+ horizonPart = horizon[q];
+ affectedBoundary = horizonPart.boundary;
+
+ if (affectedBoundary.x2New === undefined) {
+ if (affectedBoundary.x2 > boundary.x1) {
+ if (affectedBoundary.index > boundary.index) {
+ affectedBoundary.x2New = affectedBoundary.x2;
+ }
+ } else {
+ affectedBoundary.x2New = maxXNew;
+ }
+ } else if (affectedBoundary.x2New > maxXNew) {
+ affectedBoundary.x2New = Math.max(maxXNew, affectedBoundary.x2);
+ }
+ }
+
+ const changedHorizon = [];
+ let lastBoundary = null;
+
+ for (q = i; q <= j; q++) {
+ horizonPart = horizon[q];
+ affectedBoundary = horizonPart.boundary;
+ const useBoundary = affectedBoundary.x2 > boundary.x2 ? affectedBoundary : boundary;
+
+ if (lastBoundary === useBoundary) {
+ changedHorizon[changedHorizon.length - 1].end = horizonPart.end;
+ } else {
+ changedHorizon.push({
+ start: horizonPart.start,
+ end: horizonPart.end,
+ boundary: useBoundary
+ });
+ lastBoundary = useBoundary;
+ }
+ }
+
+ if (horizon[i].start < boundary.y1) {
+ changedHorizon[0].start = boundary.y1;
+ changedHorizon.unshift({
+ start: horizon[i].start,
+ end: boundary.y1,
+ boundary: horizon[i].boundary
+ });
+ }
+
+ if (boundary.y2 < horizon[j].end) {
+ changedHorizon[changedHorizon.length - 1].end = boundary.y2;
+ changedHorizon.push({
+ start: boundary.y2,
+ end: horizon[j].end,
+ boundary: horizon[j].boundary
+ });
+ }
+
+ for (q = i; q <= j; q++) {
+ horizonPart = horizon[q];
+ affectedBoundary = horizonPart.boundary;
+
+ if (affectedBoundary.x2New !== undefined) {
+ continue;
+ }
+
+ let used = false;
+
+ for (k = i - 1; !used && k >= 0 && horizon[k].start >= affectedBoundary.y1; k--) {
+ used = horizon[k].boundary === affectedBoundary;
+ }
+
+ for (k = j + 1; !used && k < horizon.length && horizon[k].end <= affectedBoundary.y2; k++) {
+ used = horizon[k].boundary === affectedBoundary;
+ }
+
+ for (k = 0; !used && k < changedHorizon.length; k++) {
+ used = changedHorizon[k].boundary === affectedBoundary;
+ }
+
+ if (!used) {
+ affectedBoundary.x2New = maxXNew;
+ }
+ }
+
+ Array.prototype.splice.apply(horizon, [i, j - i + 1].concat(changedHorizon));
+ }
+
+ for (const horizonPart of horizon) {
+ const affectedBoundary = horizonPart.boundary;
+
+ if (affectedBoundary.x2New === undefined) {
+ affectedBoundary.x2New = Math.max(width, affectedBoundary.x2);
+ }
+ }
+}
+
+class TextLayerRenderTask {
+ constructor({
+ textContent,
+ textContentStream,
+ container,
+ viewport,
+ textDivs,
+ textContentItemsStr,
+ enhanceTextSelection
+ }) {
+ this._textContent = textContent;
+ this._textContentStream = textContentStream;
+ this._container = container;
+ this._document = container.ownerDocument;
+ this._viewport = viewport;
+ this._textDivs = textDivs || [];
+ this._textContentItemsStr = textContentItemsStr || [];
+ this._enhanceTextSelection = !!enhanceTextSelection;
+ this._fontInspectorEnabled = !!globalThis.FontInspector?.enabled;
+ this._reader = null;
+ this._layoutTextLastFontSize = null;
+ this._layoutTextLastFontFamily = null;
+ this._layoutTextCtx = null;
+ this._textDivProperties = new WeakMap();
+ this._renderingDone = false;
+ this._canceled = false;
+ this._capability = (0, _util.createPromiseCapability)();
+ this._renderTimer = null;
+ this._bounds = [];
+
+ this._capability.promise.finally(() => {
+ if (!this._enhanceTextSelection) {
+ this._textDivProperties = null;
+ }
+
+ if (this._layoutTextCtx) {
+ this._layoutTextCtx.canvas.width = 0;
+ this._layoutTextCtx.canvas.height = 0;
+ this._layoutTextCtx = null;
+ }
+ }).catch(() => {});
+ }
+
+ get promise() {
+ return this._capability.promise;
+ }
+
+ cancel() {
+ this._canceled = true;
+
+ if (this._reader) {
+ this._reader.cancel(new _util.AbortException("TextLayer task cancelled.")).catch(() => {});
+
+ this._reader = null;
+ }
+
+ if (this._renderTimer !== null) {
+ clearTimeout(this._renderTimer);
+ this._renderTimer = null;
+ }
+
+ this._capability.reject(new Error("TextLayer task cancelled."));
+ }
+
+ _processItems(items, styleCache) {
+ for (let i = 0, len = items.length; i < len; i++) {
+ if (items[i].str === undefined) {
+ if (items[i].type === "beginMarkedContentProps" || items[i].type === "beginMarkedContent") {
+ const parent = this._container;
+ this._container = document.createElement("span");
+
+ this._container.classList.add("markedContent");
+
+ if (items[i].id !== null) {
+ this._container.setAttribute("id", `${items[i].id}`);
+ }
+
+ parent.appendChild(this._container);
+ } else if (items[i].type === "endMarkedContent") {
+ this._container = this._container.parentNode;
+ }
+
+ continue;
+ }
+
+ this._textContentItemsStr.push(items[i].str);
+
+ appendText(this, items[i], styleCache, this._layoutTextCtx);
+ }
+ }
+
+ _layoutText(textDiv) {
+ const textDivProperties = this._textDivProperties.get(textDiv);
+
+ let transform = "";
+
+ if (textDivProperties.canvasWidth !== 0 && textDivProperties.hasText) {
+ const {
+ fontSize,
+ fontFamily
+ } = textDiv.style;
+
+ if (fontSize !== this._layoutTextLastFontSize || fontFamily !== this._layoutTextLastFontFamily) {
+ this._layoutTextCtx.font = `${fontSize} ${fontFamily}`;
+ this._layoutTextLastFontSize = fontSize;
+ this._layoutTextLastFontFamily = fontFamily;
+ }
+
+ const {
+ width
+ } = this._layoutTextCtx.measureText(textDiv.textContent);
+
+ if (width > 0) {
+ const scale = textDivProperties.canvasWidth / width;
+
+ if (this._enhanceTextSelection) {
+ textDivProperties.scale = scale;
+ }
+
+ transform = `scaleX(${scale})`;
+ }
+ }
+
+ if (textDivProperties.angle !== 0) {
+ transform = `rotate(${textDivProperties.angle}deg) ${transform}`;
+ }
+
+ if (transform.length > 0) {
+ if (this._enhanceTextSelection) {
+ textDivProperties.originalTransform = transform;
+ }
+
+ textDiv.style.transform = transform;
+ }
+
+ if (textDivProperties.hasText) {
+ this._container.appendChild(textDiv);
+ }
+
+ if (textDivProperties.hasEOL) {
+ const br = document.createElement("br");
+ br.setAttribute("role", "presentation");
+
+ this._container.appendChild(br);
+ }
+ }
+
+ _render(timeout = 0) {
+ const capability = (0, _util.createPromiseCapability)();
+ let styleCache = Object.create(null);
+
+ const canvas = this._document.createElement("canvas");
+
+ canvas.height = canvas.width = DEFAULT_FONT_SIZE;
+ canvas.mozOpaque = true;
+ this._layoutTextCtx = canvas.getContext("2d", {
+ alpha: false
+ });
+
+ if (this._textContent) {
+ const textItems = this._textContent.items;
+ const textStyles = this._textContent.styles;
+
+ this._processItems(textItems, textStyles);
+
+ capability.resolve();
+ } else if (this._textContentStream) {
+ const pump = () => {
+ this._reader.read().then(({
+ value,
+ done
+ }) => {
+ if (done) {
+ capability.resolve();
+ return;
+ }
+
+ Object.assign(styleCache, value.styles);
+
+ this._processItems(value.items, styleCache);
+
+ pump();
+ }, capability.reject);
+ };
+
+ this._reader = this._textContentStream.getReader();
+ pump();
+ } else {
+ throw new Error('Neither "textContent" nor "textContentStream" parameters specified.');
+ }
+
+ capability.promise.then(() => {
+ styleCache = null;
+
+ if (!timeout) {
+ render(this);
+ } else {
+ this._renderTimer = setTimeout(() => {
+ render(this);
+ this._renderTimer = null;
+ }, timeout);
+ }
+ }, this._capability.reject);
+ }
+
+ expandTextDivs(expandDivs = false) {
+ if (!this._enhanceTextSelection || !this._renderingDone) {
+ return;
+ }
+
+ if (this._bounds !== null) {
+ expand(this);
+ this._bounds = null;
+ }
+
+ const transformBuf = [],
+ paddingBuf = [];
+
+ for (let i = 0, ii = this._textDivs.length; i < ii; i++) {
+ const div = this._textDivs[i];
+
+ const divProps = this._textDivProperties.get(div);
+
+ if (!divProps.hasText) {
+ continue;
+ }
+
+ if (expandDivs) {
+ transformBuf.length = 0;
+ paddingBuf.length = 0;
+
+ if (divProps.originalTransform) {
+ transformBuf.push(divProps.originalTransform);
+ }
+
+ if (divProps.paddingTop > 0) {
+ paddingBuf.push(`${divProps.paddingTop}px`);
+ transformBuf.push(`translateY(${-divProps.paddingTop}px)`);
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingRight > 0) {
+ paddingBuf.push(`${divProps.paddingRight / divProps.scale}px`);
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingBottom > 0) {
+ paddingBuf.push(`${divProps.paddingBottom}px`);
+ } else {
+ paddingBuf.push(0);
+ }
+
+ if (divProps.paddingLeft > 0) {
+ paddingBuf.push(`${divProps.paddingLeft / divProps.scale}px`);
+ transformBuf.push(`translateX(${-divProps.paddingLeft / divProps.scale}px)`);
+ } else {
+ paddingBuf.push(0);
+ }
+
+ div.style.padding = paddingBuf.join(" ");
+
+ if (transformBuf.length) {
+ div.style.transform = transformBuf.join(" ");
+ }
+ } else {
+ div.style.padding = null;
+ div.style.transform = divProps.originalTransform;
+ }
+ }
+ }
+
+}
+
+function renderTextLayer(renderParameters) {
+ const task = new TextLayerRenderTask({
+ textContent: renderParameters.textContent,
+ textContentStream: renderParameters.textContentStream,
+ container: renderParameters.container,
+ viewport: renderParameters.viewport,
+ textDivs: renderParameters.textDivs,
+ textContentItemsStr: renderParameters.textContentItemsStr,
+ enhanceTextSelection: renderParameters.enhanceTextSelection
+ });
+
+ task._render(renderParameters.timeout);
+
+ return task;
+}
+
+/***/ }),
+/* 22 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.SVGGraphics = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _display_utils = __w_pdfjs_require__(5);
+
+var _is_node = __w_pdfjs_require__(3);
+
+let SVGGraphics = class {
+ constructor() {
+ (0, _util.unreachable)("Not implemented: SVGGraphics");
+ }
+
+};
+exports.SVGGraphics = SVGGraphics;
+{
+ const SVG_DEFAULTS = {
+ fontStyle: "normal",
+ fontWeight: "normal",
+ fillColor: "#000000"
+ };
+ const XML_NS = "http://www.w3.org/XML/1998/namespace";
+ const XLINK_NS = "http://www.w3.org/1999/xlink";
+ const LINE_CAP_STYLES = ["butt", "round", "square"];
+ const LINE_JOIN_STYLES = ["miter", "round", "bevel"];
+
+ const createObjectURL = function (data, contentType = "", forceDataSchema = false) {
+ if (URL.createObjectURL && typeof Blob !== "undefined" && !forceDataSchema) {
+ return URL.createObjectURL(new Blob([data], {
+ type: contentType
+ }));
+ }
+
+ const digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
+ let buffer = `data:${contentType};base64,`;
+
+ for (let i = 0, ii = data.length; i < ii; i += 3) {
+ const b1 = data[i] & 0xff;
+ const b2 = data[i + 1] & 0xff;
+ const b3 = data[i + 2] & 0xff;
+ const d1 = b1 >> 2,
+ d2 = (b1 & 3) << 4 | b2 >> 4;
+ const d3 = i + 1 < ii ? (b2 & 0xf) << 2 | b3 >> 6 : 64;
+ const d4 = i + 2 < ii ? b3 & 0x3f : 64;
+ buffer += digits[d1] + digits[d2] + digits[d3] + digits[d4];
+ }
+
+ return buffer;
+ };
+
+ const convertImgDataToPng = function () {
+ const PNG_HEADER = new Uint8Array([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
+ const CHUNK_WRAPPER_SIZE = 12;
+ const crcTable = new Int32Array(256);
+
+ for (let i = 0; i < 256; i++) {
+ let c = i;
+
+ for (let h = 0; h < 8; h++) {
+ if (c & 1) {
+ c = 0xedb88320 ^ c >> 1 & 0x7fffffff;
+ } else {
+ c = c >> 1 & 0x7fffffff;
+ }
+ }
+
+ crcTable[i] = c;
+ }
+
+ function crc32(data, start, end) {
+ let crc = -1;
+
+ for (let i = start; i < end; i++) {
+ const a = (crc ^ data[i]) & 0xff;
+ const b = crcTable[a];
+ crc = crc >>> 8 ^ b;
+ }
+
+ return crc ^ -1;
+ }
+
+ function writePngChunk(type, body, data, offset) {
+ let p = offset;
+ const len = body.length;
+ data[p] = len >> 24 & 0xff;
+ data[p + 1] = len >> 16 & 0xff;
+ data[p + 2] = len >> 8 & 0xff;
+ data[p + 3] = len & 0xff;
+ p += 4;
+ data[p] = type.charCodeAt(0) & 0xff;
+ data[p + 1] = type.charCodeAt(1) & 0xff;
+ data[p + 2] = type.charCodeAt(2) & 0xff;
+ data[p + 3] = type.charCodeAt(3) & 0xff;
+ p += 4;
+ data.set(body, p);
+ p += body.length;
+ const crc = crc32(data, offset + 4, p);
+ data[p] = crc >> 24 & 0xff;
+ data[p + 1] = crc >> 16 & 0xff;
+ data[p + 2] = crc >> 8 & 0xff;
+ data[p + 3] = crc & 0xff;
+ }
+
+ function adler32(data, start, end) {
+ let a = 1;
+ let b = 0;
+
+ for (let i = start; i < end; ++i) {
+ a = (a + (data[i] & 0xff)) % 65521;
+ b = (b + a) % 65521;
+ }
+
+ return b << 16 | a;
+ }
+
+ function deflateSync(literals) {
+ if (!_is_node.isNodeJS) {
+ return deflateSyncUncompressed(literals);
+ }
+
+ try {
+ let input;
+
+ if (parseInt(process.versions.node) >= 8) {
+ input = literals;
+ } else {
+ input = Buffer.from(literals);
+ }
+
+ const output = require("zlib").deflateSync(input, {
+ level: 9
+ });
+
+ return output instanceof Uint8Array ? output : new Uint8Array(output);
+ } catch (e) {
+ (0, _util.warn)("Not compressing PNG because zlib.deflateSync is unavailable: " + e);
+ }
+
+ return deflateSyncUncompressed(literals);
+ }
+
+ function deflateSyncUncompressed(literals) {
+ let len = literals.length;
+ const maxBlockLength = 0xffff;
+ const deflateBlocks = Math.ceil(len / maxBlockLength);
+ const idat = new Uint8Array(2 + len + deflateBlocks * 5 + 4);
+ let pi = 0;
+ idat[pi++] = 0x78;
+ idat[pi++] = 0x9c;
+ let pos = 0;
+
+ while (len > maxBlockLength) {
+ idat[pi++] = 0x00;
+ idat[pi++] = 0xff;
+ idat[pi++] = 0xff;
+ idat[pi++] = 0x00;
+ idat[pi++] = 0x00;
+ idat.set(literals.subarray(pos, pos + maxBlockLength), pi);
+ pi += maxBlockLength;
+ pos += maxBlockLength;
+ len -= maxBlockLength;
+ }
+
+ idat[pi++] = 0x01;
+ idat[pi++] = len & 0xff;
+ idat[pi++] = len >> 8 & 0xff;
+ idat[pi++] = ~len & 0xffff & 0xff;
+ idat[pi++] = (~len & 0xffff) >> 8 & 0xff;
+ idat.set(literals.subarray(pos), pi);
+ pi += literals.length - pos;
+ const adler = adler32(literals, 0, literals.length);
+ idat[pi++] = adler >> 24 & 0xff;
+ idat[pi++] = adler >> 16 & 0xff;
+ idat[pi++] = adler >> 8 & 0xff;
+ idat[pi++] = adler & 0xff;
+ return idat;
+ }
+
+ function encode(imgData, kind, forceDataSchema, isMask) {
+ const width = imgData.width;
+ const height = imgData.height;
+ let bitDepth, colorType, lineSize;
+ const bytes = imgData.data;
+
+ switch (kind) {
+ case _util.ImageKind.GRAYSCALE_1BPP:
+ colorType = 0;
+ bitDepth = 1;
+ lineSize = width + 7 >> 3;
+ break;
+
+ case _util.ImageKind.RGB_24BPP:
+ colorType = 2;
+ bitDepth = 8;
+ lineSize = width * 3;
+ break;
+
+ case _util.ImageKind.RGBA_32BPP:
+ colorType = 6;
+ bitDepth = 8;
+ lineSize = width * 4;
+ break;
+
+ default:
+ throw new Error("invalid format");
+ }
+
+ const literals = new Uint8Array((1 + lineSize) * height);
+ let offsetLiterals = 0,
+ offsetBytes = 0;
+
+ for (let y = 0; y < height; ++y) {
+ literals[offsetLiterals++] = 0;
+ literals.set(bytes.subarray(offsetBytes, offsetBytes + lineSize), offsetLiterals);
+ offsetBytes += lineSize;
+ offsetLiterals += lineSize;
+ }
+
+ if (kind === _util.ImageKind.GRAYSCALE_1BPP && isMask) {
+ offsetLiterals = 0;
+
+ for (let y = 0; y < height; y++) {
+ offsetLiterals++;
+
+ for (let i = 0; i < lineSize; i++) {
+ literals[offsetLiterals++] ^= 0xff;
+ }
+ }
+ }
+
+ const ihdr = new Uint8Array([width >> 24 & 0xff, width >> 16 & 0xff, width >> 8 & 0xff, width & 0xff, height >> 24 & 0xff, height >> 16 & 0xff, height >> 8 & 0xff, height & 0xff, bitDepth, colorType, 0x00, 0x00, 0x00]);
+ const idat = deflateSync(literals);
+ const pngLength = PNG_HEADER.length + CHUNK_WRAPPER_SIZE * 3 + ihdr.length + idat.length;
+ const data = new Uint8Array(pngLength);
+ let offset = 0;
+ data.set(PNG_HEADER, offset);
+ offset += PNG_HEADER.length;
+ writePngChunk("IHDR", ihdr, data, offset);
+ offset += CHUNK_WRAPPER_SIZE + ihdr.length;
+ writePngChunk("IDATA", idat, data, offset);
+ offset += CHUNK_WRAPPER_SIZE + idat.length;
+ writePngChunk("IEND", new Uint8Array(0), data, offset);
+ return createObjectURL(data, "image/png", forceDataSchema);
+ }
+
+ return function convertImgDataToPng(imgData, forceDataSchema, isMask) {
+ const kind = imgData.kind === undefined ? _util.ImageKind.GRAYSCALE_1BPP : imgData.kind;
+ return encode(imgData, kind, forceDataSchema, isMask);
+ };
+ }();
+
+ class SVGExtraState {
+ constructor() {
+ this.fontSizeScale = 1;
+ this.fontWeight = SVG_DEFAULTS.fontWeight;
+ this.fontSize = 0;
+ this.textMatrix = _util.IDENTITY_MATRIX;
+ this.fontMatrix = _util.FONT_IDENTITY_MATRIX;
+ this.leading = 0;
+ this.textRenderingMode = _util.TextRenderingMode.FILL;
+ this.textMatrixScale = 1;
+ this.x = 0;
+ this.y = 0;
+ this.lineX = 0;
+ this.lineY = 0;
+ this.charSpacing = 0;
+ this.wordSpacing = 0;
+ this.textHScale = 1;
+ this.textRise = 0;
+ this.fillColor = SVG_DEFAULTS.fillColor;
+ this.strokeColor = "#000000";
+ this.fillAlpha = 1;
+ this.strokeAlpha = 1;
+ this.lineWidth = 1;
+ this.lineJoin = "";
+ this.lineCap = "";
+ this.miterLimit = 0;
+ this.dashArray = [];
+ this.dashPhase = 0;
+ this.dependencies = [];
+ this.activeClipUrl = null;
+ this.clipGroup = null;
+ this.maskId = "";
+ }
+
+ clone() {
+ return Object.create(this);
+ }
+
+ setCurrentPoint(x, y) {
+ this.x = x;
+ this.y = y;
+ }
+
+ }
+
+ function opListToTree(opList) {
+ let opTree = [];
+ const tmp = [];
+
+ for (const opListElement of opList) {
+ if (opListElement.fn === "save") {
+ opTree.push({
+ fnId: 92,
+ fn: "group",
+ items: []
+ });
+ tmp.push(opTree);
+ opTree = opTree[opTree.length - 1].items;
+ continue;
+ }
+
+ if (opListElement.fn === "restore") {
+ opTree = tmp.pop();
+ } else {
+ opTree.push(opListElement);
+ }
+ }
+
+ return opTree;
+ }
+
+ function pf(value) {
+ if (Number.isInteger(value)) {
+ return value.toString();
+ }
+
+ const s = value.toFixed(10);
+ let i = s.length - 1;
+
+ if (s[i] !== "0") {
+ return s;
+ }
+
+ do {
+ i--;
+ } while (s[i] === "0");
+
+ return s.substring(0, s[i] === "." ? i : i + 1);
+ }
+
+ function pm(m) {
+ if (m[4] === 0 && m[5] === 0) {
+ if (m[1] === 0 && m[2] === 0) {
+ if (m[0] === 1 && m[3] === 1) {
+ return "";
+ }
+
+ return `scale(${pf(m[0])} ${pf(m[3])})`;
+ }
+
+ if (m[0] === m[3] && m[1] === -m[2]) {
+ const a = Math.acos(m[0]) * 180 / Math.PI;
+ return `rotate(${pf(a)})`;
+ }
+ } else {
+ if (m[0] === 1 && m[1] === 0 && m[2] === 0 && m[3] === 1) {
+ return `translate(${pf(m[4])} ${pf(m[5])})`;
+ }
+ }
+
+ return `matrix(${pf(m[0])} ${pf(m[1])} ${pf(m[2])} ${pf(m[3])} ${pf(m[4])} ` + `${pf(m[5])})`;
+ }
+
+ let clipCount = 0;
+ let maskCount = 0;
+ let shadingCount = 0;
+ exports.SVGGraphics = SVGGraphics = class {
+ constructor(commonObjs, objs, forceDataSchema = false) {
+ this.svgFactory = new _display_utils.DOMSVGFactory();
+ this.current = new SVGExtraState();
+ this.transformMatrix = _util.IDENTITY_MATRIX;
+ this.transformStack = [];
+ this.extraStack = [];
+ this.commonObjs = commonObjs;
+ this.objs = objs;
+ this.pendingClip = null;
+ this.pendingEOFill = false;
+ this.embedFonts = false;
+ this.embeddedFonts = Object.create(null);
+ this.cssStyle = null;
+ this.forceDataSchema = !!forceDataSchema;
+ this._operatorIdMapping = [];
+
+ for (const op in _util.OPS) {
+ this._operatorIdMapping[_util.OPS[op]] = op;
+ }
+ }
+
+ save() {
+ this.transformStack.push(this.transformMatrix);
+ const old = this.current;
+ this.extraStack.push(old);
+ this.current = old.clone();
+ }
+
+ restore() {
+ this.transformMatrix = this.transformStack.pop();
+ this.current = this.extraStack.pop();
+ this.pendingClip = null;
+ this.tgrp = null;
+ }
+
+ group(items) {
+ this.save();
+ this.executeOpTree(items);
+ this.restore();
+ }
+
+ loadDependencies(operatorList) {
+ const fnArray = operatorList.fnArray;
+ const argsArray = operatorList.argsArray;
+
+ for (let i = 0, ii = fnArray.length; i < ii; i++) {
+ if (fnArray[i] !== _util.OPS.dependency) {
+ continue;
+ }
+
+ for (const obj of argsArray[i]) {
+ const objsPool = obj.startsWith("g_") ? this.commonObjs : this.objs;
+ const promise = new Promise(resolve => {
+ objsPool.get(obj, resolve);
+ });
+ this.current.dependencies.push(promise);
+ }
+ }
+
+ return Promise.all(this.current.dependencies);
+ }
+
+ transform(a, b, c, d, e, f) {
+ const transformMatrix = [a, b, c, d, e, f];
+ this.transformMatrix = _util.Util.transform(this.transformMatrix, transformMatrix);
+ this.tgrp = null;
+ }
+
+ getSVG(operatorList, viewport) {
+ this.viewport = viewport;
+
+ const svgElement = this._initialize(viewport);
+
+ return this.loadDependencies(operatorList).then(() => {
+ this.transformMatrix = _util.IDENTITY_MATRIX;
+ this.executeOpTree(this.convertOpList(operatorList));
+ return svgElement;
+ });
+ }
+
+ convertOpList(operatorList) {
+ const operatorIdMapping = this._operatorIdMapping;
+ const argsArray = operatorList.argsArray;
+ const fnArray = operatorList.fnArray;
+ const opList = [];
+
+ for (let i = 0, ii = fnArray.length; i < ii; i++) {
+ const fnId = fnArray[i];
+ opList.push({
+ fnId,
+ fn: operatorIdMapping[fnId],
+ args: argsArray[i]
+ });
+ }
+
+ return opListToTree(opList);
+ }
+
+ executeOpTree(opTree) {
+ for (const opTreeElement of opTree) {
+ const fn = opTreeElement.fn;
+ const fnId = opTreeElement.fnId;
+ const args = opTreeElement.args;
+
+ switch (fnId | 0) {
+ case _util.OPS.beginText:
+ this.beginText();
+ break;
+
+ case _util.OPS.dependency:
+ break;
+
+ case _util.OPS.setLeading:
+ this.setLeading(args);
+ break;
+
+ case _util.OPS.setLeadingMoveText:
+ this.setLeadingMoveText(args[0], args[1]);
+ break;
+
+ case _util.OPS.setFont:
+ this.setFont(args);
+ break;
+
+ case _util.OPS.showText:
+ this.showText(args[0]);
+ break;
+
+ case _util.OPS.showSpacedText:
+ this.showText(args[0]);
+ break;
+
+ case _util.OPS.endText:
+ this.endText();
+ break;
+
+ case _util.OPS.moveText:
+ this.moveText(args[0], args[1]);
+ break;
+
+ case _util.OPS.setCharSpacing:
+ this.setCharSpacing(args[0]);
+ break;
+
+ case _util.OPS.setWordSpacing:
+ this.setWordSpacing(args[0]);
+ break;
+
+ case _util.OPS.setHScale:
+ this.setHScale(args[0]);
+ break;
+
+ case _util.OPS.setTextMatrix:
+ this.setTextMatrix(args[0], args[1], args[2], args[3], args[4], args[5]);
+ break;
+
+ case _util.OPS.setTextRise:
+ this.setTextRise(args[0]);
+ break;
+
+ case _util.OPS.setTextRenderingMode:
+ this.setTextRenderingMode(args[0]);
+ break;
+
+ case _util.OPS.setLineWidth:
+ this.setLineWidth(args[0]);
+ break;
+
+ case _util.OPS.setLineJoin:
+ this.setLineJoin(args[0]);
+ break;
+
+ case _util.OPS.setLineCap:
+ this.setLineCap(args[0]);
+ break;
+
+ case _util.OPS.setMiterLimit:
+ this.setMiterLimit(args[0]);
+ break;
+
+ case _util.OPS.setFillRGBColor:
+ this.setFillRGBColor(args[0], args[1], args[2]);
+ break;
+
+ case _util.OPS.setStrokeRGBColor:
+ this.setStrokeRGBColor(args[0], args[1], args[2]);
+ break;
+
+ case _util.OPS.setStrokeColorN:
+ this.setStrokeColorN(args);
+ break;
+
+ case _util.OPS.setFillColorN:
+ this.setFillColorN(args);
+ break;
+
+ case _util.OPS.shadingFill:
+ this.shadingFill(args[0]);
+ break;
+
+ case _util.OPS.setDash:
+ this.setDash(args[0], args[1]);
+ break;
+
+ case _util.OPS.setRenderingIntent:
+ this.setRenderingIntent(args[0]);
+ break;
+
+ case _util.OPS.setFlatness:
+ this.setFlatness(args[0]);
+ break;
+
+ case _util.OPS.setGState:
+ this.setGState(args[0]);
+ break;
+
+ case _util.OPS.fill:
+ this.fill();
+ break;
+
+ case _util.OPS.eoFill:
+ this.eoFill();
+ break;
+
+ case _util.OPS.stroke:
+ this.stroke();
+ break;
+
+ case _util.OPS.fillStroke:
+ this.fillStroke();
+ break;
+
+ case _util.OPS.eoFillStroke:
+ this.eoFillStroke();
+ break;
+
+ case _util.OPS.clip:
+ this.clip("nonzero");
+ break;
+
+ case _util.OPS.eoClip:
+ this.clip("evenodd");
+ break;
+
+ case _util.OPS.paintSolidColorImageMask:
+ this.paintSolidColorImageMask();
+ break;
+
+ case _util.OPS.paintImageXObject:
+ this.paintImageXObject(args[0]);
+ break;
+
+ case _util.OPS.paintInlineImageXObject:
+ this.paintInlineImageXObject(args[0]);
+ break;
+
+ case _util.OPS.paintImageMaskXObject:
+ this.paintImageMaskXObject(args[0]);
+ break;
+
+ case _util.OPS.paintFormXObjectBegin:
+ this.paintFormXObjectBegin(args[0], args[1]);
+ break;
+
+ case _util.OPS.paintFormXObjectEnd:
+ this.paintFormXObjectEnd();
+ break;
+
+ case _util.OPS.closePath:
+ this.closePath();
+ break;
+
+ case _util.OPS.closeStroke:
+ this.closeStroke();
+ break;
+
+ case _util.OPS.closeFillStroke:
+ this.closeFillStroke();
+ break;
+
+ case _util.OPS.closeEOFillStroke:
+ this.closeEOFillStroke();
+ break;
+
+ case _util.OPS.nextLine:
+ this.nextLine();
+ break;
+
+ case _util.OPS.transform:
+ this.transform(args[0], args[1], args[2], args[3], args[4], args[5]);
+ break;
+
+ case _util.OPS.constructPath:
+ this.constructPath(args[0], args[1]);
+ break;
+
+ case _util.OPS.endPath:
+ this.endPath();
+ break;
+
+ case 92:
+ this.group(opTreeElement.items);
+ break;
+
+ default:
+ (0, _util.warn)(`Unimplemented operator ${fn}`);
+ break;
+ }
+ }
+ }
+
+ setWordSpacing(wordSpacing) {
+ this.current.wordSpacing = wordSpacing;
+ }
+
+ setCharSpacing(charSpacing) {
+ this.current.charSpacing = charSpacing;
+ }
+
+ nextLine() {
+ this.moveText(0, this.current.leading);
+ }
+
+ setTextMatrix(a, b, c, d, e, f) {
+ const current = this.current;
+ current.textMatrix = current.lineMatrix = [a, b, c, d, e, f];
+ current.textMatrixScale = Math.hypot(a, b);
+ current.x = current.lineX = 0;
+ current.y = current.lineY = 0;
+ current.xcoords = [];
+ current.ycoords = [];
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ current.txtElement = this.svgFactory.createElement("svg:text");
+ current.txtElement.appendChild(current.tspan);
+ }
+
+ beginText() {
+ const current = this.current;
+ current.x = current.lineX = 0;
+ current.y = current.lineY = 0;
+ current.textMatrix = _util.IDENTITY_MATRIX;
+ current.lineMatrix = _util.IDENTITY_MATRIX;
+ current.textMatrixScale = 1;
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.txtElement = this.svgFactory.createElement("svg:text");
+ current.txtgrp = this.svgFactory.createElement("svg:g");
+ current.xcoords = [];
+ current.ycoords = [];
+ }
+
+ moveText(x, y) {
+ const current = this.current;
+ current.x = current.lineX += x;
+ current.y = current.lineY += y;
+ current.xcoords = [];
+ current.ycoords = [];
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ }
+
+ showText(glyphs) {
+ const current = this.current;
+ const font = current.font;
+ const fontSize = current.fontSize;
+
+ if (fontSize === 0) {
+ return;
+ }
+
+ const fontSizeScale = current.fontSizeScale;
+ const charSpacing = current.charSpacing;
+ const wordSpacing = current.wordSpacing;
+ const fontDirection = current.fontDirection;
+ const textHScale = current.textHScale * fontDirection;
+ const vertical = font.vertical;
+ const spacingDir = vertical ? 1 : -1;
+ const defaultVMetrics = font.defaultVMetrics;
+ const widthAdvanceScale = fontSize * current.fontMatrix[0];
+ let x = 0;
+
+ for (const glyph of glyphs) {
+ if (glyph === null) {
+ x += fontDirection * wordSpacing;
+ continue;
+ } else if (typeof glyph === "number") {
+ x += spacingDir * glyph * fontSize / 1000;
+ continue;
+ }
+
+ const spacing = (glyph.isSpace ? wordSpacing : 0) + charSpacing;
+ const character = glyph.fontChar;
+ let scaledX, scaledY;
+ let width = glyph.width;
+
+ if (vertical) {
+ let vx;
+ const vmetric = glyph.vmetric || defaultVMetrics;
+ vx = glyph.vmetric ? vmetric[1] : width * 0.5;
+ vx = -vx * widthAdvanceScale;
+ const vy = vmetric[2] * widthAdvanceScale;
+ width = vmetric ? -vmetric[0] : width;
+ scaledX = vx / fontSizeScale;
+ scaledY = (x + vy) / fontSizeScale;
+ } else {
+ scaledX = x / fontSizeScale;
+ scaledY = 0;
+ }
+
+ if (glyph.isInFont || font.missingFile) {
+ current.xcoords.push(current.x + scaledX);
+
+ if (vertical) {
+ current.ycoords.push(-current.y + scaledY);
+ }
+
+ current.tspan.textContent += character;
+ } else {}
+
+ let charWidth;
+
+ if (vertical) {
+ charWidth = width * widthAdvanceScale - spacing * fontDirection;
+ } else {
+ charWidth = width * widthAdvanceScale + spacing * fontDirection;
+ }
+
+ x += charWidth;
+ }
+
+ current.tspan.setAttributeNS(null, "x", current.xcoords.map(pf).join(" "));
+
+ if (vertical) {
+ current.tspan.setAttributeNS(null, "y", current.ycoords.map(pf).join(" "));
+ } else {
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ }
+
+ if (vertical) {
+ current.y -= x;
+ } else {
+ current.x += x * textHScale;
+ }
+
+ current.tspan.setAttributeNS(null, "font-family", current.fontFamily);
+ current.tspan.setAttributeNS(null, "font-size", `${pf(current.fontSize)}px`);
+
+ if (current.fontStyle !== SVG_DEFAULTS.fontStyle) {
+ current.tspan.setAttributeNS(null, "font-style", current.fontStyle);
+ }
+
+ if (current.fontWeight !== SVG_DEFAULTS.fontWeight) {
+ current.tspan.setAttributeNS(null, "font-weight", current.fontWeight);
+ }
+
+ const fillStrokeMode = current.textRenderingMode & _util.TextRenderingMode.FILL_STROKE_MASK;
+
+ if (fillStrokeMode === _util.TextRenderingMode.FILL || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ if (current.fillColor !== SVG_DEFAULTS.fillColor) {
+ current.tspan.setAttributeNS(null, "fill", current.fillColor);
+ }
+
+ if (current.fillAlpha < 1) {
+ current.tspan.setAttributeNS(null, "fill-opacity", current.fillAlpha);
+ }
+ } else if (current.textRenderingMode === _util.TextRenderingMode.ADD_TO_PATH) {
+ current.tspan.setAttributeNS(null, "fill", "transparent");
+ } else {
+ current.tspan.setAttributeNS(null, "fill", "none");
+ }
+
+ if (fillStrokeMode === _util.TextRenderingMode.STROKE || fillStrokeMode === _util.TextRenderingMode.FILL_STROKE) {
+ const lineWidthScale = 1 / (current.textMatrixScale || 1);
+
+ this._setStrokeAttributes(current.tspan, lineWidthScale);
+ }
+
+ let textMatrix = current.textMatrix;
+
+ if (current.textRise !== 0) {
+ textMatrix = textMatrix.slice();
+ textMatrix[5] += current.textRise;
+ }
+
+ current.txtElement.setAttributeNS(null, "transform", `${pm(textMatrix)} scale(${pf(textHScale)}, -1)`);
+ current.txtElement.setAttributeNS(XML_NS, "xml:space", "preserve");
+ current.txtElement.appendChild(current.tspan);
+ current.txtgrp.appendChild(current.txtElement);
+
+ this._ensureTransformGroup().appendChild(current.txtElement);
+ }
+
+ setLeadingMoveText(x, y) {
+ this.setLeading(-y);
+ this.moveText(x, y);
+ }
+
+ addFontStyle(fontObj) {
+ if (!fontObj.data) {
+ throw new Error("addFontStyle: No font data available, " + 'ensure that the "fontExtraProperties" API parameter is set.');
+ }
+
+ if (!this.cssStyle) {
+ this.cssStyle = this.svgFactory.createElement("svg:style");
+ this.cssStyle.setAttributeNS(null, "type", "text/css");
+ this.defs.appendChild(this.cssStyle);
+ }
+
+ const url = createObjectURL(fontObj.data, fontObj.mimetype, this.forceDataSchema);
+ this.cssStyle.textContent += `@font-face { font-family: "${fontObj.loadedName}";` + ` src: url(${url}); }\n`;
+ }
+
+ setFont(details) {
+ const current = this.current;
+ const fontObj = this.commonObjs.get(details[0]);
+ let size = details[1];
+ current.font = fontObj;
+
+ if (this.embedFonts && !fontObj.missingFile && !this.embeddedFonts[fontObj.loadedName]) {
+ this.addFontStyle(fontObj);
+ this.embeddedFonts[fontObj.loadedName] = fontObj;
+ }
+
+ current.fontMatrix = fontObj.fontMatrix || _util.FONT_IDENTITY_MATRIX;
+ let bold = "normal";
+
+ if (fontObj.black) {
+ bold = "900";
+ } else if (fontObj.bold) {
+ bold = "bold";
+ }
+
+ const italic = fontObj.italic ? "italic" : "normal";
+
+ if (size < 0) {
+ size = -size;
+ current.fontDirection = -1;
+ } else {
+ current.fontDirection = 1;
+ }
+
+ current.fontSize = size;
+ current.fontFamily = fontObj.loadedName;
+ current.fontWeight = bold;
+ current.fontStyle = italic;
+ current.tspan = this.svgFactory.createElement("svg:tspan");
+ current.tspan.setAttributeNS(null, "y", pf(-current.y));
+ current.xcoords = [];
+ current.ycoords = [];
+ }
+
+ endText() {
+ const current = this.current;
+
+ if (current.textRenderingMode & _util.TextRenderingMode.ADD_TO_PATH_FLAG && current.txtElement?.hasChildNodes()) {
+ current.element = current.txtElement;
+ this.clip("nonzero");
+ this.endPath();
+ }
+ }
+
+ setLineWidth(width) {
+ if (width > 0) {
+ this.current.lineWidth = width;
+ }
+ }
+
+ setLineCap(style) {
+ this.current.lineCap = LINE_CAP_STYLES[style];
+ }
+
+ setLineJoin(style) {
+ this.current.lineJoin = LINE_JOIN_STYLES[style];
+ }
+
+ setMiterLimit(limit) {
+ this.current.miterLimit = limit;
+ }
+
+ setStrokeAlpha(strokeAlpha) {
+ this.current.strokeAlpha = strokeAlpha;
+ }
+
+ setStrokeRGBColor(r, g, b) {
+ this.current.strokeColor = _util.Util.makeHexColor(r, g, b);
+ }
+
+ setFillAlpha(fillAlpha) {
+ this.current.fillAlpha = fillAlpha;
+ }
+
+ setFillRGBColor(r, g, b) {
+ this.current.fillColor = _util.Util.makeHexColor(r, g, b);
+ this.current.tspan = this.svgFactory.createElement("svg:tspan");
+ this.current.xcoords = [];
+ this.current.ycoords = [];
+ }
+
+ setStrokeColorN(args) {
+ this.current.strokeColor = this._makeColorN_Pattern(args);
+ }
+
+ setFillColorN(args) {
+ this.current.fillColor = this._makeColorN_Pattern(args);
+ }
+
+ shadingFill(args) {
+ const width = this.viewport.width;
+ const height = this.viewport.height;
+
+ const inv = _util.Util.inverseTransform(this.transformMatrix);
+
+ const bl = _util.Util.applyTransform([0, 0], inv);
+
+ const br = _util.Util.applyTransform([0, height], inv);
+
+ const ul = _util.Util.applyTransform([width, 0], inv);
+
+ const ur = _util.Util.applyTransform([width, height], inv);
+
+ const x0 = Math.min(bl[0], br[0], ul[0], ur[0]);
+ const y0 = Math.min(bl[1], br[1], ul[1], ur[1]);
+ const x1 = Math.max(bl[0], br[0], ul[0], ur[0]);
+ const y1 = Math.max(bl[1], br[1], ul[1], ur[1]);
+ const rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", x0);
+ rect.setAttributeNS(null, "y", y0);
+ rect.setAttributeNS(null, "width", x1 - x0);
+ rect.setAttributeNS(null, "height", y1 - y0);
+ rect.setAttributeNS(null, "fill", this._makeShadingPattern(args));
+
+ if (this.current.fillAlpha < 1) {
+ rect.setAttributeNS(null, "fill-opacity", this.current.fillAlpha);
+ }
+
+ this._ensureTransformGroup().appendChild(rect);
+ }
+
+ _makeColorN_Pattern(args) {
+ if (args[0] === "TilingPattern") {
+ return this._makeTilingPattern(args);
+ }
+
+ return this._makeShadingPattern(args);
+ }
+
+ _makeTilingPattern(args) {
+ const color = args[1];
+ const operatorList = args[2];
+ const matrix = args[3] || _util.IDENTITY_MATRIX;
+ const [x0, y0, x1, y1] = args[4];
+ const xstep = args[5];
+ const ystep = args[6];
+ const paintType = args[7];
+ const tilingId = `shading${shadingCount++}`;
+
+ const [tx0, ty0, tx1, ty1] = _util.Util.normalizeRect([..._util.Util.applyTransform([x0, y0], matrix), ..._util.Util.applyTransform([x1, y1], matrix)]);
+
+ const [xscale, yscale] = _util.Util.singularValueDecompose2dScale(matrix);
+
+ const txstep = xstep * xscale;
+ const tystep = ystep * yscale;
+ const tiling = this.svgFactory.createElement("svg:pattern");
+ tiling.setAttributeNS(null, "id", tilingId);
+ tiling.setAttributeNS(null, "patternUnits", "userSpaceOnUse");
+ tiling.setAttributeNS(null, "width", txstep);
+ tiling.setAttributeNS(null, "height", tystep);
+ tiling.setAttributeNS(null, "x", `${tx0}`);
+ tiling.setAttributeNS(null, "y", `${ty0}`);
+ const svg = this.svg;
+ const transformMatrix = this.transformMatrix;
+ const fillColor = this.current.fillColor;
+ const strokeColor = this.current.strokeColor;
+ const bbox = this.svgFactory.create(tx1 - tx0, ty1 - ty0);
+ this.svg = bbox;
+ this.transformMatrix = matrix;
+
+ if (paintType === 2) {
+ const cssColor = _util.Util.makeHexColor(...color);
+
+ this.current.fillColor = cssColor;
+ this.current.strokeColor = cssColor;
+ }
+
+ this.executeOpTree(this.convertOpList(operatorList));
+ this.svg = svg;
+ this.transformMatrix = transformMatrix;
+ this.current.fillColor = fillColor;
+ this.current.strokeColor = strokeColor;
+ tiling.appendChild(bbox.childNodes[0]);
+ this.defs.appendChild(tiling);
+ return `url(#${tilingId})`;
+ }
+
+ _makeShadingPattern(args) {
+ if (typeof args === "string") {
+ args = this.objs.get(args);
+ }
+
+ switch (args[0]) {
+ case "RadialAxial":
+ const shadingId = `shading${shadingCount++}`;
+ const colorStops = args[3];
+ let gradient;
+
+ switch (args[1]) {
+ case "axial":
+ const point0 = args[4];
+ const point1 = args[5];
+ gradient = this.svgFactory.createElement("svg:linearGradient");
+ gradient.setAttributeNS(null, "id", shadingId);
+ gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
+ gradient.setAttributeNS(null, "x1", point0[0]);
+ gradient.setAttributeNS(null, "y1", point0[1]);
+ gradient.setAttributeNS(null, "x2", point1[0]);
+ gradient.setAttributeNS(null, "y2", point1[1]);
+ break;
+
+ case "radial":
+ const focalPoint = args[4];
+ const circlePoint = args[5];
+ const focalRadius = args[6];
+ const circleRadius = args[7];
+ gradient = this.svgFactory.createElement("svg:radialGradient");
+ gradient.setAttributeNS(null, "id", shadingId);
+ gradient.setAttributeNS(null, "gradientUnits", "userSpaceOnUse");
+ gradient.setAttributeNS(null, "cx", circlePoint[0]);
+ gradient.setAttributeNS(null, "cy", circlePoint[1]);
+ gradient.setAttributeNS(null, "r", circleRadius);
+ gradient.setAttributeNS(null, "fx", focalPoint[0]);
+ gradient.setAttributeNS(null, "fy", focalPoint[1]);
+ gradient.setAttributeNS(null, "fr", focalRadius);
+ break;
+
+ default:
+ throw new Error(`Unknown RadialAxial type: ${args[1]}`);
+ }
+
+ for (const colorStop of colorStops) {
+ const stop = this.svgFactory.createElement("svg:stop");
+ stop.setAttributeNS(null, "offset", colorStop[0]);
+ stop.setAttributeNS(null, "stop-color", colorStop[1]);
+ gradient.appendChild(stop);
+ }
+
+ this.defs.appendChild(gradient);
+ return `url(#${shadingId})`;
+
+ case "Mesh":
+ (0, _util.warn)("Unimplemented pattern Mesh");
+ return null;
+
+ case "Dummy":
+ return "hotpink";
+
+ default:
+ throw new Error(`Unknown IR type: ${args[0]}`);
+ }
+ }
+
+ setDash(dashArray, dashPhase) {
+ this.current.dashArray = dashArray;
+ this.current.dashPhase = dashPhase;
+ }
+
+ constructPath(ops, args) {
+ const current = this.current;
+ let x = current.x,
+ y = current.y;
+ let d = [];
+ let j = 0;
+
+ for (const op of ops) {
+ switch (op | 0) {
+ case _util.OPS.rectangle:
+ x = args[j++];
+ y = args[j++];
+ const width = args[j++];
+ const height = args[j++];
+ const xw = x + width;
+ const yh = y + height;
+ d.push("M", pf(x), pf(y), "L", pf(xw), pf(y), "L", pf(xw), pf(yh), "L", pf(x), pf(yh), "Z");
+ break;
+
+ case _util.OPS.moveTo:
+ x = args[j++];
+ y = args[j++];
+ d.push("M", pf(x), pf(y));
+ break;
+
+ case _util.OPS.lineTo:
+ x = args[j++];
+ y = args[j++];
+ d.push("L", pf(x), pf(y));
+ break;
+
+ case _util.OPS.curveTo:
+ x = args[j + 4];
+ y = args[j + 5];
+ d.push("C", pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]), pf(x), pf(y));
+ j += 6;
+ break;
+
+ case _util.OPS.curveTo2:
+ d.push("C", pf(x), pf(y), pf(args[j]), pf(args[j + 1]), pf(args[j + 2]), pf(args[j + 3]));
+ x = args[j + 2];
+ y = args[j + 3];
+ j += 4;
+ break;
+
+ case _util.OPS.curveTo3:
+ x = args[j + 2];
+ y = args[j + 3];
+ d.push("C", pf(args[j]), pf(args[j + 1]), pf(x), pf(y), pf(x), pf(y));
+ j += 4;
+ break;
+
+ case _util.OPS.closePath:
+ d.push("Z");
+ break;
+ }
+ }
+
+ d = d.join(" ");
+
+ if (current.path && ops.length > 0 && ops[0] !== _util.OPS.rectangle && ops[0] !== _util.OPS.moveTo) {
+ d = current.path.getAttributeNS(null, "d") + d;
+ } else {
+ current.path = this.svgFactory.createElement("svg:path");
+
+ this._ensureTransformGroup().appendChild(current.path);
+ }
+
+ current.path.setAttributeNS(null, "d", d);
+ current.path.setAttributeNS(null, "fill", "none");
+ current.element = current.path;
+ current.setCurrentPoint(x, y);
+ }
+
+ endPath() {
+ const current = this.current;
+ current.path = null;
+
+ if (!this.pendingClip) {
+ return;
+ }
+
+ if (!current.element) {
+ this.pendingClip = null;
+ return;
+ }
+
+ const clipId = `clippath${clipCount++}`;
+ const clipPath = this.svgFactory.createElement("svg:clipPath");
+ clipPath.setAttributeNS(null, "id", clipId);
+ clipPath.setAttributeNS(null, "transform", pm(this.transformMatrix));
+ const clipElement = current.element.cloneNode(true);
+
+ if (this.pendingClip === "evenodd") {
+ clipElement.setAttributeNS(null, "clip-rule", "evenodd");
+ } else {
+ clipElement.setAttributeNS(null, "clip-rule", "nonzero");
+ }
+
+ this.pendingClip = null;
+ clipPath.appendChild(clipElement);
+ this.defs.appendChild(clipPath);
+
+ if (current.activeClipUrl) {
+ current.clipGroup = null;
+
+ for (const prev of this.extraStack) {
+ prev.clipGroup = null;
+ }
+
+ clipPath.setAttributeNS(null, "clip-path", current.activeClipUrl);
+ }
+
+ current.activeClipUrl = `url(#${clipId})`;
+ this.tgrp = null;
+ }
+
+ clip(type) {
+ this.pendingClip = type;
+ }
+
+ closePath() {
+ const current = this.current;
+
+ if (current.path) {
+ const d = `${current.path.getAttributeNS(null, "d")}Z`;
+ current.path.setAttributeNS(null, "d", d);
+ }
+ }
+
+ setLeading(leading) {
+ this.current.leading = -leading;
+ }
+
+ setTextRise(textRise) {
+ this.current.textRise = textRise;
+ }
+
+ setTextRenderingMode(textRenderingMode) {
+ this.current.textRenderingMode = textRenderingMode;
+ }
+
+ setHScale(scale) {
+ this.current.textHScale = scale / 100;
+ }
+
+ setRenderingIntent(intent) {}
+
+ setFlatness(flatness) {}
+
+ setGState(states) {
+ for (const [key, value] of states) {
+ switch (key) {
+ case "LW":
+ this.setLineWidth(value);
+ break;
+
+ case "LC":
+ this.setLineCap(value);
+ break;
+
+ case "LJ":
+ this.setLineJoin(value);
+ break;
+
+ case "ML":
+ this.setMiterLimit(value);
+ break;
+
+ case "D":
+ this.setDash(value[0], value[1]);
+ break;
+
+ case "RI":
+ this.setRenderingIntent(value);
+ break;
+
+ case "FL":
+ this.setFlatness(value);
+ break;
+
+ case "Font":
+ this.setFont(value);
+ break;
+
+ case "CA":
+ this.setStrokeAlpha(value);
+ break;
+
+ case "ca":
+ this.setFillAlpha(value);
+ break;
+
+ default:
+ (0, _util.warn)(`Unimplemented graphic state operator ${key}`);
+ break;
+ }
+ }
+ }
+
+ fill() {
+ const current = this.current;
+
+ if (current.element) {
+ current.element.setAttributeNS(null, "fill", current.fillColor);
+ current.element.setAttributeNS(null, "fill-opacity", current.fillAlpha);
+ this.endPath();
+ }
+ }
+
+ stroke() {
+ const current = this.current;
+
+ if (current.element) {
+ this._setStrokeAttributes(current.element);
+
+ current.element.setAttributeNS(null, "fill", "none");
+ this.endPath();
+ }
+ }
+
+ _setStrokeAttributes(element, lineWidthScale = 1) {
+ const current = this.current;
+ let dashArray = current.dashArray;
+
+ if (lineWidthScale !== 1 && dashArray.length > 0) {
+ dashArray = dashArray.map(function (value) {
+ return lineWidthScale * value;
+ });
+ }
+
+ element.setAttributeNS(null, "stroke", current.strokeColor);
+ element.setAttributeNS(null, "stroke-opacity", current.strokeAlpha);
+ element.setAttributeNS(null, "stroke-miterlimit", pf(current.miterLimit));
+ element.setAttributeNS(null, "stroke-linecap", current.lineCap);
+ element.setAttributeNS(null, "stroke-linejoin", current.lineJoin);
+ element.setAttributeNS(null, "stroke-width", pf(lineWidthScale * current.lineWidth) + "px");
+ element.setAttributeNS(null, "stroke-dasharray", dashArray.map(pf).join(" "));
+ element.setAttributeNS(null, "stroke-dashoffset", pf(lineWidthScale * current.dashPhase) + "px");
+ }
+
+ eoFill() {
+ if (this.current.element) {
+ this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
+ }
+
+ this.fill();
+ }
+
+ fillStroke() {
+ this.stroke();
+ this.fill();
+ }
+
+ eoFillStroke() {
+ if (this.current.element) {
+ this.current.element.setAttributeNS(null, "fill-rule", "evenodd");
+ }
+
+ this.fillStroke();
+ }
+
+ closeStroke() {
+ this.closePath();
+ this.stroke();
+ }
+
+ closeFillStroke() {
+ this.closePath();
+ this.fillStroke();
+ }
+
+ closeEOFillStroke() {
+ this.closePath();
+ this.eoFillStroke();
+ }
+
+ paintSolidColorImageMask() {
+ const rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", "0");
+ rect.setAttributeNS(null, "y", "0");
+ rect.setAttributeNS(null, "width", "1px");
+ rect.setAttributeNS(null, "height", "1px");
+ rect.setAttributeNS(null, "fill", this.current.fillColor);
+
+ this._ensureTransformGroup().appendChild(rect);
+ }
+
+ paintImageXObject(objId) {
+ const imgData = objId.startsWith("g_") ? this.commonObjs.get(objId) : this.objs.get(objId);
+
+ if (!imgData) {
+ (0, _util.warn)(`Dependent image with object ID ${objId} is not ready yet`);
+ return;
+ }
+
+ this.paintInlineImageXObject(imgData);
+ }
+
+ paintInlineImageXObject(imgData, mask) {
+ const width = imgData.width;
+ const height = imgData.height;
+ const imgSrc = convertImgDataToPng(imgData, this.forceDataSchema, !!mask);
+ const cliprect = this.svgFactory.createElement("svg:rect");
+ cliprect.setAttributeNS(null, "x", "0");
+ cliprect.setAttributeNS(null, "y", "0");
+ cliprect.setAttributeNS(null, "width", pf(width));
+ cliprect.setAttributeNS(null, "height", pf(height));
+ this.current.element = cliprect;
+ this.clip("nonzero");
+ const imgEl = this.svgFactory.createElement("svg:image");
+ imgEl.setAttributeNS(XLINK_NS, "xlink:href", imgSrc);
+ imgEl.setAttributeNS(null, "x", "0");
+ imgEl.setAttributeNS(null, "y", pf(-height));
+ imgEl.setAttributeNS(null, "width", pf(width) + "px");
+ imgEl.setAttributeNS(null, "height", pf(height) + "px");
+ imgEl.setAttributeNS(null, "transform", `scale(${pf(1 / width)} ${pf(-1 / height)})`);
+
+ if (mask) {
+ mask.appendChild(imgEl);
+ } else {
+ this._ensureTransformGroup().appendChild(imgEl);
+ }
+ }
+
+ paintImageMaskXObject(imgData) {
+ const current = this.current;
+ const width = imgData.width;
+ const height = imgData.height;
+ const fillColor = current.fillColor;
+ current.maskId = `mask${maskCount++}`;
+ const mask = this.svgFactory.createElement("svg:mask");
+ mask.setAttributeNS(null, "id", current.maskId);
+ const rect = this.svgFactory.createElement("svg:rect");
+ rect.setAttributeNS(null, "x", "0");
+ rect.setAttributeNS(null, "y", "0");
+ rect.setAttributeNS(null, "width", pf(width));
+ rect.setAttributeNS(null, "height", pf(height));
+ rect.setAttributeNS(null, "fill", fillColor);
+ rect.setAttributeNS(null, "mask", `url(#${current.maskId})`);
+ this.defs.appendChild(mask);
+
+ this._ensureTransformGroup().appendChild(rect);
+
+ this.paintInlineImageXObject(imgData, mask);
+ }
+
+ paintFormXObjectBegin(matrix, bbox) {
+ if (Array.isArray(matrix) && matrix.length === 6) {
+ this.transform(matrix[0], matrix[1], matrix[2], matrix[3], matrix[4], matrix[5]);
+ }
+
+ if (bbox) {
+ const width = bbox[2] - bbox[0];
+ const height = bbox[3] - bbox[1];
+ const cliprect = this.svgFactory.createElement("svg:rect");
+ cliprect.setAttributeNS(null, "x", bbox[0]);
+ cliprect.setAttributeNS(null, "y", bbox[1]);
+ cliprect.setAttributeNS(null, "width", pf(width));
+ cliprect.setAttributeNS(null, "height", pf(height));
+ this.current.element = cliprect;
+ this.clip("nonzero");
+ this.endPath();
+ }
+ }
+
+ paintFormXObjectEnd() {}
+
+ _initialize(viewport) {
+ const svg = this.svgFactory.create(viewport.width, viewport.height);
+ const definitions = this.svgFactory.createElement("svg:defs");
+ svg.appendChild(definitions);
+ this.defs = definitions;
+ const rootGroup = this.svgFactory.createElement("svg:g");
+ rootGroup.setAttributeNS(null, "transform", pm(viewport.transform));
+ svg.appendChild(rootGroup);
+ this.svg = rootGroup;
+ return svg;
+ }
+
+ _ensureClipGroup() {
+ if (!this.current.clipGroup) {
+ const clipGroup = this.svgFactory.createElement("svg:g");
+ clipGroup.setAttributeNS(null, "clip-path", this.current.activeClipUrl);
+ this.svg.appendChild(clipGroup);
+ this.current.clipGroup = clipGroup;
+ }
+
+ return this.current.clipGroup;
+ }
+
+ _ensureTransformGroup() {
+ if (!this.tgrp) {
+ this.tgrp = this.svgFactory.createElement("svg:g");
+ this.tgrp.setAttributeNS(null, "transform", pm(this.transformMatrix));
+
+ if (this.current.activeClipUrl) {
+ this._ensureClipGroup().appendChild(this.tgrp);
+ } else {
+ this.svg.appendChild(this.tgrp);
+ }
+ }
+
+ return this.tgrp;
+ }
+
+ };
+}
+
+/***/ }),
+/* 23 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFNodeStream = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _network_utils = __w_pdfjs_require__(24);
+
+;
+
+const fs = require("fs");
+
+const http = require("http");
+
+const https = require("https");
+
+const url = require("url");
+
+const fileUriRegex = /^file:\/\/\/[a-zA-Z]:\//;
+
+function parseUrl(sourceUrl) {
+ const parsedUrl = url.parse(sourceUrl);
+
+ if (parsedUrl.protocol === "file:" || parsedUrl.host) {
+ return parsedUrl;
+ }
+
+ if (/^[a-z]:[/\\]/i.test(sourceUrl)) {
+ return url.parse(`file:///${sourceUrl}`);
+ }
+
+ if (!parsedUrl.host) {
+ parsedUrl.protocol = "file:";
+ }
+
+ return parsedUrl;
+}
+
+class PDFNodeStream {
+ constructor(source) {
+ this.source = source;
+ this.url = parseUrl(source.url);
+ this.isHttp = this.url.protocol === "http:" || this.url.protocol === "https:";
+ this.isFsUrl = this.url.protocol === "file:";
+ this.httpHeaders = this.isHttp && source.httpHeaders || {};
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+
+ get _progressiveDataLength() {
+ return this._fullRequestReader?._loaded ?? 0;
+ }
+
+ getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once.");
+ this._fullRequestReader = this.isFsUrl ? new PDFNodeStreamFsFullReader(this) : new PDFNodeStreamFullReader(this);
+ return this._fullRequestReader;
+ }
+
+ getRangeReader(start, end) {
+ if (end <= this._progressiveDataLength) {
+ return null;
+ }
+
+ const rangeReader = this.isFsUrl ? new PDFNodeStreamFsRangeReader(this, start, end) : new PDFNodeStreamRangeReader(this, start, end);
+
+ this._rangeRequestReaders.push(rangeReader);
+
+ return rangeReader;
+ }
+
+ cancelAllRequests(reason) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ for (const reader of this._rangeRequestReaders.slice(0)) {
+ reader.cancel(reason);
+ }
+ }
+
+}
+
+exports.PDFNodeStream = PDFNodeStream;
+
+class BaseFullReader {
+ constructor(stream) {
+ this._url = stream.url;
+ this._done = false;
+ this._storedError = null;
+ this.onProgress = null;
+ const source = stream.source;
+ this._contentLength = source.length;
+ this._loaded = 0;
+ this._filename = null;
+ this._disableRange = source.disableRange || false;
+ this._rangeChunkSize = source.rangeChunkSize;
+
+ if (!this._rangeChunkSize && !this._disableRange) {
+ this._disableRange = true;
+ }
+
+ this._isStreamingSupported = !source.disableStream;
+ this._isRangeSupported = !source.disableRange;
+ this._readableStream = null;
+ this._readCapability = (0, _util.createPromiseCapability)();
+ this._headersCapability = (0, _util.createPromiseCapability)();
+ }
+
+ get headersReady() {
+ return this._headersCapability.promise;
+ }
+
+ get filename() {
+ return this._filename;
+ }
+
+ get contentLength() {
+ return this._contentLength;
+ }
+
+ get isRangeSupported() {
+ return this._isRangeSupported;
+ }
+
+ get isStreamingSupported() {
+ return this._isStreamingSupported;
+ }
+
+ async read() {
+ await this._readCapability.promise;
+
+ if (this._done) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ if (this._storedError) {
+ throw this._storedError;
+ }
+
+ const chunk = this._readableStream.read();
+
+ if (chunk === null) {
+ this._readCapability = (0, _util.createPromiseCapability)();
+ return this.read();
+ }
+
+ this._loaded += chunk.length;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded,
+ total: this._contentLength
+ });
+ }
+
+ const buffer = new Uint8Array(chunk).buffer;
+ return {
+ value: buffer,
+ done: false
+ };
+ }
+
+ cancel(reason) {
+ if (!this._readableStream) {
+ this._error(reason);
+
+ return;
+ }
+
+ this._readableStream.destroy(reason);
+ }
+
+ _error(reason) {
+ this._storedError = reason;
+
+ this._readCapability.resolve();
+ }
+
+ _setReadableStream(readableStream) {
+ this._readableStream = readableStream;
+ readableStream.on("readable", () => {
+ this._readCapability.resolve();
+ });
+ readableStream.on("end", () => {
+ readableStream.destroy();
+ this._done = true;
+
+ this._readCapability.resolve();
+ });
+ readableStream.on("error", reason => {
+ this._error(reason);
+ });
+
+ if (!this._isStreamingSupported && this._isRangeSupported) {
+ this._error(new _util.AbortException("streaming is disabled"));
+ }
+
+ if (this._storedError) {
+ this._readableStream.destroy(this._storedError);
+ }
+ }
+
+}
+
+class BaseRangeReader {
+ constructor(stream) {
+ this._url = stream.url;
+ this._done = false;
+ this._storedError = null;
+ this.onProgress = null;
+ this._loaded = 0;
+ this._readableStream = null;
+ this._readCapability = (0, _util.createPromiseCapability)();
+ const source = stream.source;
+ this._isStreamingSupported = !source.disableStream;
+ }
+
+ get isStreamingSupported() {
+ return this._isStreamingSupported;
+ }
+
+ async read() {
+ await this._readCapability.promise;
+
+ if (this._done) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ if (this._storedError) {
+ throw this._storedError;
+ }
+
+ const chunk = this._readableStream.read();
+
+ if (chunk === null) {
+ this._readCapability = (0, _util.createPromiseCapability)();
+ return this.read();
+ }
+
+ this._loaded += chunk.length;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded
+ });
+ }
+
+ const buffer = new Uint8Array(chunk).buffer;
+ return {
+ value: buffer,
+ done: false
+ };
+ }
+
+ cancel(reason) {
+ if (!this._readableStream) {
+ this._error(reason);
+
+ return;
+ }
+
+ this._readableStream.destroy(reason);
+ }
+
+ _error(reason) {
+ this._storedError = reason;
+
+ this._readCapability.resolve();
+ }
+
+ _setReadableStream(readableStream) {
+ this._readableStream = readableStream;
+ readableStream.on("readable", () => {
+ this._readCapability.resolve();
+ });
+ readableStream.on("end", () => {
+ readableStream.destroy();
+ this._done = true;
+
+ this._readCapability.resolve();
+ });
+ readableStream.on("error", reason => {
+ this._error(reason);
+ });
+
+ if (this._storedError) {
+ this._readableStream.destroy(this._storedError);
+ }
+ }
+
+}
+
+function createRequestOptions(parsedUrl, headers) {
+ return {
+ protocol: parsedUrl.protocol,
+ auth: parsedUrl.auth,
+ host: parsedUrl.hostname,
+ port: parsedUrl.port,
+ path: parsedUrl.path,
+ method: "GET",
+ headers
+ };
+}
+
+class PDFNodeStreamFullReader extends BaseFullReader {
+ constructor(stream) {
+ super(stream);
+
+ const handleResponse = response => {
+ if (response.statusCode === 404) {
+ const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`);
+ this._storedError = error;
+
+ this._headersCapability.reject(error);
+
+ return;
+ }
+
+ this._headersCapability.resolve();
+
+ this._setReadableStream(response);
+
+ const getResponseHeader = name => {
+ return this._readableStream.headers[name.toLowerCase()];
+ };
+
+ const {
+ allowRangeRequests,
+ suggestedLength
+ } = (0, _network_utils.validateRangeRequestCapabilities)({
+ getResponseHeader,
+ isHttp: stream.isHttp,
+ rangeChunkSize: this._rangeChunkSize,
+ disableRange: this._disableRange
+ });
+ this._isRangeSupported = allowRangeRequests;
+ this._contentLength = suggestedLength || this._contentLength;
+ this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
+ };
+
+ this._request = null;
+
+ if (this._url.protocol === "http:") {
+ this._request = http.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);
+ } else {
+ this._request = https.request(createRequestOptions(this._url, stream.httpHeaders), handleResponse);
+ }
+
+ this._request.on("error", reason => {
+ this._storedError = reason;
+
+ this._headersCapability.reject(reason);
+ });
+
+ this._request.end();
+ }
+
+}
+
+class PDFNodeStreamRangeReader extends BaseRangeReader {
+ constructor(stream, start, end) {
+ super(stream);
+ this._httpHeaders = {};
+
+ for (const property in stream.httpHeaders) {
+ const value = stream.httpHeaders[property];
+
+ if (typeof value === "undefined") {
+ continue;
+ }
+
+ this._httpHeaders[property] = value;
+ }
+
+ this._httpHeaders.Range = `bytes=${start}-${end - 1}`;
+
+ const handleResponse = response => {
+ if (response.statusCode === 404) {
+ const error = new _util.MissingPDFException(`Missing PDF "${this._url}".`);
+ this._storedError = error;
+ return;
+ }
+
+ this._setReadableStream(response);
+ };
+
+ this._request = null;
+
+ if (this._url.protocol === "http:") {
+ this._request = http.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);
+ } else {
+ this._request = https.request(createRequestOptions(this._url, this._httpHeaders), handleResponse);
+ }
+
+ this._request.on("error", reason => {
+ this._storedError = reason;
+ });
+
+ this._request.end();
+ }
+
+}
+
+class PDFNodeStreamFsFullReader extends BaseFullReader {
+ constructor(stream) {
+ super(stream);
+ let path = decodeURIComponent(this._url.path);
+
+ if (fileUriRegex.test(this._url.href)) {
+ path = path.replace(/^\//, "");
+ }
+
+ fs.lstat(path, (error, stat) => {
+ if (error) {
+ if (error.code === "ENOENT") {
+ error = new _util.MissingPDFException(`Missing PDF "${path}".`);
+ }
+
+ this._storedError = error;
+
+ this._headersCapability.reject(error);
+
+ return;
+ }
+
+ this._contentLength = stat.size;
+
+ this._setReadableStream(fs.createReadStream(path));
+
+ this._headersCapability.resolve();
+ });
+ }
+
+}
+
+class PDFNodeStreamFsRangeReader extends BaseRangeReader {
+ constructor(stream, start, end) {
+ super(stream);
+ let path = decodeURIComponent(this._url.path);
+
+ if (fileUriRegex.test(this._url.href)) {
+ path = path.replace(/^\//, "");
+ }
+
+ this._setReadableStream(fs.createReadStream(path, {
+ start,
+ end: end - 1
+ }));
+ }
+
+}
+
+/***/ }),
+/* 24 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.createResponseStatusError = createResponseStatusError;
+exports.extractFilenameFromHeader = extractFilenameFromHeader;
+exports.validateRangeRequestCapabilities = validateRangeRequestCapabilities;
+exports.validateResponseStatus = validateResponseStatus;
+
+var _util = __w_pdfjs_require__(1);
+
+var _content_disposition = __w_pdfjs_require__(25);
+
+var _display_utils = __w_pdfjs_require__(5);
+
+function validateRangeRequestCapabilities({
+ getResponseHeader,
+ isHttp,
+ rangeChunkSize,
+ disableRange
+}) {
+ (0, _util.assert)(rangeChunkSize > 0, "Range chunk size must be larger than zero");
+ const returnValues = {
+ allowRangeRequests: false,
+ suggestedLength: undefined
+ };
+ const length = parseInt(getResponseHeader("Content-Length"), 10);
+
+ if (!Number.isInteger(length)) {
+ return returnValues;
+ }
+
+ returnValues.suggestedLength = length;
+
+ if (length <= 2 * rangeChunkSize) {
+ return returnValues;
+ }
+
+ if (disableRange || !isHttp) {
+ return returnValues;
+ }
+
+ if (getResponseHeader("Accept-Ranges") !== "bytes") {
+ return returnValues;
+ }
+
+ const contentEncoding = getResponseHeader("Content-Encoding") || "identity";
+
+ if (contentEncoding !== "identity") {
+ return returnValues;
+ }
+
+ returnValues.allowRangeRequests = true;
+ return returnValues;
+}
+
+function extractFilenameFromHeader(getResponseHeader) {
+ const contentDisposition = getResponseHeader("Content-Disposition");
+
+ if (contentDisposition) {
+ let filename = (0, _content_disposition.getFilenameFromContentDispositionHeader)(contentDisposition);
+
+ if (filename.includes("%")) {
+ try {
+ filename = decodeURIComponent(filename);
+ } catch (ex) {}
+ }
+
+ if ((0, _display_utils.isPdfFile)(filename)) {
+ return filename;
+ }
+ }
+
+ return null;
+}
+
+function createResponseStatusError(status, url) {
+ if (status === 404 || status === 0 && url.startsWith("file:")) {
+ return new _util.MissingPDFException('Missing PDF "' + url + '".');
+ }
+
+ return new _util.UnexpectedResponseException(`Unexpected server response (${status}) while retrieving PDF "${url}".`, status);
+}
+
+function validateResponseStatus(status) {
+ return status === 200 || status === 206;
+}
+
+/***/ }),
+/* 25 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.getFilenameFromContentDispositionHeader = getFilenameFromContentDispositionHeader;
+
+var _util = __w_pdfjs_require__(1);
+
+function getFilenameFromContentDispositionHeader(contentDisposition) {
+ let needsEncodingFixup = true;
+ let tmp = toParamRegExp("filename\\*", "i").exec(contentDisposition);
+
+ if (tmp) {
+ tmp = tmp[1];
+ let filename = rfc2616unquote(tmp);
+ filename = unescape(filename);
+ filename = rfc5987decode(filename);
+ filename = rfc2047decode(filename);
+ return fixupEncoding(filename);
+ }
+
+ tmp = rfc2231getparam(contentDisposition);
+
+ if (tmp) {
+ const filename = rfc2047decode(tmp);
+ return fixupEncoding(filename);
+ }
+
+ tmp = toParamRegExp("filename", "i").exec(contentDisposition);
+
+ if (tmp) {
+ tmp = tmp[1];
+ let filename = rfc2616unquote(tmp);
+ filename = rfc2047decode(filename);
+ return fixupEncoding(filename);
+ }
+
+ function toParamRegExp(attributePattern, flags) {
+ return new RegExp("(?:^|;)\\s*" + attributePattern + "\\s*=\\s*" + "(" + '[^";\\s][^;\\s]*' + "|" + '"(?:[^"\\\\]|\\\\"?)+"?' + ")", flags);
+ }
+
+ function textdecode(encoding, value) {
+ if (encoding) {
+ if (!/^[\x00-\xFF]+$/.test(value)) {
+ return value;
+ }
+
+ try {
+ const decoder = new TextDecoder(encoding, {
+ fatal: true
+ });
+ const buffer = (0, _util.stringToBytes)(value);
+ value = decoder.decode(buffer);
+ needsEncodingFixup = false;
+ } catch (e) {}
+ }
+
+ return value;
+ }
+
+ function fixupEncoding(value) {
+ if (needsEncodingFixup && /[\x80-\xff]/.test(value)) {
+ value = textdecode("utf-8", value);
+
+ if (needsEncodingFixup) {
+ value = textdecode("iso-8859-1", value);
+ }
+ }
+
+ return value;
+ }
+
+ function rfc2231getparam(contentDispositionStr) {
+ const matches = [];
+ let match;
+ const iter = toParamRegExp("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");
+
+ while ((match = iter.exec(contentDispositionStr)) !== null) {
+ let [, n, quot, part] = match;
+ n = parseInt(n, 10);
+
+ if (n in matches) {
+ if (n === 0) {
+ break;
+ }
+
+ continue;
+ }
+
+ matches[n] = [quot, part];
+ }
+
+ const parts = [];
+
+ for (let n = 0; n < matches.length; ++n) {
+ if (!(n in matches)) {
+ break;
+ }
+
+ let [quot, part] = matches[n];
+ part = rfc2616unquote(part);
+
+ if (quot) {
+ part = unescape(part);
+
+ if (n === 0) {
+ part = rfc5987decode(part);
+ }
+ }
+
+ parts.push(part);
+ }
+
+ return parts.join("");
+ }
+
+ function rfc2616unquote(value) {
+ if (value.startsWith('"')) {
+ const parts = value.slice(1).split('\\"');
+
+ for (let i = 0; i < parts.length; ++i) {
+ const quotindex = parts[i].indexOf('"');
+
+ if (quotindex !== -1) {
+ parts[i] = parts[i].slice(0, quotindex);
+ parts.length = i + 1;
+ }
+
+ parts[i] = parts[i].replace(/\\(.)/g, "$1");
+ }
+
+ value = parts.join('"');
+ }
+
+ return value;
+ }
+
+ function rfc5987decode(extvalue) {
+ const encodingend = extvalue.indexOf("'");
+
+ if (encodingend === -1) {
+ return extvalue;
+ }
+
+ const encoding = extvalue.slice(0, encodingend);
+ const langvalue = extvalue.slice(encodingend + 1);
+ const value = langvalue.replace(/^[^']*'/, "");
+ return textdecode(encoding, value);
+ }
+
+ function rfc2047decode(value) {
+ if (!value.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(value)) {
+ return value;
+ }
+
+ return value.replace(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function (matches, charset, encoding, text) {
+ if (encoding === "q" || encoding === "Q") {
+ text = text.replace(/_/g, " ");
+ text = text.replace(/=([0-9a-fA-F]{2})/g, function (match, hex) {
+ return String.fromCharCode(parseInt(hex, 16));
+ });
+ return textdecode(charset, text);
+ }
+
+ try {
+ text = atob(text);
+ } catch (e) {}
+
+ return textdecode(charset, text);
+ });
+ }
+
+ return "";
+}
+
+/***/ }),
+/* 26 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFNetworkStream = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _network_utils = __w_pdfjs_require__(24);
+
+;
+const OK_RESPONSE = 200;
+const PARTIAL_CONTENT_RESPONSE = 206;
+
+function getArrayBuffer(xhr) {
+ const data = xhr.response;
+
+ if (typeof data !== "string") {
+ return data;
+ }
+
+ const array = (0, _util.stringToBytes)(data);
+ return array.buffer;
+}
+
+class NetworkManager {
+ constructor(url, args = {}) {
+ this.url = url;
+ this.isHttp = /^https?:/i.test(url);
+ this.httpHeaders = this.isHttp && args.httpHeaders || Object.create(null);
+ this.withCredentials = args.withCredentials || false;
+
+ this.getXhr = args.getXhr || function NetworkManager_getXhr() {
+ return new XMLHttpRequest();
+ };
+
+ this.currXhrId = 0;
+ this.pendingRequests = Object.create(null);
+ }
+
+ requestRange(begin, end, listeners) {
+ const args = {
+ begin,
+ end
+ };
+
+ for (const prop in listeners) {
+ args[prop] = listeners[prop];
+ }
+
+ return this.request(args);
+ }
+
+ requestFull(listeners) {
+ return this.request(listeners);
+ }
+
+ request(args) {
+ const xhr = this.getXhr();
+ const xhrId = this.currXhrId++;
+ const pendingRequest = this.pendingRequests[xhrId] = {
+ xhr
+ };
+ xhr.open("GET", this.url);
+ xhr.withCredentials = this.withCredentials;
+
+ for (const property in this.httpHeaders) {
+ const value = this.httpHeaders[property];
+
+ if (typeof value === "undefined") {
+ continue;
+ }
+
+ xhr.setRequestHeader(property, value);
+ }
+
+ if (this.isHttp && "begin" in args && "end" in args) {
+ xhr.setRequestHeader("Range", `bytes=${args.begin}-${args.end - 1}`);
+ pendingRequest.expectedStatus = PARTIAL_CONTENT_RESPONSE;
+ } else {
+ pendingRequest.expectedStatus = OK_RESPONSE;
+ }
+
+ xhr.responseType = "arraybuffer";
+
+ if (args.onError) {
+ xhr.onerror = function (evt) {
+ args.onError(xhr.status);
+ };
+ }
+
+ xhr.onreadystatechange = this.onStateChange.bind(this, xhrId);
+ xhr.onprogress = this.onProgress.bind(this, xhrId);
+ pendingRequest.onHeadersReceived = args.onHeadersReceived;
+ pendingRequest.onDone = args.onDone;
+ pendingRequest.onError = args.onError;
+ pendingRequest.onProgress = args.onProgress;
+ xhr.send(null);
+ return xhrId;
+ }
+
+ onProgress(xhrId, evt) {
+ const pendingRequest = this.pendingRequests[xhrId];
+
+ if (!pendingRequest) {
+ return;
+ }
+
+ pendingRequest.onProgress?.(evt);
+ }
+
+ onStateChange(xhrId, evt) {
+ const pendingRequest = this.pendingRequests[xhrId];
+
+ if (!pendingRequest) {
+ return;
+ }
+
+ const xhr = pendingRequest.xhr;
+
+ if (xhr.readyState >= 2 && pendingRequest.onHeadersReceived) {
+ pendingRequest.onHeadersReceived();
+ delete pendingRequest.onHeadersReceived;
+ }
+
+ if (xhr.readyState !== 4) {
+ return;
+ }
+
+ if (!(xhrId in this.pendingRequests)) {
+ return;
+ }
+
+ delete this.pendingRequests[xhrId];
+
+ if (xhr.status === 0 && this.isHttp) {
+ pendingRequest.onError?.(xhr.status);
+ return;
+ }
+
+ const xhrStatus = xhr.status || OK_RESPONSE;
+ const ok_response_on_range_request = xhrStatus === OK_RESPONSE && pendingRequest.expectedStatus === PARTIAL_CONTENT_RESPONSE;
+
+ if (!ok_response_on_range_request && xhrStatus !== pendingRequest.expectedStatus) {
+ pendingRequest.onError?.(xhr.status);
+ return;
+ }
+
+ const chunk = getArrayBuffer(xhr);
+
+ if (xhrStatus === PARTIAL_CONTENT_RESPONSE) {
+ const rangeHeader = xhr.getResponseHeader("Content-Range");
+ const matches = /bytes (\d+)-(\d+)\/(\d+)/.exec(rangeHeader);
+ pendingRequest.onDone({
+ begin: parseInt(matches[1], 10),
+ chunk
+ });
+ } else if (chunk) {
+ pendingRequest.onDone({
+ begin: 0,
+ chunk
+ });
+ } else {
+ pendingRequest.onError?.(xhr.status);
+ }
+ }
+
+ getRequestXhr(xhrId) {
+ return this.pendingRequests[xhrId].xhr;
+ }
+
+ isPendingRequest(xhrId) {
+ return xhrId in this.pendingRequests;
+ }
+
+ abortRequest(xhrId) {
+ const xhr = this.pendingRequests[xhrId].xhr;
+ delete this.pendingRequests[xhrId];
+ xhr.abort();
+ }
+
+}
+
+class PDFNetworkStream {
+ constructor(source) {
+ this._source = source;
+ this._manager = new NetworkManager(source.url, {
+ httpHeaders: source.httpHeaders,
+ withCredentials: source.withCredentials
+ });
+ this._rangeChunkSize = source.rangeChunkSize;
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+
+ _onRangeRequestReaderClosed(reader) {
+ const i = this._rangeRequestReaders.indexOf(reader);
+
+ if (i >= 0) {
+ this._rangeRequestReaders.splice(i, 1);
+ }
+ }
+
+ getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once.");
+ this._fullRequestReader = new PDFNetworkStreamFullRequestReader(this._manager, this._source);
+ return this._fullRequestReader;
+ }
+
+ getRangeReader(begin, end) {
+ const reader = new PDFNetworkStreamRangeRequestReader(this._manager, begin, end);
+ reader.onClosed = this._onRangeRequestReaderClosed.bind(this);
+
+ this._rangeRequestReaders.push(reader);
+
+ return reader;
+ }
+
+ cancelAllRequests(reason) {
+ this._fullRequestReader?.cancel(reason);
+
+ for (const reader of this._rangeRequestReaders.slice(0)) {
+ reader.cancel(reason);
+ }
+ }
+
+}
+
+exports.PDFNetworkStream = PDFNetworkStream;
+
+class PDFNetworkStreamFullRequestReader {
+ constructor(manager, source) {
+ this._manager = manager;
+ const args = {
+ onHeadersReceived: this._onHeadersReceived.bind(this),
+ onDone: this._onDone.bind(this),
+ onError: this._onError.bind(this),
+ onProgress: this._onProgress.bind(this)
+ };
+ this._url = source.url;
+ this._fullRequestId = manager.requestFull(args);
+ this._headersReceivedCapability = (0, _util.createPromiseCapability)();
+ this._disableRange = source.disableRange || false;
+ this._contentLength = source.length;
+ this._rangeChunkSize = source.rangeChunkSize;
+
+ if (!this._rangeChunkSize && !this._disableRange) {
+ this._disableRange = true;
+ }
+
+ this._isStreamingSupported = false;
+ this._isRangeSupported = false;
+ this._cachedChunks = [];
+ this._requests = [];
+ this._done = false;
+ this._storedError = undefined;
+ this._filename = null;
+ this.onProgress = null;
+ }
+
+ _onHeadersReceived() {
+ const fullRequestXhrId = this._fullRequestId;
+
+ const fullRequestXhr = this._manager.getRequestXhr(fullRequestXhrId);
+
+ const getResponseHeader = name => {
+ return fullRequestXhr.getResponseHeader(name);
+ };
+
+ const {
+ allowRangeRequests,
+ suggestedLength
+ } = (0, _network_utils.validateRangeRequestCapabilities)({
+ getResponseHeader,
+ isHttp: this._manager.isHttp,
+ rangeChunkSize: this._rangeChunkSize,
+ disableRange: this._disableRange
+ });
+
+ if (allowRangeRequests) {
+ this._isRangeSupported = true;
+ }
+
+ this._contentLength = suggestedLength || this._contentLength;
+ this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
+
+ if (this._isRangeSupported) {
+ this._manager.abortRequest(fullRequestXhrId);
+ }
+
+ this._headersReceivedCapability.resolve();
+ }
+
+ _onDone(data) {
+ if (data) {
+ if (this._requests.length > 0) {
+ const requestCapability = this._requests.shift();
+
+ requestCapability.resolve({
+ value: data.chunk,
+ done: false
+ });
+ } else {
+ this._cachedChunks.push(data.chunk);
+ }
+ }
+
+ this._done = true;
+
+ if (this._cachedChunks.length > 0) {
+ return;
+ }
+
+ for (const requestCapability of this._requests) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+
+ this._requests.length = 0;
+ }
+
+ _onError(status) {
+ this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);
+
+ this._headersReceivedCapability.reject(this._storedError);
+
+ for (const requestCapability of this._requests) {
+ requestCapability.reject(this._storedError);
+ }
+
+ this._requests.length = 0;
+ this._cachedChunks.length = 0;
+ }
+
+ _onProgress(evt) {
+ this.onProgress?.({
+ loaded: evt.loaded,
+ total: evt.lengthComputable ? evt.total : this._contentLength
+ });
+ }
+
+ get filename() {
+ return this._filename;
+ }
+
+ get isRangeSupported() {
+ return this._isRangeSupported;
+ }
+
+ get isStreamingSupported() {
+ return this._isStreamingSupported;
+ }
+
+ get contentLength() {
+ return this._contentLength;
+ }
+
+ get headersReady() {
+ return this._headersReceivedCapability.promise;
+ }
+
+ async read() {
+ if (this._storedError) {
+ throw this._storedError;
+ }
+
+ if (this._cachedChunks.length > 0) {
+ const chunk = this._cachedChunks.shift();
+
+ return {
+ value: chunk,
+ done: false
+ };
+ }
+
+ if (this._done) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ const requestCapability = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return requestCapability.promise;
+ }
+
+ cancel(reason) {
+ this._done = true;
+
+ this._headersReceivedCapability.reject(reason);
+
+ for (const requestCapability of this._requests) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+
+ this._requests.length = 0;
+
+ if (this._manager.isPendingRequest(this._fullRequestId)) {
+ this._manager.abortRequest(this._fullRequestId);
+ }
+
+ this._fullRequestReader = null;
+ }
+
+}
+
+class PDFNetworkStreamRangeRequestReader {
+ constructor(manager, begin, end) {
+ this._manager = manager;
+ const args = {
+ onDone: this._onDone.bind(this),
+ onError: this._onError.bind(this),
+ onProgress: this._onProgress.bind(this)
+ };
+ this._url = manager.url;
+ this._requestId = manager.requestRange(begin, end, args);
+ this._requests = [];
+ this._queuedChunk = null;
+ this._done = false;
+ this._storedError = undefined;
+ this.onProgress = null;
+ this.onClosed = null;
+ }
+
+ _close() {
+ this.onClosed?.(this);
+ }
+
+ _onDone(data) {
+ const chunk = data.chunk;
+
+ if (this._requests.length > 0) {
+ const requestCapability = this._requests.shift();
+
+ requestCapability.resolve({
+ value: chunk,
+ done: false
+ });
+ } else {
+ this._queuedChunk = chunk;
+ }
+
+ this._done = true;
+
+ for (const requestCapability of this._requests) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+
+ this._requests.length = 0;
+
+ this._close();
+ }
+
+ _onError(status) {
+ this._storedError = (0, _network_utils.createResponseStatusError)(status, this._url);
+
+ for (const requestCapability of this._requests) {
+ requestCapability.reject(this._storedError);
+ }
+
+ this._requests.length = 0;
+ this._queuedChunk = null;
+ }
+
+ _onProgress(evt) {
+ if (!this.isStreamingSupported) {
+ this.onProgress?.({
+ loaded: evt.loaded
+ });
+ }
+ }
+
+ get isStreamingSupported() {
+ return false;
+ }
+
+ async read() {
+ if (this._storedError) {
+ throw this._storedError;
+ }
+
+ if (this._queuedChunk !== null) {
+ const chunk = this._queuedChunk;
+ this._queuedChunk = null;
+ return {
+ value: chunk,
+ done: false
+ };
+ }
+
+ if (this._done) {
+ return {
+ value: undefined,
+ done: true
+ };
+ }
+
+ const requestCapability = (0, _util.createPromiseCapability)();
+
+ this._requests.push(requestCapability);
+
+ return requestCapability.promise;
+ }
+
+ cancel(reason) {
+ this._done = true;
+
+ for (const requestCapability of this._requests) {
+ requestCapability.resolve({
+ value: undefined,
+ done: true
+ });
+ }
+
+ this._requests.length = 0;
+
+ if (this._manager.isPendingRequest(this._requestId)) {
+ this._manager.abortRequest(this._requestId);
+ }
+
+ this._close();
+ }
+
+}
+
+/***/ }),
+/* 27 */
+/***/ ((__unused_webpack_module, exports, __w_pdfjs_require__) => {
+
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+exports.PDFFetchStream = void 0;
+
+var _util = __w_pdfjs_require__(1);
+
+var _network_utils = __w_pdfjs_require__(24);
+
+;
+
+function createFetchOptions(headers, withCredentials, abortController) {
+ return {
+ method: "GET",
+ headers,
+ signal: abortController?.signal,
+ mode: "cors",
+ credentials: withCredentials ? "include" : "same-origin",
+ redirect: "follow"
+ };
+}
+
+function createHeaders(httpHeaders) {
+ const headers = new Headers();
+
+ for (const property in httpHeaders) {
+ const value = httpHeaders[property];
+
+ if (typeof value === "undefined") {
+ continue;
+ }
+
+ headers.append(property, value);
+ }
+
+ return headers;
+}
+
+class PDFFetchStream {
+ constructor(source) {
+ this.source = source;
+ this.isHttp = /^https?:/i.test(source.url);
+ this.httpHeaders = this.isHttp && source.httpHeaders || {};
+ this._fullRequestReader = null;
+ this._rangeRequestReaders = [];
+ }
+
+ get _progressiveDataLength() {
+ return this._fullRequestReader?._loaded ?? 0;
+ }
+
+ getFullReader() {
+ (0, _util.assert)(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once.");
+ this._fullRequestReader = new PDFFetchStreamReader(this);
+ return this._fullRequestReader;
+ }
+
+ getRangeReader(begin, end) {
+ if (end <= this._progressiveDataLength) {
+ return null;
+ }
+
+ const reader = new PDFFetchStreamRangeReader(this, begin, end);
+
+ this._rangeRequestReaders.push(reader);
+
+ return reader;
+ }
+
+ cancelAllRequests(reason) {
+ if (this._fullRequestReader) {
+ this._fullRequestReader.cancel(reason);
+ }
+
+ for (const reader of this._rangeRequestReaders.slice(0)) {
+ reader.cancel(reason);
+ }
+ }
+
+}
+
+exports.PDFFetchStream = PDFFetchStream;
+
+class PDFFetchStreamReader {
+ constructor(stream) {
+ this._stream = stream;
+ this._reader = null;
+ this._loaded = 0;
+ this._filename = null;
+ const source = stream.source;
+ this._withCredentials = source.withCredentials || false;
+ this._contentLength = source.length;
+ this._headersCapability = (0, _util.createPromiseCapability)();
+ this._disableRange = source.disableRange || false;
+ this._rangeChunkSize = source.rangeChunkSize;
+
+ if (!this._rangeChunkSize && !this._disableRange) {
+ this._disableRange = true;
+ }
+
+ if (typeof AbortController !== "undefined") {
+ this._abortController = new AbortController();
+ }
+
+ this._isStreamingSupported = !source.disableStream;
+ this._isRangeSupported = !source.disableRange;
+ this._headers = createHeaders(this._stream.httpHeaders);
+ const url = source.url;
+ fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {
+ if (!(0, _network_utils.validateResponseStatus)(response.status)) {
+ throw (0, _network_utils.createResponseStatusError)(response.status, url);
+ }
+
+ this._reader = response.body.getReader();
+
+ this._headersCapability.resolve();
+
+ const getResponseHeader = name => {
+ return response.headers.get(name);
+ };
+
+ const {
+ allowRangeRequests,
+ suggestedLength
+ } = (0, _network_utils.validateRangeRequestCapabilities)({
+ getResponseHeader,
+ isHttp: this._stream.isHttp,
+ rangeChunkSize: this._rangeChunkSize,
+ disableRange: this._disableRange
+ });
+ this._isRangeSupported = allowRangeRequests;
+ this._contentLength = suggestedLength || this._contentLength;
+ this._filename = (0, _network_utils.extractFilenameFromHeader)(getResponseHeader);
+
+ if (!this._isStreamingSupported && this._isRangeSupported) {
+ this.cancel(new _util.AbortException("Streaming is disabled."));
+ }
+ }).catch(this._headersCapability.reject);
+ this.onProgress = null;
+ }
+
+ get headersReady() {
+ return this._headersCapability.promise;
+ }
+
+ get filename() {
+ return this._filename;
+ }
+
+ get contentLength() {
+ return this._contentLength;
+ }
+
+ get isRangeSupported() {
+ return this._isRangeSupported;
+ }
+
+ get isStreamingSupported() {
+ return this._isStreamingSupported;
+ }
+
+ async read() {
+ await this._headersCapability.promise;
+ const {
+ value,
+ done
+ } = await this._reader.read();
+
+ if (done) {
+ return {
+ value,
+ done
+ };
+ }
+
+ this._loaded += value.byteLength;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded,
+ total: this._contentLength
+ });
+ }
+
+ const buffer = new Uint8Array(value).buffer;
+ return {
+ value: buffer,
+ done: false
+ };
+ }
+
+ cancel(reason) {
+ if (this._reader) {
+ this._reader.cancel(reason);
+ }
+
+ if (this._abortController) {
+ this._abortController.abort();
+ }
+ }
+
+}
+
+class PDFFetchStreamRangeReader {
+ constructor(stream, begin, end) {
+ this._stream = stream;
+ this._reader = null;
+ this._loaded = 0;
+ const source = stream.source;
+ this._withCredentials = source.withCredentials || false;
+ this._readCapability = (0, _util.createPromiseCapability)();
+ this._isStreamingSupported = !source.disableStream;
+
+ if (typeof AbortController !== "undefined") {
+ this._abortController = new AbortController();
+ }
+
+ this._headers = createHeaders(this._stream.httpHeaders);
+
+ this._headers.append("Range", `bytes=${begin}-${end - 1}`);
+
+ const url = source.url;
+ fetch(url, createFetchOptions(this._headers, this._withCredentials, this._abortController)).then(response => {
+ if (!(0, _network_utils.validateResponseStatus)(response.status)) {
+ throw (0, _network_utils.createResponseStatusError)(response.status, url);
+ }
+
+ this._readCapability.resolve();
+
+ this._reader = response.body.getReader();
+ }).catch(this._readCapability.reject);
+ this.onProgress = null;
+ }
+
+ get isStreamingSupported() {
+ return this._isStreamingSupported;
+ }
+
+ async read() {
+ await this._readCapability.promise;
+ const {
+ value,
+ done
+ } = await this._reader.read();
+
+ if (done) {
+ return {
+ value,
+ done
+ };
+ }
+
+ this._loaded += value.byteLength;
+
+ if (this.onProgress) {
+ this.onProgress({
+ loaded: this._loaded
+ });
+ }
+
+ const buffer = new Uint8Array(value).buffer;
+ return {
+ value: buffer,
+ done: false
+ };
+ }
+
+ cancel(reason) {
+ if (this._reader) {
+ this._reader.cancel(reason);
+ }
+
+ if (this._abortController) {
+ this._abortController.abort();
+ }
+ }
+
+}
+
+/***/ })
+/******/ ]);
+/************************************************************************/
+/******/ // The module cache
+/******/ var __webpack_module_cache__ = {};
+/******/
+/******/ // The require function
+/******/ function __w_pdfjs_require__(moduleId) {
+/******/ // Check if module is in cache
+/******/ var cachedModule = __webpack_module_cache__[moduleId];
+/******/ if (cachedModule !== undefined) {
+/******/ return cachedModule.exports;
+/******/ }
+/******/ // Create a new module (and put it into the cache)
+/******/ var module = __webpack_module_cache__[moduleId] = {
+/******/ // no module.id needed
+/******/ // no module.loaded needed
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ __webpack_modules__[moduleId](module, module.exports, __w_pdfjs_require__);
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/************************************************************************/
+var __webpack_exports__ = {};
+// This entry need to be wrapped in an IIFE because it need to be isolated against other modules in the chunk.
+(() => {
+var exports = __webpack_exports__;
+
+
+Object.defineProperty(exports, "__esModule", ({
+ value: true
+}));
+Object.defineProperty(exports, "AnnotationLayer", ({
+ enumerable: true,
+ get: function () {
+ return _annotation_layer.AnnotationLayer;
+ }
+}));
+Object.defineProperty(exports, "AnnotationMode", ({
+ enumerable: true,
+ get: function () {
+ return _util.AnnotationMode;
+ }
+}));
+Object.defineProperty(exports, "CMapCompressionType", ({
+ enumerable: true,
+ get: function () {
+ return _util.CMapCompressionType;
+ }
+}));
+Object.defineProperty(exports, "GlobalWorkerOptions", ({
+ enumerable: true,
+ get: function () {
+ return _worker_options.GlobalWorkerOptions;
+ }
+}));
+Object.defineProperty(exports, "InvalidPDFException", ({
+ enumerable: true,
+ get: function () {
+ return _util.InvalidPDFException;
+ }
+}));
+Object.defineProperty(exports, "LoopbackPort", ({
+ enumerable: true,
+ get: function () {
+ return _api.LoopbackPort;
+ }
+}));
+Object.defineProperty(exports, "MissingPDFException", ({
+ enumerable: true,
+ get: function () {
+ return _util.MissingPDFException;
+ }
+}));
+Object.defineProperty(exports, "OPS", ({
+ enumerable: true,
+ get: function () {
+ return _util.OPS;
+ }
+}));
+Object.defineProperty(exports, "PDFDataRangeTransport", ({
+ enumerable: true,
+ get: function () {
+ return _api.PDFDataRangeTransport;
+ }
+}));
+Object.defineProperty(exports, "PDFDateString", ({
+ enumerable: true,
+ get: function () {
+ return _display_utils.PDFDateString;
+ }
+}));
+Object.defineProperty(exports, "PDFWorker", ({
+ enumerable: true,
+ get: function () {
+ return _api.PDFWorker;
+ }
+}));
+Object.defineProperty(exports, "PasswordResponses", ({
+ enumerable: true,
+ get: function () {
+ return _util.PasswordResponses;
+ }
+}));
+Object.defineProperty(exports, "PermissionFlag", ({
+ enumerable: true,
+ get: function () {
+ return _util.PermissionFlag;
+ }
+}));
+Object.defineProperty(exports, "PixelsPerInch", ({
+ enumerable: true,
+ get: function () {
+ return _display_utils.PixelsPerInch;
+ }
+}));
+Object.defineProperty(exports, "RenderingCancelledException", ({
+ enumerable: true,
+ get: function () {
+ return _display_utils.RenderingCancelledException;
+ }
+}));
+Object.defineProperty(exports, "SVGGraphics", ({
+ enumerable: true,
+ get: function () {
+ return _svg.SVGGraphics;
+ }
+}));
+Object.defineProperty(exports, "UNSUPPORTED_FEATURES", ({
+ enumerable: true,
+ get: function () {
+ return _util.UNSUPPORTED_FEATURES;
+ }
+}));
+Object.defineProperty(exports, "UnexpectedResponseException", ({
+ enumerable: true,
+ get: function () {
+ return _util.UnexpectedResponseException;
+ }
+}));
+Object.defineProperty(exports, "Util", ({
+ enumerable: true,
+ get: function () {
+ return _util.Util;
+ }
+}));
+Object.defineProperty(exports, "VerbosityLevel", ({
+ enumerable: true,
+ get: function () {
+ return _util.VerbosityLevel;
+ }
+}));
+Object.defineProperty(exports, "XfaLayer", ({
+ enumerable: true,
+ get: function () {
+ return _xfa_layer.XfaLayer;
+ }
+}));
+Object.defineProperty(exports, "build", ({
+ enumerable: true,
+ get: function () {
+ return _api.build;
+ }
+}));
+Object.defineProperty(exports, "createPromiseCapability", ({
+ enumerable: true,
+ get: function () {
+ return _util.createPromiseCapability;
+ }
+}));
+Object.defineProperty(exports, "createValidAbsoluteUrl", ({
+ enumerable: true,
+ get: function () {
+ return _util.createValidAbsoluteUrl;
+ }
+}));
+Object.defineProperty(exports, "getDocument", ({
+ enumerable: true,
+ get: function () {
+ return _api.getDocument;
+ }
+}));
+Object.defineProperty(exports, "getFilenameFromUrl", ({
+ enumerable: true,
+ get: function () {
+ return _display_utils.getFilenameFromUrl;
+ }
+}));
+Object.defineProperty(exports, "getPdfFilenameFromUrl", ({
+ enumerable: true,
+ get: function () {
+ return _display_utils.getPdfFilenameFromUrl;
+ }
+}));
+Object.defineProperty(exports, "getXfaPageViewport", ({
+ enumerable: true,
+ get: function () {
+ return _display_utils.getXfaPageViewport;
+ }
+}));
+Object.defineProperty(exports, "isPdfFile", ({
+ enumerable: true,
+ get: function () {
+ return _display_utils.isPdfFile;
+ }
+}));
+Object.defineProperty(exports, "loadScript", ({
+ enumerable: true,
+ get: function () {
+ return _display_utils.loadScript;
+ }
+}));
+Object.defineProperty(exports, "renderTextLayer", ({
+ enumerable: true,
+ get: function () {
+ return _text_layer.renderTextLayer;
+ }
+}));
+Object.defineProperty(exports, "shadow", ({
+ enumerable: true,
+ get: function () {
+ return _util.shadow;
+ }
+}));
+Object.defineProperty(exports, "version", ({
+ enumerable: true,
+ get: function () {
+ return _api.version;
+ }
+}));
+
+var _util = __w_pdfjs_require__(1);
+
+var _api = __w_pdfjs_require__(4);
+
+var _display_utils = __w_pdfjs_require__(5);
+
+var _annotation_layer = __w_pdfjs_require__(18);
+
+var _worker_options = __w_pdfjs_require__(12);
+
+var _is_node = __w_pdfjs_require__(3);
+
+var _text_layer = __w_pdfjs_require__(21);
+
+var _svg = __w_pdfjs_require__(22);
+
+var _xfa_layer = __w_pdfjs_require__(20);
+
+const pdfjsVersion = '2.13.216';
+const pdfjsBuild = '399a0ec60';
+{
+ if (_is_node.isNodeJS) {
+ const {
+ PDFNodeStream
+ } = __w_pdfjs_require__(23);
+
+ (0, _api.setPDFNetworkStreamFactory)(params => {
+ return new PDFNodeStream(params);
+ });
+ } else {
+ const {
+ PDFNetworkStream
+ } = __w_pdfjs_require__(26);
+
+ const {
+ PDFFetchStream
+ } = __w_pdfjs_require__(27);
+
+ (0, _api.setPDFNetworkStreamFactory)(params => {
+ if ((0, _display_utils.isValidFetchUrl)(params.url)) {
+ return new PDFFetchStream(params);
+ }
+
+ return new PDFNetworkStream(params);
+ });
+ }
+}
+})();
+
+/******/ return __webpack_exports__;
+/******/ })()
+;
+});
+//# sourceMappingURL=pdf.js.map
\ No newline at end of file
diff --git a/static/pdfjs/build/pdf.js.map b/static/pdfjs/build/pdf.js.map
new file mode 100644
index 0000000..6d9108a
--- /dev/null
+++ b/static/pdfjs/build/pdf.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"pdf.js","mappings":"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","sources":["webpack://pdfjs-dist/build/pdf/webpack/universalModuleDefinition","webpack://pdfjs-dist/build/pdf/src/shared/util.js","webpack://pdfjs-dist/build/pdf/src/shared/compatibility.js","webpack://pdfjs-dist/build/pdf/src/shared/is_node.js","webpack://pdfjs-dist/build/pdf/src/display/api.js","webpack://pdfjs-dist/build/pdf/src/display/display_utils.js","webpack://pdfjs-dist/build/pdf/src/display/base_factory.js","webpack://pdfjs-dist/build/pdf/src/display/font_loader.js","webpack://pdfjs-dist/build/pdf/src/display/node_utils.js","webpack://pdfjs-dist/build/pdf/src/display/annotation_storage.js","webpack://pdfjs-dist/build/pdf/src/display/canvas.js","webpack://pdfjs-dist/build/pdf/src/display/pattern_helper.js","webpack://pdfjs-dist/build/pdf/src/display/worker_options.js","webpack://pdfjs-dist/build/pdf/src/shared/message_handler.js","webpack://pdfjs-dist/build/pdf/src/display/metadata.js","webpack://pdfjs-dist/build/pdf/src/display/optional_content_config.js","webpack://pdfjs-dist/build/pdf/src/display/transport_stream.js","webpack://pdfjs-dist/build/pdf/src/display/xfa_text.js","webpack://pdfjs-dist/build/pdf/src/display/annotation_layer.js","webpack://pdfjs-dist/build/pdf/src/shared/scripting_utils.js","webpack://pdfjs-dist/build/pdf/src/display/xfa_layer.js","webpack://pdfjs-dist/build/pdf/src/display/text_layer.js","webpack://pdfjs-dist/build/pdf/src/display/svg.js","webpack://pdfjs-dist/build/pdf/src/display/node_stream.js","webpack://pdfjs-dist/build/pdf/src/display/network_utils.js","webpack://pdfjs-dist/build/pdf/src/display/content_disposition.js","webpack://pdfjs-dist/build/pdf/src/display/network.js","webpack://pdfjs-dist/build/pdf/src/display/fetch_stream.js","webpack://pdfjs-dist/build/pdf/webpack/bootstrap","webpack://pdfjs-dist/build/pdf/src/pdf.js"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/build/pdf\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/build/pdf\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/build/pdf\"] = factory();\n})(this, function() {\nreturn ","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport \"./compatibility.js\";\n\nconst IDENTITY_MATRIX = [1, 0, 0, 1, 0, 0];\nconst FONT_IDENTITY_MATRIX = [0.001, 0, 0, 0.001, 0, 0];\n\n/**\n * Refer to the `WorkerTransport.getRenderingIntent`-method in the API, to see\n * how these flags are being used:\n * - ANY, DISPLAY, and PRINT are the normal rendering intents, note the\n * `PDFPageProxy.{render, getOperatorList, getAnnotations}`-methods.\n * - ANNOTATIONS_FORMS, ANNOTATIONS_STORAGE, ANNOTATIONS_DISABLE control which\n * annotations are rendered onto the canvas (i.e. by being included in the\n * operatorList), note the `PDFPageProxy.{render, getOperatorList}`-methods\n * and their `annotationMode`-option.\n * - OPLIST is used with the `PDFPageProxy.getOperatorList`-method, note the\n * `OperatorList`-constructor (on the worker-thread).\n */\nconst RenderingIntentFlag = {\n ANY: 0x01,\n DISPLAY: 0x02,\n PRINT: 0x04,\n ANNOTATIONS_FORMS: 0x10,\n ANNOTATIONS_STORAGE: 0x20,\n ANNOTATIONS_DISABLE: 0x40,\n OPLIST: 0x100,\n};\n\nconst AnnotationMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_FORMS: 2,\n ENABLE_STORAGE: 3,\n};\n\n// Permission flags from Table 22, Section 7.6.3.2 of the PDF specification.\nconst PermissionFlag = {\n PRINT: 0x04,\n MODIFY_CONTENTS: 0x08,\n COPY: 0x10,\n MODIFY_ANNOTATIONS: 0x20,\n FILL_INTERACTIVE_FORMS: 0x100,\n COPY_FOR_ACCESSIBILITY: 0x200,\n ASSEMBLE: 0x400,\n PRINT_HIGH_QUALITY: 0x800,\n};\n\nconst TextRenderingMode = {\n FILL: 0,\n STROKE: 1,\n FILL_STROKE: 2,\n INVISIBLE: 3,\n FILL_ADD_TO_PATH: 4,\n STROKE_ADD_TO_PATH: 5,\n FILL_STROKE_ADD_TO_PATH: 6,\n ADD_TO_PATH: 7,\n FILL_STROKE_MASK: 3,\n ADD_TO_PATH_FLAG: 4,\n};\n\nconst ImageKind = {\n GRAYSCALE_1BPP: 1,\n RGB_24BPP: 2,\n RGBA_32BPP: 3,\n};\n\nconst AnnotationType = {\n TEXT: 1,\n LINK: 2,\n FREETEXT: 3,\n LINE: 4,\n SQUARE: 5,\n CIRCLE: 6,\n POLYGON: 7,\n POLYLINE: 8,\n HIGHLIGHT: 9,\n UNDERLINE: 10,\n SQUIGGLY: 11,\n STRIKEOUT: 12,\n STAMP: 13,\n CARET: 14,\n INK: 15,\n POPUP: 16,\n FILEATTACHMENT: 17,\n SOUND: 18,\n MOVIE: 19,\n WIDGET: 20,\n SCREEN: 21,\n PRINTERMARK: 22,\n TRAPNET: 23,\n WATERMARK: 24,\n THREED: 25,\n REDACT: 26,\n};\n\nconst AnnotationStateModelType = {\n MARKED: \"Marked\",\n REVIEW: \"Review\",\n};\n\nconst AnnotationMarkedState = {\n MARKED: \"Marked\",\n UNMARKED: \"Unmarked\",\n};\n\nconst AnnotationReviewState = {\n ACCEPTED: \"Accepted\",\n REJECTED: \"Rejected\",\n CANCELLED: \"Cancelled\",\n COMPLETED: \"Completed\",\n NONE: \"None\",\n};\n\nconst AnnotationReplyType = {\n GROUP: \"Group\",\n REPLY: \"R\",\n};\n\nconst AnnotationFlag = {\n INVISIBLE: 0x01,\n HIDDEN: 0x02,\n PRINT: 0x04,\n NOZOOM: 0x08,\n NOROTATE: 0x10,\n NOVIEW: 0x20,\n READONLY: 0x40,\n LOCKED: 0x80,\n TOGGLENOVIEW: 0x100,\n LOCKEDCONTENTS: 0x200,\n};\n\nconst AnnotationFieldFlag = {\n READONLY: 0x0000001,\n REQUIRED: 0x0000002,\n NOEXPORT: 0x0000004,\n MULTILINE: 0x0001000,\n PASSWORD: 0x0002000,\n NOTOGGLETOOFF: 0x0004000,\n RADIO: 0x0008000,\n PUSHBUTTON: 0x0010000,\n COMBO: 0x0020000,\n EDIT: 0x0040000,\n SORT: 0x0080000,\n FILESELECT: 0x0100000,\n MULTISELECT: 0x0200000,\n DONOTSPELLCHECK: 0x0400000,\n DONOTSCROLL: 0x0800000,\n COMB: 0x1000000,\n RICHTEXT: 0x2000000,\n RADIOSINUNISON: 0x2000000,\n COMMITONSELCHANGE: 0x4000000,\n};\n\nconst AnnotationBorderStyleType = {\n SOLID: 1,\n DASHED: 2,\n BEVELED: 3,\n INSET: 4,\n UNDERLINE: 5,\n};\n\nconst AnnotationActionEventType = {\n E: \"Mouse Enter\",\n X: \"Mouse Exit\",\n D: \"Mouse Down\",\n U: \"Mouse Up\",\n Fo: \"Focus\",\n Bl: \"Blur\",\n PO: \"PageOpen\",\n PC: \"PageClose\",\n PV: \"PageVisible\",\n PI: \"PageInvisible\",\n K: \"Keystroke\",\n F: \"Format\",\n V: \"Validate\",\n C: \"Calculate\",\n};\n\nconst DocumentActionEventType = {\n WC: \"WillClose\",\n WS: \"WillSave\",\n DS: \"DidSave\",\n WP: \"WillPrint\",\n DP: \"DidPrint\",\n};\n\nconst PageActionEventType = {\n O: \"PageOpen\",\n C: \"PageClose\",\n};\n\nconst StreamType = {\n UNKNOWN: \"UNKNOWN\",\n FLATE: \"FLATE\",\n LZW: \"LZW\",\n DCT: \"DCT\",\n JPX: \"JPX\",\n JBIG: \"JBIG\",\n A85: \"A85\",\n AHX: \"AHX\",\n CCF: \"CCF\",\n RLX: \"RLX\", // PDF short name is 'RL', but telemetry requires three chars.\n};\n\nconst FontType = {\n UNKNOWN: \"UNKNOWN\",\n TYPE1: \"TYPE1\",\n TYPE1STANDARD: \"TYPE1STANDARD\",\n TYPE1C: \"TYPE1C\",\n CIDFONTTYPE0: \"CIDFONTTYPE0\",\n CIDFONTTYPE0C: \"CIDFONTTYPE0C\",\n TRUETYPE: \"TRUETYPE\",\n CIDFONTTYPE2: \"CIDFONTTYPE2\",\n TYPE3: \"TYPE3\",\n OPENTYPE: \"OPENTYPE\",\n TYPE0: \"TYPE0\",\n MMTYPE1: \"MMTYPE1\",\n};\n\nconst VerbosityLevel = {\n ERRORS: 0,\n WARNINGS: 1,\n INFOS: 5,\n};\n\nconst CMapCompressionType = {\n NONE: 0,\n BINARY: 1,\n STREAM: 2,\n};\n\n// All the possible operations for an operator list.\nconst OPS = {\n // Intentionally start from 1 so it is easy to spot bad operators that will be\n // 0's.\n dependency: 1,\n setLineWidth: 2,\n setLineCap: 3,\n setLineJoin: 4,\n setMiterLimit: 5,\n setDash: 6,\n setRenderingIntent: 7,\n setFlatness: 8,\n setGState: 9,\n save: 10,\n restore: 11,\n transform: 12,\n moveTo: 13,\n lineTo: 14,\n curveTo: 15,\n curveTo2: 16,\n curveTo3: 17,\n closePath: 18,\n rectangle: 19,\n stroke: 20,\n closeStroke: 21,\n fill: 22,\n eoFill: 23,\n fillStroke: 24,\n eoFillStroke: 25,\n closeFillStroke: 26,\n closeEOFillStroke: 27,\n endPath: 28,\n clip: 29,\n eoClip: 30,\n beginText: 31,\n endText: 32,\n setCharSpacing: 33,\n setWordSpacing: 34,\n setHScale: 35,\n setLeading: 36,\n setFont: 37,\n setTextRenderingMode: 38,\n setTextRise: 39,\n moveText: 40,\n setLeadingMoveText: 41,\n setTextMatrix: 42,\n nextLine: 43,\n showText: 44,\n showSpacedText: 45,\n nextLineShowText: 46,\n nextLineSetSpacingShowText: 47,\n setCharWidth: 48,\n setCharWidthAndBounds: 49,\n setStrokeColorSpace: 50,\n setFillColorSpace: 51,\n setStrokeColor: 52,\n setStrokeColorN: 53,\n setFillColor: 54,\n setFillColorN: 55,\n setStrokeGray: 56,\n setFillGray: 57,\n setStrokeRGBColor: 58,\n setFillRGBColor: 59,\n setStrokeCMYKColor: 60,\n setFillCMYKColor: 61,\n shadingFill: 62,\n beginInlineImage: 63,\n beginImageData: 64,\n endInlineImage: 65,\n paintXObject: 66,\n markPoint: 67,\n markPointProps: 68,\n beginMarkedContent: 69,\n beginMarkedContentProps: 70,\n endMarkedContent: 71,\n beginCompat: 72,\n endCompat: 73,\n paintFormXObjectBegin: 74,\n paintFormXObjectEnd: 75,\n beginGroup: 76,\n endGroup: 77,\n beginAnnotations: 78,\n endAnnotations: 79,\n beginAnnotation: 80,\n endAnnotation: 81,\n /** @deprecated unused */\n paintJpegXObject: 82,\n paintImageMaskXObject: 83,\n paintImageMaskXObjectGroup: 84,\n paintImageXObject: 85,\n paintInlineImageXObject: 86,\n paintInlineImageXObjectGroup: 87,\n paintImageXObjectRepeat: 88,\n paintImageMaskXObjectRepeat: 89,\n paintSolidColorImageMask: 90,\n constructPath: 91,\n};\n\nconst UNSUPPORTED_FEATURES = {\n /** @deprecated unused */\n unknown: \"unknown\",\n forms: \"forms\",\n javaScript: \"javaScript\",\n signatures: \"signatures\",\n smask: \"smask\",\n shadingPattern: \"shadingPattern\",\n /** @deprecated unused */\n font: \"font\",\n errorTilingPattern: \"errorTilingPattern\",\n errorExtGState: \"errorExtGState\",\n errorXObject: \"errorXObject\",\n errorFontLoadType3: \"errorFontLoadType3\",\n errorFontState: \"errorFontState\",\n errorFontMissing: \"errorFontMissing\",\n errorFontTranslate: \"errorFontTranslate\",\n errorColorSpace: \"errorColorSpace\",\n errorOperatorList: \"errorOperatorList\",\n errorFontToUnicode: \"errorFontToUnicode\",\n errorFontLoadNative: \"errorFontLoadNative\",\n errorFontBuildPath: \"errorFontBuildPath\",\n errorFontGetPath: \"errorFontGetPath\",\n errorMarkedContent: \"errorMarkedContent\",\n errorContentSubStream: \"errorContentSubStream\",\n};\n\nconst PasswordResponses = {\n NEED_PASSWORD: 1,\n INCORRECT_PASSWORD: 2,\n};\n\nlet verbosity = VerbosityLevel.WARNINGS;\n\nfunction setVerbosityLevel(level) {\n if (Number.isInteger(level)) {\n verbosity = level;\n }\n}\n\nfunction getVerbosityLevel() {\n return verbosity;\n}\n\n// A notice for devs. These are good for things that are helpful to devs, such\n// as warning that Workers were disabled, which is important to devs but not\n// end users.\nfunction info(msg) {\n if (verbosity >= VerbosityLevel.INFOS) {\n console.log(`Info: ${msg}`);\n }\n}\n\n// Non-fatal warnings.\nfunction warn(msg) {\n if (verbosity >= VerbosityLevel.WARNINGS) {\n console.log(`Warning: ${msg}`);\n }\n}\n\nfunction unreachable(msg) {\n throw new Error(msg);\n}\n\nfunction assert(cond, msg) {\n if (!cond) {\n unreachable(msg);\n }\n}\n\n// Checks if URLs have the same origin. For non-HTTP based URLs, returns false.\nfunction isSameOrigin(baseUrl, otherUrl) {\n let base;\n try {\n base = new URL(baseUrl);\n if (!base.origin || base.origin === \"null\") {\n return false; // non-HTTP url\n }\n } catch (e) {\n return false;\n }\n\n const other = new URL(otherUrl, base);\n return base.origin === other.origin;\n}\n\n// Checks if URLs use one of the allowed protocols, e.g. to avoid XSS.\nfunction _isValidProtocol(url) {\n if (!url) {\n return false;\n }\n switch (url.protocol) {\n case \"http:\":\n case \"https:\":\n case \"ftp:\":\n case \"mailto:\":\n case \"tel:\":\n return true;\n default:\n return false;\n }\n}\n\n/**\n * Attempts to create a valid absolute URL.\n *\n * @param {URL|string} url - An absolute, or relative, URL.\n * @param {URL|string} [baseUrl] - An absolute URL.\n * @param {Object} [options]\n * @returns Either a valid {URL}, or `null` otherwise.\n */\nfunction createValidAbsoluteUrl(url, baseUrl = null, options = null) {\n if (!url) {\n return null;\n }\n try {\n if (options && typeof url === \"string\") {\n // Let URLs beginning with \"www.\" default to using the \"http://\" protocol.\n if (options.addDefaultProtocol && url.startsWith(\"www.\")) {\n const dots = url.match(/\\./g);\n // Avoid accidentally matching a *relative* URL pointing to a file named\n // e.g. \"www.pdf\" or similar.\n if (dots && dots.length >= 2) {\n url = `http://${url}`;\n }\n }\n\n // According to ISO 32000-1:2008, section 12.6.4.7, URIs should be encoded\n // in 7-bit ASCII. Some bad PDFs use UTF-8 encoding; see bug 1122280.\n if (options.tryConvertEncoding) {\n try {\n url = stringToUTF8String(url);\n } catch (ex) {}\n }\n }\n\n const absoluteUrl = baseUrl ? new URL(url, baseUrl) : new URL(url);\n if (_isValidProtocol(absoluteUrl)) {\n return absoluteUrl;\n }\n } catch (ex) {\n /* `new URL()` will throw on incorrect data. */\n }\n return null;\n}\n\nfunction shadow(obj, prop, value) {\n if (\n typeof PDFJSDev === \"undefined\" ||\n PDFJSDev.test(\"!PRODUCTION || TESTING\")\n ) {\n assert(\n prop in obj,\n `shadow: Property \"${prop && prop.toString()}\" not found in object.`\n );\n }\n Object.defineProperty(obj, prop, {\n value,\n enumerable: true,\n configurable: true,\n writable: false,\n });\n return value;\n}\n\n/**\n * @type {any}\n */\nconst BaseException = (function BaseExceptionClosure() {\n // eslint-disable-next-line no-shadow\n function BaseException(message, name) {\n if (this.constructor === BaseException) {\n unreachable(\"Cannot initialize BaseException.\");\n }\n this.message = message;\n this.name = name;\n }\n BaseException.prototype = new Error();\n BaseException.constructor = BaseException;\n\n return BaseException;\n})();\n\nclass PasswordException extends BaseException {\n constructor(msg, code) {\n super(msg, \"PasswordException\");\n this.code = code;\n }\n}\n\nclass UnknownErrorException extends BaseException {\n constructor(msg, details) {\n super(msg, \"UnknownErrorException\");\n this.details = details;\n }\n}\n\nclass InvalidPDFException extends BaseException {\n constructor(msg) {\n super(msg, \"InvalidPDFException\");\n }\n}\n\nclass MissingPDFException extends BaseException {\n constructor(msg) {\n super(msg, \"MissingPDFException\");\n }\n}\n\nclass UnexpectedResponseException extends BaseException {\n constructor(msg, status) {\n super(msg, \"UnexpectedResponseException\");\n this.status = status;\n }\n}\n\n/**\n * Error caused during parsing PDF data.\n */\nclass FormatError extends BaseException {\n constructor(msg) {\n super(msg, \"FormatError\");\n }\n}\n\n/**\n * Error used to indicate task cancellation.\n */\nclass AbortException extends BaseException {\n constructor(msg) {\n super(msg, \"AbortException\");\n }\n}\n\nfunction bytesToString(bytes) {\n if (\n typeof bytes !== \"object\" ||\n bytes === null ||\n bytes.length === undefined\n ) {\n unreachable(\"Invalid argument for bytesToString\");\n }\n const length = bytes.length;\n const MAX_ARGUMENT_COUNT = 8192;\n if (length < MAX_ARGUMENT_COUNT) {\n return String.fromCharCode.apply(null, bytes);\n }\n const strBuf = [];\n for (let i = 0; i < length; i += MAX_ARGUMENT_COUNT) {\n const chunkEnd = Math.min(i + MAX_ARGUMENT_COUNT, length);\n const chunk = bytes.subarray(i, chunkEnd);\n strBuf.push(String.fromCharCode.apply(null, chunk));\n }\n return strBuf.join(\"\");\n}\n\nfunction stringToBytes(str) {\n if (typeof str !== \"string\") {\n unreachable(\"Invalid argument for stringToBytes\");\n }\n const length = str.length;\n const bytes = new Uint8Array(length);\n for (let i = 0; i < length; ++i) {\n bytes[i] = str.charCodeAt(i) & 0xff;\n }\n return bytes;\n}\n\n/**\n * Gets length of the array (Array, Uint8Array, or string) in bytes.\n * @param {Array|Uint8Array|string} arr\n * @returns {number}\n */\n// eslint-disable-next-line consistent-return\nfunction arrayByteLength(arr) {\n if (arr.length !== undefined) {\n return arr.length;\n }\n if (arr.byteLength !== undefined) {\n return arr.byteLength;\n }\n unreachable(\"Invalid argument for arrayByteLength\");\n}\n\n/**\n * Combines array items (arrays) into single Uint8Array object.\n * @param {Array|Uint8Array|string>} arr - the array of the arrays\n * (Array, Uint8Array, or string).\n * @returns {Uint8Array}\n */\nfunction arraysToBytes(arr) {\n const length = arr.length;\n // Shortcut: if first and only item is Uint8Array, return it.\n if (length === 1 && arr[0] instanceof Uint8Array) {\n return arr[0];\n }\n let resultLength = 0;\n for (let i = 0; i < length; i++) {\n resultLength += arrayByteLength(arr[i]);\n }\n let pos = 0;\n const data = new Uint8Array(resultLength);\n for (let i = 0; i < length; i++) {\n let item = arr[i];\n if (!(item instanceof Uint8Array)) {\n if (typeof item === \"string\") {\n item = stringToBytes(item);\n } else {\n item = new Uint8Array(item);\n }\n }\n const itemLength = item.byteLength;\n data.set(item, pos);\n pos += itemLength;\n }\n return data;\n}\n\nfunction string32(value) {\n if (\n typeof PDFJSDev === \"undefined\" ||\n PDFJSDev.test(\"!PRODUCTION || TESTING\")\n ) {\n assert(\n typeof value === \"number\" && Math.abs(value) < 2 ** 32,\n `string32: Unexpected input \"${value}\".`\n );\n }\n return String.fromCharCode(\n (value >> 24) & 0xff,\n (value >> 16) & 0xff,\n (value >> 8) & 0xff,\n value & 0xff\n );\n}\n\nfunction objectSize(obj) {\n return Object.keys(obj).length;\n}\n\n// Ensure that the returned Object has a `null` prototype; hence why\n// `Object.fromEntries(...)` is not used.\nfunction objectFromMap(map) {\n const obj = Object.create(null);\n for (const [key, value] of map) {\n obj[key] = value;\n }\n return obj;\n}\n\n// Checks the endianness of the platform.\nfunction isLittleEndian() {\n const buffer8 = new Uint8Array(4);\n buffer8[0] = 1;\n const view32 = new Uint32Array(buffer8.buffer, 0, 1);\n return view32[0] === 1;\n}\nconst IsLittleEndianCached = {\n get value() {\n return shadow(this, \"value\", isLittleEndian());\n },\n};\n\n// Checks if it's possible to eval JS expressions.\nfunction isEvalSupported() {\n try {\n new Function(\"\"); // eslint-disable-line no-new, no-new-func\n return true;\n } catch (e) {\n return false;\n }\n}\nconst IsEvalSupportedCached = {\n get value() {\n return shadow(this, \"value\", isEvalSupported());\n },\n};\n\nconst hexNumbers = [...Array(256).keys()].map(n =>\n n.toString(16).padStart(2, \"0\")\n);\n\nclass Util {\n static makeHexColor(r, g, b) {\n return `#${hexNumbers[r]}${hexNumbers[g]}${hexNumbers[b]}`;\n }\n\n // Concatenates two transformation matrices together and returns the result.\n static transform(m1, m2) {\n return [\n m1[0] * m2[0] + m1[2] * m2[1],\n m1[1] * m2[0] + m1[3] * m2[1],\n m1[0] * m2[2] + m1[2] * m2[3],\n m1[1] * m2[2] + m1[3] * m2[3],\n m1[0] * m2[4] + m1[2] * m2[5] + m1[4],\n m1[1] * m2[4] + m1[3] * m2[5] + m1[5],\n ];\n }\n\n // For 2d affine transforms\n static applyTransform(p, m) {\n const xt = p[0] * m[0] + p[1] * m[2] + m[4];\n const yt = p[0] * m[1] + p[1] * m[3] + m[5];\n return [xt, yt];\n }\n\n static applyInverseTransform(p, m) {\n const d = m[0] * m[3] - m[1] * m[2];\n const xt = (p[0] * m[3] - p[1] * m[2] + m[2] * m[5] - m[4] * m[3]) / d;\n const yt = (-p[0] * m[1] + p[1] * m[0] + m[4] * m[1] - m[5] * m[0]) / d;\n return [xt, yt];\n }\n\n // Applies the transform to the rectangle and finds the minimum axially\n // aligned bounding box.\n static getAxialAlignedBoundingBox(r, m) {\n const p1 = Util.applyTransform(r, m);\n const p2 = Util.applyTransform(r.slice(2, 4), m);\n const p3 = Util.applyTransform([r[0], r[3]], m);\n const p4 = Util.applyTransform([r[2], r[1]], m);\n return [\n Math.min(p1[0], p2[0], p3[0], p4[0]),\n Math.min(p1[1], p2[1], p3[1], p4[1]),\n Math.max(p1[0], p2[0], p3[0], p4[0]),\n Math.max(p1[1], p2[1], p3[1], p4[1]),\n ];\n }\n\n static inverseTransform(m) {\n const d = m[0] * m[3] - m[1] * m[2];\n return [\n m[3] / d,\n -m[1] / d,\n -m[2] / d,\n m[0] / d,\n (m[2] * m[5] - m[4] * m[3]) / d,\n (m[4] * m[1] - m[5] * m[0]) / d,\n ];\n }\n\n // Apply a generic 3d matrix M on a 3-vector v:\n // | a b c | | X |\n // | d e f | x | Y |\n // | g h i | | Z |\n // M is assumed to be serialized as [a,b,c,d,e,f,g,h,i],\n // with v as [X,Y,Z]\n static apply3dTransform(m, v) {\n return [\n m[0] * v[0] + m[1] * v[1] + m[2] * v[2],\n m[3] * v[0] + m[4] * v[1] + m[5] * v[2],\n m[6] * v[0] + m[7] * v[1] + m[8] * v[2],\n ];\n }\n\n // This calculation uses Singular Value Decomposition.\n // The SVD can be represented with formula A = USV. We are interested in the\n // matrix S here because it represents the scale values.\n static singularValueDecompose2dScale(m) {\n const transpose = [m[0], m[2], m[1], m[3]];\n\n // Multiply matrix m with its transpose.\n const a = m[0] * transpose[0] + m[1] * transpose[2];\n const b = m[0] * transpose[1] + m[1] * transpose[3];\n const c = m[2] * transpose[0] + m[3] * transpose[2];\n const d = m[2] * transpose[1] + m[3] * transpose[3];\n\n // Solve the second degree polynomial to get roots.\n const first = (a + d) / 2;\n const second = Math.sqrt((a + d) ** 2 - 4 * (a * d - c * b)) / 2;\n const sx = first + second || 1;\n const sy = first - second || 1;\n\n // Scale values are the square roots of the eigenvalues.\n return [Math.sqrt(sx), Math.sqrt(sy)];\n }\n\n // Normalize rectangle rect=[x1, y1, x2, y2] so that (x1,y1) < (x2,y2)\n // For coordinate systems whose origin lies in the bottom-left, this\n // means normalization to (BL,TR) ordering. For systems with origin in the\n // top-left, this means (TL,BR) ordering.\n static normalizeRect(rect) {\n const r = rect.slice(0); // clone rect\n if (rect[0] > rect[2]) {\n r[0] = rect[2];\n r[2] = rect[0];\n }\n if (rect[1] > rect[3]) {\n r[1] = rect[3];\n r[3] = rect[1];\n }\n return r;\n }\n\n // Returns a rectangle [x1, y1, x2, y2] corresponding to the\n // intersection of rect1 and rect2. If no intersection, returns 'false'\n // The rectangle coordinates of rect1, rect2 should be [x1, y1, x2, y2]\n static intersect(rect1, rect2) {\n function compare(a, b) {\n return a - b;\n }\n\n // Order points along the axes\n const orderedX = [rect1[0], rect1[2], rect2[0], rect2[2]].sort(compare);\n const orderedY = [rect1[1], rect1[3], rect2[1], rect2[3]].sort(compare);\n const result = [];\n\n rect1 = Util.normalizeRect(rect1);\n rect2 = Util.normalizeRect(rect2);\n\n // X: first and second points belong to different rectangles?\n if (\n (orderedX[0] === rect1[0] && orderedX[1] === rect2[0]) ||\n (orderedX[0] === rect2[0] && orderedX[1] === rect1[0])\n ) {\n // Intersection must be between second and third points\n result[0] = orderedX[1];\n result[2] = orderedX[2];\n } else {\n return null;\n }\n\n // Y: first and second points belong to different rectangles?\n if (\n (orderedY[0] === rect1[1] && orderedY[1] === rect2[1]) ||\n (orderedY[0] === rect2[1] && orderedY[1] === rect1[1])\n ) {\n // Intersection must be between second and third points\n result[1] = orderedY[1];\n result[3] = orderedY[2];\n } else {\n return null;\n }\n\n return result;\n }\n\n // From https://github.com/adobe-webplatform/Snap.svg/blob/b365287722a72526000ac4bfcf0ce4cac2faa015/src/path.js#L852\n static bezierBoundingBox(x0, y0, x1, y1, x2, y2, x3, y3) {\n const tvalues = [],\n bounds = [[], []];\n let a, b, c, t, t1, t2, b2ac, sqrtb2ac;\n for (let i = 0; i < 2; ++i) {\n if (i === 0) {\n b = 6 * x0 - 12 * x1 + 6 * x2;\n a = -3 * x0 + 9 * x1 - 9 * x2 + 3 * x3;\n c = 3 * x1 - 3 * x0;\n } else {\n b = 6 * y0 - 12 * y1 + 6 * y2;\n a = -3 * y0 + 9 * y1 - 9 * y2 + 3 * y3;\n c = 3 * y1 - 3 * y0;\n }\n if (Math.abs(a) < 1e-12) {\n if (Math.abs(b) < 1e-12) {\n continue;\n }\n t = -c / b;\n if (0 < t && t < 1) {\n tvalues.push(t);\n }\n continue;\n }\n b2ac = b * b - 4 * c * a;\n sqrtb2ac = Math.sqrt(b2ac);\n if (b2ac < 0) {\n continue;\n }\n t1 = (-b + sqrtb2ac) / (2 * a);\n if (0 < t1 && t1 < 1) {\n tvalues.push(t1);\n }\n t2 = (-b - sqrtb2ac) / (2 * a);\n if (0 < t2 && t2 < 1) {\n tvalues.push(t2);\n }\n }\n\n let j = tvalues.length,\n mt;\n const jlen = j;\n while (j--) {\n t = tvalues[j];\n mt = 1 - t;\n bounds[0][j] =\n mt * mt * mt * x0 +\n 3 * mt * mt * t * x1 +\n 3 * mt * t * t * x2 +\n t * t * t * x3;\n bounds[1][j] =\n mt * mt * mt * y0 +\n 3 * mt * mt * t * y1 +\n 3 * mt * t * t * y2 +\n t * t * t * y3;\n }\n\n bounds[0][jlen] = x0;\n bounds[1][jlen] = y0;\n bounds[0][jlen + 1] = x3;\n bounds[1][jlen + 1] = y3;\n bounds[0].length = bounds[1].length = jlen + 2;\n\n return [\n Math.min(...bounds[0]),\n Math.min(...bounds[1]),\n Math.max(...bounds[0]),\n Math.max(...bounds[1]),\n ];\n }\n}\n\nconst PDFStringTranslateTable = [\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x2d8,\n 0x2c7, 0x2c6, 0x2d9, 0x2dd, 0x2db, 0x2da, 0x2dc, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0x2022, 0x2020, 0x2021, 0x2026, 0x2014, 0x2013, 0x192,\n 0x2044, 0x2039, 0x203a, 0x2212, 0x2030, 0x201e, 0x201c, 0x201d, 0x2018,\n 0x2019, 0x201a, 0x2122, 0xfb01, 0xfb02, 0x141, 0x152, 0x160, 0x178, 0x17d,\n 0x131, 0x142, 0x153, 0x161, 0x17e, 0, 0x20ac,\n];\n\nfunction stringToPDFString(str) {\n if (str[0] >= \"\\xEF\") {\n let encoding;\n if (str[0] === \"\\xFE\" && str[1] === \"\\xFF\") {\n encoding = \"utf-16be\";\n } else if (str[0] === \"\\xFF\" && str[1] === \"\\xFE\") {\n encoding = \"utf-16le\";\n } else if (str[0] === \"\\xEF\" && str[1] === \"\\xBB\" && str[2] === \"\\xBF\") {\n encoding = \"utf-8\";\n }\n\n if (encoding) {\n try {\n const decoder = new TextDecoder(encoding, { fatal: true });\n const buffer = stringToBytes(str);\n return decoder.decode(buffer);\n } catch (ex) {\n warn(`stringToPDFString: \"${ex}\".`);\n }\n }\n }\n // ISO Latin 1\n const strBuf = [];\n for (let i = 0, ii = str.length; i < ii; i++) {\n const code = PDFStringTranslateTable[str.charCodeAt(i)];\n strBuf.push(code ? String.fromCharCode(code) : str.charAt(i));\n }\n return strBuf.join(\"\");\n}\n\nfunction escapeString(str) {\n // replace \"(\", \")\", \"\\n\", \"\\r\" and \"\\\"\n // by \"\\(\", \"\\)\", \"\\\\n\", \"\\\\r\" and \"\\\\\"\n // in order to write it in a PDF file.\n return str.replace(/([()\\\\\\n\\r])/g, match => {\n if (match === \"\\n\") {\n return \"\\\\n\";\n } else if (match === \"\\r\") {\n return \"\\\\r\";\n }\n return `\\\\${match}`;\n });\n}\n\nfunction isAscii(str) {\n return /^[\\x00-\\x7F]*$/.test(str);\n}\n\nfunction stringToUTF16BEString(str) {\n const buf = [\"\\xFE\\xFF\"];\n for (let i = 0, ii = str.length; i < ii; i++) {\n const char = str.charCodeAt(i);\n buf.push(\n String.fromCharCode((char >> 8) & 0xff),\n String.fromCharCode(char & 0xff)\n );\n }\n return buf.join(\"\");\n}\n\nfunction stringToUTF8String(str) {\n return decodeURIComponent(escape(str));\n}\n\nfunction utf8StringToString(str) {\n return unescape(encodeURIComponent(str));\n}\n\nfunction isArrayBuffer(v) {\n return typeof v === \"object\" && v !== null && v.byteLength !== undefined;\n}\n\nfunction isArrayEqual(arr1, arr2) {\n if (arr1.length !== arr2.length) {\n return false;\n }\n for (let i = 0, ii = arr1.length; i < ii; i++) {\n if (arr1[i] !== arr2[i]) {\n return false;\n }\n }\n return true;\n}\n\nfunction getModificationDate(date = new Date()) {\n const buffer = [\n date.getUTCFullYear().toString(),\n (date.getUTCMonth() + 1).toString().padStart(2, \"0\"),\n date.getUTCDate().toString().padStart(2, \"0\"),\n date.getUTCHours().toString().padStart(2, \"0\"),\n date.getUTCMinutes().toString().padStart(2, \"0\"),\n date.getUTCSeconds().toString().padStart(2, \"0\"),\n ];\n\n return buffer.join(\"\");\n}\n\n/**\n * Promise Capability object.\n *\n * @typedef {Object} PromiseCapability\n * @property {Promise} promise - A Promise object.\n * @property {boolean} settled - If the Promise has been fulfilled/rejected.\n * @property {function} resolve - Fulfills the Promise.\n * @property {function} reject - Rejects the Promise.\n */\n\n/**\n * Creates a promise capability object.\n * @alias createPromiseCapability\n *\n * @returns {PromiseCapability}\n */\nfunction createPromiseCapability() {\n const capability = Object.create(null);\n let isSettled = false;\n\n Object.defineProperty(capability, \"settled\", {\n get() {\n return isSettled;\n },\n });\n capability.promise = new Promise(function (resolve, reject) {\n capability.resolve = function (data) {\n isSettled = true;\n resolve(data);\n };\n capability.reject = function (reason) {\n isSettled = true;\n reject(reason);\n };\n });\n return capability;\n}\n\nexport {\n AbortException,\n AnnotationActionEventType,\n AnnotationBorderStyleType,\n AnnotationFieldFlag,\n AnnotationFlag,\n AnnotationMarkedState,\n AnnotationMode,\n AnnotationReplyType,\n AnnotationReviewState,\n AnnotationStateModelType,\n AnnotationType,\n arrayByteLength,\n arraysToBytes,\n assert,\n BaseException,\n bytesToString,\n CMapCompressionType,\n createPromiseCapability,\n createValidAbsoluteUrl,\n DocumentActionEventType,\n escapeString,\n FONT_IDENTITY_MATRIX,\n FontType,\n FormatError,\n getModificationDate,\n getVerbosityLevel,\n IDENTITY_MATRIX,\n ImageKind,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isArrayEqual,\n isAscii,\n IsEvalSupportedCached,\n IsLittleEndianCached,\n isSameOrigin,\n MissingPDFException,\n objectFromMap,\n objectSize,\n OPS,\n PageActionEventType,\n PasswordException,\n PasswordResponses,\n PermissionFlag,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n StreamType,\n string32,\n stringToBytes,\n stringToPDFString,\n stringToUTF16BEString,\n stringToUTF8String,\n TextRenderingMode,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n UNSUPPORTED_FEATURES,\n utf8StringToString,\n Util,\n VerbosityLevel,\n warn,\n};\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals __non_webpack_require__ */\n\nimport { isNodeJS } from \"./is_node.js\";\n\n// Skip compatibility checks for modern builds and if we already ran the module.\nif (\n (typeof PDFJSDev === \"undefined\" || !PDFJSDev.test(\"SKIP_BABEL\")) &&\n !globalThis._pdfjsCompatibilityChecked\n) {\n globalThis._pdfjsCompatibilityChecked = true;\n\n // Support: Node.js\n (function checkNodeBtoa() {\n if (globalThis.btoa || !isNodeJS) {\n return;\n }\n globalThis.btoa = function (chars) {\n // eslint-disable-next-line no-undef\n return Buffer.from(chars, \"binary\").toString(\"base64\");\n };\n })();\n\n // Support: Node.js\n (function checkNodeAtob() {\n if (globalThis.atob || !isNodeJS) {\n return;\n }\n globalThis.atob = function (input) {\n // eslint-disable-next-line no-undef\n return Buffer.from(input, \"base64\").toString(\"binary\");\n };\n })();\n\n // Support: Node.js\n (function checkDOMMatrix() {\n if (globalThis.DOMMatrix || !isNodeJS) {\n return;\n }\n globalThis.DOMMatrix = require(\"dommatrix/dist/dommatrix.js\");\n })();\n\n // Provides support for *recent* additions to the Promise specification,\n // however basic Promise support is assumed to be available natively.\n // Support: Firefox<71, Chrome<76, Safari<13, Node.js<12.9.0\n (function checkPromise() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n // The current image decoders are synchronous, hence `Promise` shouldn't\n // need to be polyfilled for the IMAGE_DECODERS build target.\n return;\n }\n if (globalThis.Promise.allSettled) {\n return;\n }\n globalThis.Promise = require(\"core-js/es/promise/index.js\");\n })();\n\n // Support: Node.js\n (function checkReadableStream() {\n if (globalThis.ReadableStream || !isNodeJS) {\n return;\n }\n globalThis.ReadableStream = __non_webpack_require__(\n \"web-streams-polyfill/dist/ponyfill.js\"\n ).ReadableStream;\n })();\n\n // Support: Firefox<94, Chrome<98, Safari<15.4, Node.js<17.0.0\n (function checkStructuredClone() {\n if (typeof PDFJSDev !== \"undefined\" && PDFJSDev.test(\"IMAGE_DECODERS\")) {\n // The current image decoders are synchronous, hence `structuredClone`\n // shouldn't need to be polyfilled for the IMAGE_DECODERS build target.\n return;\n }\n if (globalThis.structuredClone) {\n return;\n }\n require(\"core-js/web/structured-clone.js\");\n })();\n}\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals process */\n\n// NW.js / Electron is a browser context, but copies some Node.js objects; see\n// http://docs.nwjs.io/en/latest/For%20Users/Advanced/JavaScript%20Contexts%20in%20NW.js/#access-nodejs-and-nwjs-api-in-browser-context\n// https://www.electronjs.org/docs/api/process#processversionselectron-readonly\n// https://www.electronjs.org/docs/api/process#processtype-readonly\nconst isNodeJS =\n typeof process === \"object\" &&\n process + \"\" === \"[object process]\" &&\n !process.versions.nw &&\n !(process.versions.electron && process.type && process.type !== \"browser\");\n\nexport { isNodeJS };\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @module pdfjsLib\n */\n\nimport {\n AbortException,\n AnnotationMode,\n assert,\n createPromiseCapability,\n getVerbosityLevel,\n info,\n InvalidPDFException,\n isArrayBuffer,\n isSameOrigin,\n MissingPDFException,\n PasswordException,\n RenderingIntentFlag,\n setVerbosityLevel,\n shadow,\n stringToBytes,\n UnexpectedResponseException,\n UnknownErrorException,\n unreachable,\n warn,\n} from \"../shared/util.js\";\nimport {\n deprecated,\n DOMCanvasFactory,\n DOMCMapReaderFactory,\n DOMStandardFontDataFactory,\n isDataScheme,\n loadScript,\n PageViewport,\n RenderingCancelledException,\n StatTimer,\n} from \"./display_utils.js\";\nimport { FontFaceObject, FontLoader } from \"./font_loader.js\";\nimport {\n NodeCanvasFactory,\n NodeCMapReaderFactory,\n NodeStandardFontDataFactory,\n} from \"./node_utils.js\";\nimport { AnnotationStorage } from \"./annotation_storage.js\";\nimport { CanvasGraphics } from \"./canvas.js\";\nimport { GlobalWorkerOptions } from \"./worker_options.js\";\nimport { isNodeJS } from \"../shared/is_node.js\";\nimport { MessageHandler } from \"../shared/message_handler.js\";\nimport { Metadata } from \"./metadata.js\";\nimport { OptionalContentConfig } from \"./optional_content_config.js\";\nimport { PDFDataTransportStream } from \"./transport_stream.js\";\nimport { XfaText } from \"./xfa_text.js\";\n\nconst DEFAULT_RANGE_CHUNK_SIZE = 65536; // 2^16 = 65536\nconst RENDERING_CANCELLED_TIMEOUT = 100; // ms\n\nconst DefaultCanvasFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeCanvasFactory\n : DOMCanvasFactory;\nconst DefaultCMapReaderFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeCMapReaderFactory\n : DOMCMapReaderFactory;\nconst DefaultStandardFontDataFactory =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS\n ? NodeStandardFontDataFactory\n : DOMStandardFontDataFactory;\n\n/**\n * @typedef {function} IPDFStreamFactory\n * @param {DocumentInitParameters} params - The document initialization\n * parameters. The \"url\" key is always present.\n * @returns {Promise} A promise, which is resolved with an instance of\n * {IPDFStream}.\n * @ignore\n */\n\n/**\n * @type {IPDFStreamFactory}\n * @private\n */\nlet createPDFNetworkStream;\n\n/**\n * Sets the function that instantiates an {IPDFStream} as an alternative PDF\n * data transport.\n *\n * @param {IPDFStreamFactory} pdfNetworkStreamFactory - The factory function\n * that takes document initialization parameters (including a \"url\") and\n * returns a promise which is resolved with an instance of {IPDFStream}.\n * @ignore\n */\nfunction setPDFNetworkStreamFactory(pdfNetworkStreamFactory) {\n createPDFNetworkStream = pdfNetworkStreamFactory;\n}\n\n/**\n * @typedef { Int8Array | Uint8Array | Uint8ClampedArray |\n * Int16Array | Uint16Array |\n * Int32Array | Uint32Array | Float32Array |\n * Float64Array\n * } TypedArray\n */\n\n/**\n * @typedef {Object} RefProxy\n * @property {number} num\n * @property {number} gen\n */\n\n/**\n * Document initialization / loading parameters object.\n *\n * @typedef {Object} DocumentInitParameters\n * @property {string|URL} [url] - The URL of the PDF.\n * @property {TypedArray|Array|string} [data] - Binary PDF data. Use\n * typed arrays (Uint8Array) to improve the memory usage. If PDF data is\n * BASE64-encoded, use `atob()` to convert it to a binary string first.\n * @property {Object} [httpHeaders] - Basic authentication headers.\n * @property {boolean} [withCredentials] - Indicates whether or not\n * cross-site Access-Control requests should be made using credentials such\n * as cookies or authorization headers. The default is `false`.\n * @property {string} [password] - For decrypting password-protected PDFs.\n * @property {TypedArray} [initialData] - A typed array with the first portion\n * or all of the pdf data. Used by the extension since some data is already\n * loaded before the switch to range requests.\n * @property {number} [length] - The PDF file length. It's used for progress\n * reports and range requests operations.\n * @property {PDFDataRangeTransport} [range] - Allows for using a custom range\n * transport implementation.\n * @property {number} [rangeChunkSize] - Specify maximum number of bytes fetched\n * per range request. The default value is {@link DEFAULT_RANGE_CHUNK_SIZE}.\n * @property {PDFWorker} [worker] - The worker that will be used for loading and\n * parsing the PDF data.\n * @property {number} [verbosity] - Controls the logging level; the constants\n * from {@link VerbosityLevel} should be used.\n * @property {string} [docBaseUrl] - The base URL of the document, used when\n * attempting to recover valid absolute URLs for annotations, and outline\n * items, that (incorrectly) only specify relative URLs.\n * @property {string} [cMapUrl] - The URL where the predefined Adobe CMaps are\n * located. Include the trailing slash.\n * @property {boolean} [cMapPacked] - Specifies if the Adobe CMaps are binary\n * packed or not.\n * @property {Object} [CMapReaderFactory] - The factory that will be used when\n * reading built-in CMap files. Providing a custom factory is useful for\n * environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMCMapReaderFactory}.\n * @property {boolean} [useSystemFonts] - When `true`, fonts that aren't\n * embedded in the PDF document will fallback to a system font.\n * The default value is `true` in web environments and `false` in Node.js;\n * unless `disableFontFace === true` in which case this defaults to `false`\n * regardless of the environment (to prevent completely broken fonts).\n * @property {string} [standardFontDataUrl] - The URL where the standard font\n * files are located. Include the trailing slash.\n * @property {Object} [StandardFontDataFactory] - The factory that will be used\n * when reading the standard font files. Providing a custom factory is useful\n * for environments without Fetch API or `XMLHttpRequest` support, such as\n * Node.js. The default value is {DOMStandardFontDataFactory}.\n * @property {boolean} [useWorkerFetch] - Enable using the Fetch API in the\n * worker-thread when reading CMap and standard font files. When `true`,\n * the `CMapReaderFactory` and `StandardFontDataFactory` options are ignored.\n * The default value is `true` in web environments and `false` in Node.js.\n * @property {boolean} [stopAtErrors] - Reject certain promises, e.g.\n * `getOperatorList`, `getTextContent`, and `RenderTask`, when the associated\n * PDF data cannot be successfully parsed, instead of attempting to recover\n * whatever possible of the data. The default value is `false`.\n * @property {number} [maxImageSize] - The maximum allowed image size in total\n * pixels, i.e. width * height. Images above this value will not be rendered.\n * Use -1 for no limit, which is also the default value.\n * @property {boolean} [isEvalSupported] - Determines if we can evaluate strings\n * as JavaScript. Primarily used to improve performance of font rendering, and\n * when parsing PDF functions. The default value is `true`.\n * @property {boolean} [disableFontFace] - By default fonts are converted to\n * OpenType fonts and loaded via the Font Loading API or `@font-face` rules.\n * If disabled, fonts will be rendered using a built-in font renderer that\n * constructs the glyphs with primitive path commands.\n * The default value is `false` in web environments and `true` in Node.js.\n * @property {boolean} [fontExtraProperties] - Include additional properties,\n * which are unused during rendering of PDF documents, when exporting the\n * parsed font data from the worker-thread. This may be useful for debugging\n * purposes (and backwards compatibility), but note that it will lead to\n * increased memory usage. The default value is `false`.\n * @property {boolean} [enableXfa] - Render Xfa forms if any.\n * The default value is `false`.\n * @property {HTMLDocument} [ownerDocument] - Specify an explicit document\n * context to create elements with and to load resources, such as fonts,\n * into. Defaults to the current document.\n * @property {boolean} [disableRange] - Disable range request loading of PDF\n * files. When enabled, and if the server supports partial content requests,\n * then the PDF will be fetched in chunks. The default value is `false`.\n * @property {boolean} [disableStream] - Disable streaming of PDF file data.\n * By default PDF.js attempts to load PDF files in chunks. The default value\n * is `false`.\n * @property {boolean} [disableAutoFetch] - Disable pre-fetching of PDF file\n * data. When range requests are enabled PDF.js will automatically keep\n * fetching more data even if it isn't needed to display the current page.\n * The default value is `false`.\n *\n * NOTE: It is also necessary to disable streaming, see above, in order for\n * disabling of pre-fetching to work correctly.\n * @property {boolean} [pdfBug] - Enables special hooks for debugging PDF.js\n * (see `web/debugger.js`). The default value is `false`.\n */\n\n/**\n * This is the main entry point for loading a PDF and interacting with it.\n *\n * NOTE: If a URL is used to fetch the PDF data a standard Fetch API call (or\n * XHR as fallback) is used, which means it must follow same origin rules,\n * e.g. no cross-domain requests without CORS.\n *\n * @param {string|URL|TypedArray|PDFDataRangeTransport|DocumentInitParameters}\n * src - Can be a URL where a PDF file is located, a typed array (Uint8Array)\n * already populated with data, or a parameter object.\n * @returns {PDFDocumentLoadingTask}\n */\nfunction getDocument(src) {\n const task = new PDFDocumentLoadingTask();\n\n let source;\n if (typeof src === \"string\" || src instanceof URL) {\n source = { url: src };\n } else if (isArrayBuffer(src)) {\n source = { data: src };\n } else if (src instanceof PDFDataRangeTransport) {\n source = { range: src };\n } else {\n if (typeof src !== \"object\") {\n throw new Error(\n \"Invalid parameter in getDocument, \" +\n \"need either string, URL, Uint8Array, or parameter object.\"\n );\n }\n if (!src.url && !src.data && !src.range) {\n throw new Error(\n \"Invalid parameter object: need either .data, .range or .url\"\n );\n }\n source = src;\n }\n const params = Object.create(null);\n let rangeTransport = null,\n worker = null;\n\n for (const key in source) {\n const value = source[key];\n\n switch (key) {\n case \"url\":\n if (typeof window !== \"undefined\") {\n try {\n // The full path is required in the 'url' field.\n params[key] = new URL(value, window.location).href;\n continue;\n } catch (ex) {\n warn(`Cannot create valid URL: \"${ex}\".`);\n }\n } else if (typeof value === \"string\" || value instanceof URL) {\n params[key] = value.toString(); // Support Node.js environments.\n continue;\n }\n throw new Error(\n \"Invalid PDF url data: \" +\n \"either string or URL-object is expected in the url property.\"\n );\n case \"range\":\n rangeTransport = value;\n continue;\n case \"worker\":\n worker = value;\n continue;\n case \"data\":\n // Converting string or array-like data to Uint8Array.\n if (\n typeof PDFJSDev !== \"undefined\" &&\n PDFJSDev.test(\"GENERIC\") &&\n isNodeJS &&\n typeof Buffer !== \"undefined\" && // eslint-disable-line no-undef\n value instanceof Buffer // eslint-disable-line no-undef\n ) {\n params[key] = new Uint8Array(value);\n } else if (value instanceof Uint8Array) {\n break; // Use the data as-is when it's already a Uint8Array.\n } else if (typeof value === \"string\") {\n params[key] = stringToBytes(value);\n } else if (\n typeof value === \"object\" &&\n value !== null &&\n !isNaN(value.length)\n ) {\n params[key] = new Uint8Array(value);\n } else if (isArrayBuffer(value)) {\n params[key] = new Uint8Array(value);\n } else {\n throw new Error(\n \"Invalid PDF binary data: either typed array, \" +\n \"string, or array-like object is expected in the data property.\"\n );\n }\n continue;\n }\n params[key] = value;\n }\n\n params.rangeChunkSize = params.rangeChunkSize || DEFAULT_RANGE_CHUNK_SIZE;\n params.CMapReaderFactory =\n params.CMapReaderFactory || DefaultCMapReaderFactory;\n params.StandardFontDataFactory =\n params.StandardFontDataFactory || DefaultStandardFontDataFactory;\n params.ignoreErrors = params.stopAtErrors !== true;\n params.fontExtraProperties = params.fontExtraProperties === true;\n params.pdfBug = params.pdfBug === true;\n params.enableXfa = params.enableXfa === true;\n\n if (\n typeof params.docBaseUrl !== \"string\" ||\n isDataScheme(params.docBaseUrl)\n ) {\n // Ignore \"data:\"-URLs, since they can't be used to recover valid absolute\n // URLs anyway. We want to avoid sending them to the worker-thread, since\n // they contain the *entire* PDF document and can thus be arbitrarily long.\n params.docBaseUrl = null;\n }\n if (!Number.isInteger(params.maxImageSize)) {\n params.maxImageSize = -1;\n }\n if (typeof params.useWorkerFetch !== \"boolean\") {\n params.useWorkerFetch =\n params.CMapReaderFactory === DOMCMapReaderFactory &&\n params.StandardFontDataFactory === DOMStandardFontDataFactory;\n }\n if (typeof params.isEvalSupported !== \"boolean\") {\n params.isEvalSupported = true;\n }\n if (typeof params.disableFontFace !== \"boolean\") {\n params.disableFontFace =\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) && isNodeJS;\n }\n if (typeof params.useSystemFonts !== \"boolean\") {\n params.useSystemFonts =\n !(\n (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) &&\n isNodeJS\n ) && !params.disableFontFace;\n }\n if (typeof params.ownerDocument === \"undefined\") {\n params.ownerDocument = globalThis.document;\n }\n\n if (typeof params.disableRange !== \"boolean\") {\n params.disableRange = false;\n }\n if (typeof params.disableStream !== \"boolean\") {\n params.disableStream = false;\n }\n if (typeof params.disableAutoFetch !== \"boolean\") {\n params.disableAutoFetch = false;\n }\n\n // Set the main-thread verbosity level.\n setVerbosityLevel(params.verbosity);\n\n if (!worker) {\n const workerParams = {\n verbosity: params.verbosity,\n port: GlobalWorkerOptions.workerPort,\n };\n // Worker was not provided -- creating and owning our own. If message port\n // is specified in global worker options, using it.\n worker = workerParams.port\n ? PDFWorker.fromPort(workerParams)\n : new PDFWorker(workerParams);\n task._worker = worker;\n }\n const docId = task.docId;\n worker.promise\n .then(function () {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const workerIdPromise = _fetchDocument(\n worker,\n params,\n rangeTransport,\n docId\n );\n const networkStreamPromise = new Promise(function (resolve) {\n let networkStream;\n if (rangeTransport) {\n networkStream = new PDFDataTransportStream(\n {\n length: params.length,\n initialData: params.initialData,\n progressiveDone: params.progressiveDone,\n contentDispositionFilename: params.contentDispositionFilename,\n disableRange: params.disableRange,\n disableStream: params.disableStream,\n },\n rangeTransport\n );\n } else if (!params.data) {\n networkStream = createPDFNetworkStream({\n url: params.url,\n length: params.length,\n httpHeaders: params.httpHeaders,\n withCredentials: params.withCredentials,\n rangeChunkSize: params.rangeChunkSize,\n disableRange: params.disableRange,\n disableStream: params.disableStream,\n });\n }\n resolve(networkStream);\n });\n\n return Promise.all([workerIdPromise, networkStreamPromise]).then(\n function ([workerId, networkStream]) {\n if (task.destroyed) {\n throw new Error(\"Loading aborted\");\n }\n\n const messageHandler = new MessageHandler(\n docId,\n workerId,\n worker.port\n );\n const transport = new WorkerTransport(\n messageHandler,\n task,\n networkStream,\n params\n );\n task._transport = transport;\n messageHandler.send(\"Ready\", null);\n }\n );\n })\n .catch(task._capability.reject);\n\n return task;\n}\n\n/**\n * Starts fetching of specified PDF document/data.\n *\n * @param {PDFWorker} worker\n * @param {Object} source\n * @param {PDFDataRangeTransport} pdfDataRangeTransport\n * @param {string} docId - Unique document ID, used in `MessageHandler`.\n * @returns {Promise} A promise that is resolved when the worker ID of\n * the `MessageHandler` is known.\n * @private\n */\nasync function _fetchDocument(worker, source, pdfDataRangeTransport, docId) {\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n\n if (pdfDataRangeTransport) {\n source.length = pdfDataRangeTransport.length;\n source.initialData = pdfDataRangeTransport.initialData;\n source.progressiveDone = pdfDataRangeTransport.progressiveDone;\n source.contentDispositionFilename =\n pdfDataRangeTransport.contentDispositionFilename;\n }\n const workerId = await worker.messageHandler.sendWithPromise(\n \"GetDocRequest\",\n {\n docId,\n apiVersion:\n typeof PDFJSDev !== \"undefined\" && !PDFJSDev.test(\"TESTING\")\n ? PDFJSDev.eval(\"BUNDLE_VERSION\")\n : null,\n // Only send the required properties, and *not* the entire object.\n source: {\n data: source.data,\n url: source.url,\n password: source.password,\n disableAutoFetch: source.disableAutoFetch,\n rangeChunkSize: source.rangeChunkSize,\n length: source.length,\n },\n maxImageSize: source.maxImageSize,\n disableFontFace: source.disableFontFace,\n docBaseUrl: source.docBaseUrl,\n ignoreErrors: source.ignoreErrors,\n isEvalSupported: source.isEvalSupported,\n fontExtraProperties: source.fontExtraProperties,\n enableXfa: source.enableXfa,\n useSystemFonts: source.useSystemFonts,\n cMapUrl: source.useWorkerFetch ? source.cMapUrl : null,\n standardFontDataUrl: source.useWorkerFetch\n ? source.standardFontDataUrl\n : null,\n }\n );\n\n if (worker.destroyed) {\n throw new Error(\"Worker was destroyed\");\n }\n return workerId;\n}\n\n/**\n * @typedef {Object} OnProgressParameters\n * @property {number} loaded - Currently loaded number of bytes.\n * @property {number} total - Total number of bytes in the PDF file.\n */\n\n/**\n * The loading task controls the operations required to load a PDF document\n * (such as network requests) and provides a way to listen for completion,\n * after which individual pages can be rendered.\n */\nclass PDFDocumentLoadingTask {\n static get idCounters() {\n return shadow(this, \"idCounters\", { doc: 0 });\n }\n\n constructor() {\n this._capability = createPromiseCapability();\n this._transport = null;\n this._worker = null;\n\n /**\n * Unique identifier for the document loading task.\n * @type {string}\n */\n this.docId = `d${PDFDocumentLoadingTask.idCounters.doc++}`;\n\n /**\n * Whether the loading task is destroyed or not.\n * @type {boolean}\n */\n this.destroyed = false;\n\n /**\n * Callback to request a password if a wrong or no password was provided.\n * The callback receives two parameters: a function that should be called\n * with the new password, and a reason (see {@link PasswordResponses}).\n * @type {function}\n */\n this.onPassword = null;\n\n /**\n * Callback to be able to monitor the loading progress of the PDF file\n * (necessary to implement e.g. a loading bar).\n * The callback receives an {@link OnProgressParameters} argument.\n * @type {function}\n */\n this.onProgress = null;\n\n /**\n * Callback for when an unsupported feature is used in the PDF document.\n * The callback receives an {@link UNSUPPORTED_FEATURES} argument.\n * @type {function}\n */\n this.onUnsupportedFeature = null;\n }\n\n /**\n * Promise for document loading task completion.\n * @type {Promise}\n */\n get promise() {\n return this._capability.promise;\n }\n\n /**\n * Abort all network requests and destroy the worker.\n * @returns {Promise} A promise that is resolved when destruction is\n * completed.\n */\n async destroy() {\n this.destroyed = true;\n await this._transport?.destroy();\n\n this._transport = null;\n if (this._worker) {\n this._worker.destroy();\n this._worker = null;\n }\n }\n}\n\n/**\n * Abstract class to support range requests file loading.\n */\nclass PDFDataRangeTransport {\n /**\n * @param {number} length\n * @param {Uint8Array} initialData\n * @param {boolean} [progressiveDone]\n * @param {string} [contentDispositionFilename]\n */\n constructor(\n length,\n initialData,\n progressiveDone = false,\n contentDispositionFilename = null\n ) {\n this.length = length;\n this.initialData = initialData;\n this.progressiveDone = progressiveDone;\n this.contentDispositionFilename = contentDispositionFilename;\n\n this._rangeListeners = [];\n this._progressListeners = [];\n this._progressiveReadListeners = [];\n this._progressiveDoneListeners = [];\n this._readyCapability = createPromiseCapability();\n }\n\n addRangeListener(listener) {\n this._rangeListeners.push(listener);\n }\n\n addProgressListener(listener) {\n this._progressListeners.push(listener);\n }\n\n addProgressiveReadListener(listener) {\n this._progressiveReadListeners.push(listener);\n }\n\n addProgressiveDoneListener(listener) {\n this._progressiveDoneListeners.push(listener);\n }\n\n onDataRange(begin, chunk) {\n for (const listener of this._rangeListeners) {\n listener(begin, chunk);\n }\n }\n\n onDataProgress(loaded, total) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressListeners) {\n listener(loaded, total);\n }\n });\n }\n\n onDataProgressiveRead(chunk) {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveReadListeners) {\n listener(chunk);\n }\n });\n }\n\n onDataProgressiveDone() {\n this._readyCapability.promise.then(() => {\n for (const listener of this._progressiveDoneListeners) {\n listener();\n }\n });\n }\n\n transportReady() {\n this._readyCapability.resolve();\n }\n\n requestDataRange(begin, end) {\n unreachable(\"Abstract method PDFDataRangeTransport.requestDataRange\");\n }\n\n abort() {}\n}\n\n/**\n * Proxy to a `PDFDocument` in the worker thread.\n */\nclass PDFDocumentProxy {\n constructor(pdfInfo, transport) {\n this._pdfInfo = pdfInfo;\n this._transport = transport;\n\n if (typeof PDFJSDev === \"undefined\" || PDFJSDev.test(\"GENERIC\")) {\n Object.defineProperty(this, \"fingerprint\", {\n get() {\n deprecated(\n \"`PDFDocumentProxy.fingerprint`, \" +\n \"please use `PDFDocumentProxy.fingerprints` instead.\"\n );\n return this.fingerprints[0];\n },\n });\n\n Object.defineProperty(this, \"getStats\", {\n value: async () => {\n deprecated(\n \"`PDFDocumentProxy.getStats`, \" +\n \"please use the `PDFDocumentProxy.stats`-getter instead.\"\n );\n return this.stats || { streamTypes: {}, fontTypes: {} };\n },\n });\n }\n }\n\n /**\n * @type {AnnotationStorage} Storage for annotation data in forms.\n */\n get annotationStorage() {\n return this._transport.annotationStorage;\n }\n\n /**\n * @type {number} Total number of pages in the PDF file.\n */\n get numPages() {\n return this._pdfInfo.numPages;\n }\n\n /**\n * @type {Array} A (not guaranteed to be) unique ID to\n * identify the PDF document.\n * NOTE: The first element will always be defined for all PDF documents,\n * whereas the second element is only defined for *modified* PDF documents.\n */\n get fingerprints() {\n return this._pdfInfo.fingerprints;\n }\n\n /**\n * @typedef {Object} PDFDocumentStats\n * @property {Object} streamTypes - Used stream types in the\n * document (an item is set to true if specific stream ID was used in the\n * document).\n * @property {Object} fontTypes - Used font types in the\n * document (an item is set to true if specific font ID was used in the\n * document).\n */\n\n /**\n * @type {PDFDocumentStats | null} The current statistics about document\n * structures, or `null` when no statistics exists.\n */\n get stats() {\n return this._transport.stats;\n }\n\n /**\n * @type {boolean} True if only XFA form.\n */\n get isPureXfa() {\n return !!this._transport._htmlForXfa;\n }\n\n /**\n * NOTE: This is (mostly) intended to support printing of XFA forms.\n *\n * @type {Object | null} An object representing a HTML tree structure\n * to render the XFA, or `null` when no XFA form exists.\n */\n get allXfaHtml() {\n return this._transport._htmlForXfa;\n }\n\n /**\n * @param {number} pageNumber - The page number to get. The first page is 1.\n * @returns {Promise} A promise that is resolved with\n * a {@link PDFPageProxy} object.\n */\n getPage(pageNumber) {\n return this._transport.getPage(pageNumber);\n }\n\n /**\n * @param {RefProxy} ref - The page reference.\n * @returns {Promise} A promise that is resolved with the page index,\n * starting from zero, that is associated with the reference.\n */\n getPageIndex(ref) {\n return this._transport.getPageIndex(ref);\n }\n\n /**\n * @returns {Promise